From c43069111dd2b0dfb74f7e90b360e60ffb751e0a Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Thu, 12 Sep 2024 12:56:19 -0400 Subject: [PATCH 01/47] chore: move custom errors to sep branch --- .../harnesses/DelegationManagerHarness.sol | 2 +- certora/harnesses/EigenPodHarness.sol | 2 +- certora/harnesses/EigenPodManagerHarness.sol | 2 +- certora/harnesses/PausableHarness.sol | 2 +- certora/harnesses/SlasherHarness.sol | 2 +- certora/harnesses/StrategyManagerHarness.sol | 2 +- foundry.toml | 2 +- .../mainnet/Mainnet_Unpause_Deposits.s.sol | 2 +- .../Deploy_Preprod_RewardsCoordinator.s.sol | 2 +- .../Deploy_Test_RewardsCoordinator.s.sol | 2 +- .../holesky/Eigen_Strategy_Deploy.s.sol | 2 +- .../deploy/holesky/Eigen_Token_Deploy.s.sol | 2 +- .../holesky/M2_Deploy_From_Scratch.s.sol | 2 +- script/deploy/holesky/M2_Deploy_Preprod.s.sol | 2 +- .../holesky/longtail-preprod-upgrade.s.sol | 2 +- script/deploy/holesky/v040-holesky-pepe.s.sol | 2 +- script/deploy/local/Deploy_From_Scratch.s.sol | 2 +- .../EigenPod_Minor_Upgrade_Deploy.s.sol | 2 +- .../deploy/mainnet/M2_Mainnet_Upgrade.s.sol | 2 +- .../mainnet/v0.3.0-mainnet-rewards.s.sol | 2 +- .../deploy/mainnet/v0.4.2-mainnet-pepe.s.sol | 2 +- script/utils/ExistingDeploymentParser.sol | 2 +- script/utils/TimelockEncoding.sol | 2 +- script/whitelist/Staker.sol | 2 +- .../delegationFaucet/DelegationFaucet.sol | 2 +- .../DelegationFaucetStaker.sol | 2 +- .../DeployDelegationFaucet.sol | 2 +- src/contracts/core/AVSDirectory.sol | 18 +++--- src/contracts/core/AVSDirectoryStorage.sol | 2 +- src/contracts/core/DelegationManager.sol | 52 ++++++++--------- .../core/DelegationManagerStorage.sol | 2 +- src/contracts/core/RewardsCoordinator.sol | 58 +++++++++---------- .../core/RewardsCoordinatorStorage.sol | 2 +- src/contracts/core/Slasher.sol | 2 +- src/contracts/core/StrategyManager.sol | 26 ++++----- src/contracts/core/StrategyManagerStorage.sol | 2 +- src/contracts/interfaces/IAVSDirectory.sol | 13 +++++ .../interfaces/IDelegationManager.sol | 37 ++++++++++++ src/contracts/interfaces/IEigenPod.sol | 49 ++++++++++++++++ src/contracts/interfaces/IEigenPodManager.sol | 11 ++++ src/contracts/interfaces/IPausable.sol | 11 ++++ src/contracts/interfaces/IPauserRegistry.sol | 3 + .../interfaces/IRewardsCoordinator.sol | 57 +++++++++++++++++- src/contracts/interfaces/ISocketUpdater.sol | 2 +- src/contracts/interfaces/IStrategy.sol | 15 +++++ src/contracts/interfaces/IStrategyFactory.sol | 9 ++- src/contracts/interfaces/IStrategyManager.sol | 23 ++++++++ src/contracts/libraries/BeaconChainProofs.sol | 25 +++++--- src/contracts/libraries/BytesLib.sol | 25 ++++---- .../libraries/EIP1271SignatureUtils.sol | 9 ++- src/contracts/libraries/Merkle.sol | 6 +- .../libraries/StructuredLinkedList.sol | 2 +- src/contracts/permissions/Pausable.sol | 18 +++--- src/contracts/permissions/PauserRegistry.sol | 8 +-- src/contracts/pods/EigenPod.sol | 52 ++++++++--------- src/contracts/pods/EigenPodManager.sol | 32 +++++----- src/contracts/pods/EigenPodManagerStorage.sol | 2 +- .../pods/EigenPodPausingConstants.sol | 2 +- src/contracts/pods/EigenPodStorage.sol | 2 +- src/contracts/strategies/EigenStrategy.sol | 6 +- src/contracts/strategies/StrategyBase.sol | 14 ++--- .../strategies/StrategyBaseTVLLimits.sol | 8 +-- src/contracts/strategies/StrategyFactory.sol | 8 +-- .../strategies/StrategyFactoryStorage.sol | 2 +- src/contracts/token/BackingEigen.sol | 2 +- src/contracts/token/Eigen.sol | 2 +- .../UpgradeableSignatureCheckingUtils.sol | 2 +- src/test/Delegation.t.sol | 2 +- src/test/DelegationFaucet.t.sol | 2 +- src/test/DepositWithdraw.t.sol | 2 +- src/test/EigenLayerDeployer.t.sol | 2 +- src/test/EigenLayerTestHelper.t.sol | 2 +- src/test/Pausable.t.sol | 2 +- src/test/Strategy.t.sol | 2 +- src/test/Withdrawals.t.sol | 2 +- src/test/events/IAVSDirectoryEvents.sol | 2 +- src/test/events/IDelegationManagerEvents.sol | 2 +- src/test/events/IEigenPodEvents.sol | 2 +- src/test/events/IEigenPodManagerEvents.sol | 2 +- src/test/events/IRewardsCoordinatorEvents.sol | 2 +- src/test/events/IStrategyManagerEvents.sol | 2 +- src/test/harnesses/EigenHarness.sol | 2 +- src/test/harnesses/EigenPodHarness.sol | 2 +- src/test/harnesses/EigenPodManagerWrapper.sol | 2 +- src/test/harnesses/PausableHarness.sol | 2 +- src/test/integration/IntegrationBase.t.sol | 2 +- src/test/integration/IntegrationChecks.t.sol | 2 +- .../integration/IntegrationDeployer.t.sol | 2 +- src/test/integration/TimeMachine.t.sol | 2 +- .../mainnet/BeaconChainProofs.sol | 2 +- .../mainnet/IBeaconChainOracle.sol | 2 +- .../mainnet/IDelayedWithdrawalRouter.sol | 2 +- .../mainnet/IEigenPod.sol | 2 +- .../mainnet/IEigenPodManager.sol | 2 +- .../mainnet/IStrategyManager.sol | 2 +- .../integration/mocks/BeaconChainMock.t.sol | 2 +- .../mocks/EIP_4788_Oracle_Mock.t.sol | 2 +- .../Delegate_Deposit_Queue_Complete.t.sol | 2 +- .../Deposit_Delegate_Queue_Complete.t.sol | 2 +- ...Deposit_Delegate_Redelegate_Complete.t.sol | 2 +- ...Deposit_Delegate_Undelegate_Complete.t.sol | 2 +- .../Deposit_Delegate_UpdateBalance.t.sol | 2 +- .../tests/Deposit_Queue_Complete.t.sol | 2 +- ...it_Register_QueueWithdrawal_Complete.t.sol | 2 +- .../integration/tests/Upgrade_Setup.t.sol | 2 +- .../VerifyWC_StartCP_CompleteCP.t.sol | 2 +- src/test/integration/users/User.t.sol | 2 +- src/test/integration/users/User_M1.t.sol | 2 +- src/test/integration/utils/PrintUtils.t.sol | 2 +- src/test/mocks/DelegationManagerMock.sol | 2 +- src/test/mocks/Dummy.sol | 2 +- src/test/mocks/ERC20Mock.sol | 2 +- src/test/mocks/ERC20_OneWeiFeeOnTransfer.sol | 2 +- .../mocks/ERC20_SetTransferReverting_Mock.sol | 2 +- src/test/mocks/ETHDepositMock.sol | 2 +- src/test/mocks/EmptyContract.sol | 2 +- src/test/mocks/MockDecimals.sol | 2 +- src/test/mocks/OwnableMock.sol | 2 +- src/test/mocks/SlasherMock.sol | 2 +- src/test/mocks/StrategyManagerMock.sol | 2 +- .../token/EigenTransferRestrictions.t.sol | 2 +- src/test/token/EigenWrapping.t.sol | 2 +- src/test/token/bEIGEN.t.sol | 2 +- src/test/unit/AVSDirectoryUnit.t.sol | 2 +- src/test/unit/DelegationUnit.t.sol | 2 +- src/test/unit/EigenPodManagerUnit.t.sol | 2 +- src/test/unit/EigenPodUnit.t.sol | 2 +- src/test/unit/PausableUnit.t.sol | 2 +- src/test/unit/PauserRegistryUnit.t.sol | 2 +- src/test/unit/RewardsCoordinatorUnit.t.sol | 2 +- src/test/unit/StrategyBaseTVLLimitsUnit.sol | 2 +- src/test/unit/StrategyBaseUnit.t.sol | 2 +- src/test/unit/StrategyFactoryUnit.t.sol | 2 +- src/test/unit/StrategyManagerUnit.t.sol | 2 +- src/test/utils/BeaconChainProofsWrapper.sol | 2 +- src/test/utils/EigenLayerUnitTestBase.sol | 2 +- src/test/utils/EigenLayerUnitTestSetup.sol | 2 +- src/test/utils/EigenPodUser.t.sol | 2 +- src/test/utils/Operators.sol | 2 +- src/test/utils/Owners.sol | 2 +- src/test/utils/ProofParsing.sol | 2 +- src/test/utils/SignatureCompaction.sol | 2 +- src/test/utils/Utils.sol | 2 +- 143 files changed, 535 insertions(+), 292 deletions(-) diff --git a/certora/harnesses/DelegationManagerHarness.sol b/certora/harnesses/DelegationManagerHarness.sol index 9f2366ee6..05143f537 100644 --- a/certora/harnesses/DelegationManagerHarness.sol +++ b/certora/harnesses/DelegationManagerHarness.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../src/contracts/core/DelegationManager.sol"; diff --git a/certora/harnesses/EigenPodHarness.sol b/certora/harnesses/EigenPodHarness.sol index 1845cff7a..a000e4954 100644 --- a/certora/harnesses/EigenPodHarness.sol +++ b/certora/harnesses/EigenPodHarness.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../src/contracts/pods/EigenPod.sol"; diff --git a/certora/harnesses/EigenPodManagerHarness.sol b/certora/harnesses/EigenPodManagerHarness.sol index 84576ec9f..034425449 100644 --- a/certora/harnesses/EigenPodManagerHarness.sol +++ b/certora/harnesses/EigenPodManagerHarness.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../src/contracts/pods/EigenPodManager.sol"; diff --git a/certora/harnesses/PausableHarness.sol b/certora/harnesses/PausableHarness.sol index fc0095ebe..2719eba6f 100644 --- a/certora/harnesses/PausableHarness.sol +++ b/certora/harnesses/PausableHarness.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../src/contracts/permissions/Pausable.sol"; diff --git a/certora/harnesses/SlasherHarness.sol b/certora/harnesses/SlasherHarness.sol index 519895780..eab81659c 100644 --- a/certora/harnesses/SlasherHarness.sol +++ b/certora/harnesses/SlasherHarness.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../src/contracts/core/Slasher.sol"; diff --git a/certora/harnesses/StrategyManagerHarness.sol b/certora/harnesses/StrategyManagerHarness.sol index 441037032..a8c1ba2a0 100644 --- a/certora/harnesses/StrategyManagerHarness.sol +++ b/certora/harnesses/StrategyManagerHarness.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../src/contracts/core/StrategyManager.sol"; diff --git a/foundry.toml b/foundry.toml index 8a79acefa..10126ce27 100644 --- a/foundry.toml +++ b/foundry.toml @@ -16,7 +16,7 @@ optimizer_runs = 200 # Whether or not to use the Yul intermediate representation compilation pipeline via_ir = false # Override the Solidity version (this overrides `auto_detect_solc`) -solc_version = '0.8.12' +solc_version = '0.8.27' [rpc_endpoints] mainnet = "${RPC_MAINNET}" diff --git a/script/admin/mainnet/Mainnet_Unpause_Deposits.s.sol b/script/admin/mainnet/Mainnet_Unpause_Deposits.s.sol index 8384613db..251670be1 100644 --- a/script/admin/mainnet/Mainnet_Unpause_Deposits.s.sol +++ b/script/admin/mainnet/Mainnet_Unpause_Deposits.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../utils/ExistingDeploymentParser.sol"; import "../../utils/TimelockEncoding.sol"; diff --git a/script/deploy/holesky/Deploy_Preprod_RewardsCoordinator.s.sol b/script/deploy/holesky/Deploy_Preprod_RewardsCoordinator.s.sol index fa077f934..095bc3c8e 100644 --- a/script/deploy/holesky/Deploy_Preprod_RewardsCoordinator.s.sol +++ b/script/deploy/holesky/Deploy_Preprod_RewardsCoordinator.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "./Deploy_Test_RewardsCoordinator.s.sol"; diff --git a/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol b/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol index 480123d70..5aae342de 100644 --- a/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol +++ b/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../utils/ExistingDeploymentParser.sol"; diff --git a/script/deploy/holesky/Eigen_Strategy_Deploy.s.sol b/script/deploy/holesky/Eigen_Strategy_Deploy.s.sol index 233f158bb..08123d3aa 100644 --- a/script/deploy/holesky/Eigen_Strategy_Deploy.s.sol +++ b/script/deploy/holesky/Eigen_Strategy_Deploy.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../utils/ExistingDeploymentParser.sol"; diff --git a/script/deploy/holesky/Eigen_Token_Deploy.s.sol b/script/deploy/holesky/Eigen_Token_Deploy.s.sol index bd130a034..d993eb105 100644 --- a/script/deploy/holesky/Eigen_Token_Deploy.s.sol +++ b/script/deploy/holesky/Eigen_Token_Deploy.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; diff --git a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol index 1e7e371ea..c03178c07 100644 --- a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol +++ b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../utils/ExistingDeploymentParser.sol"; diff --git a/script/deploy/holesky/M2_Deploy_Preprod.s.sol b/script/deploy/holesky/M2_Deploy_Preprod.s.sol index 8dde5dde7..2d5dfc690 100644 --- a/script/deploy/holesky/M2_Deploy_Preprod.s.sol +++ b/script/deploy/holesky/M2_Deploy_Preprod.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "./M2_Deploy_From_Scratch.s.sol"; diff --git a/script/deploy/holesky/longtail-preprod-upgrade.s.sol b/script/deploy/holesky/longtail-preprod-upgrade.s.sol index 2a9b7b9cf..f4202add9 100644 --- a/script/deploy/holesky/longtail-preprod-upgrade.s.sol +++ b/script/deploy/holesky/longtail-preprod-upgrade.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../utils/ExistingDeploymentParser.sol"; diff --git a/script/deploy/holesky/v040-holesky-pepe.s.sol b/script/deploy/holesky/v040-holesky-pepe.s.sol index 6b12ccf56..b7c2dfd7b 100644 --- a/script/deploy/holesky/v040-holesky-pepe.s.sol +++ b/script/deploy/holesky/v040-holesky-pepe.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../utils/ExistingDeploymentParser.sol"; diff --git a/script/deploy/local/Deploy_From_Scratch.s.sol b/script/deploy/local/Deploy_From_Scratch.s.sol index a6e56b723..ed8b6a719 100644 --- a/script/deploy/local/Deploy_From_Scratch.s.sol +++ b/script/deploy/local/Deploy_From_Scratch.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; diff --git a/script/deploy/mainnet/EigenPod_Minor_Upgrade_Deploy.s.sol b/script/deploy/mainnet/EigenPod_Minor_Upgrade_Deploy.s.sol index 774e85dc8..9f0ac1d4a 100644 --- a/script/deploy/mainnet/EigenPod_Minor_Upgrade_Deploy.s.sol +++ b/script/deploy/mainnet/EigenPod_Minor_Upgrade_Deploy.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; diff --git a/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol b/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol index c69bbe108..7bf101485 100644 --- a/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol +++ b/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../utils/ExistingDeploymentParser.sol"; import "../../utils/TimelockEncoding.sol"; diff --git a/script/deploy/mainnet/v0.3.0-mainnet-rewards.s.sol b/script/deploy/mainnet/v0.3.0-mainnet-rewards.s.sol index 1fe59bed4..72db07599 100644 --- a/script/deploy/mainnet/v0.3.0-mainnet-rewards.s.sol +++ b/script/deploy/mainnet/v0.3.0-mainnet-rewards.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/Create2.sol"; import "../../utils/ExistingDeploymentParser.sol"; diff --git a/script/deploy/mainnet/v0.4.2-mainnet-pepe.s.sol b/script/deploy/mainnet/v0.4.2-mainnet-pepe.s.sol index 9d3447e07..3ad0b8d2a 100644 --- a/script/deploy/mainnet/v0.4.2-mainnet-pepe.s.sol +++ b/script/deploy/mainnet/v0.4.2-mainnet-pepe.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/Create2.sol"; import "../../utils/ExistingDeploymentParser.sol"; diff --git a/script/utils/ExistingDeploymentParser.sol b/script/utils/ExistingDeploymentParser.sol index 23f24557b..20c081acc 100644 --- a/script/utils/ExistingDeploymentParser.sol +++ b/script/utils/ExistingDeploymentParser.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; diff --git a/script/utils/TimelockEncoding.sol b/script/utils/TimelockEncoding.sol index cbb0c8da3..c2eaad396 100644 --- a/script/utils/TimelockEncoding.sol +++ b/script/utils/TimelockEncoding.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Script.sol"; import "forge-std/Test.sol"; diff --git a/script/whitelist/Staker.sol b/script/whitelist/Staker.sol index f353610ce..c2ec20af1 100644 --- a/script/whitelist/Staker.sol +++ b/script/whitelist/Staker.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../src/contracts/interfaces/IStrategyManager.sol"; import "../../src/contracts/interfaces/IStrategy.sol"; diff --git a/script/whitelist/delegationFaucet/DelegationFaucet.sol b/script/whitelist/delegationFaucet/DelegationFaucet.sol index 327e8e678..0466fa686 100644 --- a/script/whitelist/delegationFaucet/DelegationFaucet.sol +++ b/script/whitelist/delegationFaucet/DelegationFaucet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/contracts/interfaces/IStrategyManager.sol"; import "src/contracts/interfaces/IStrategy.sol"; diff --git a/script/whitelist/delegationFaucet/DelegationFaucetStaker.sol b/script/whitelist/delegationFaucet/DelegationFaucetStaker.sol index fac0e543c..8eed644a6 100644 --- a/script/whitelist/delegationFaucet/DelegationFaucetStaker.sol +++ b/script/whitelist/delegationFaucet/DelegationFaucetStaker.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/contracts/interfaces/IStrategyManager.sol"; diff --git a/script/whitelist/delegationFaucet/DeployDelegationFaucet.sol b/script/whitelist/delegationFaucet/DeployDelegationFaucet.sol index db458e99d..f901c7e51 100644 --- a/script/whitelist/delegationFaucet/DeployDelegationFaucet.sol +++ b/script/whitelist/delegationFaucet/DeployDelegationFaucet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/contracts/interfaces/IDelegationManager.sol"; import "src/contracts/interfaces/IStrategyManager.sol"; diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index c1d004a8b..60f5bf025 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; @@ -65,21 +65,25 @@ contract AVSDirectory is address operator, ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature ) external onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { + // Assert `operatorSignature.expiry` has not elapsed. require( operatorSignature.expiry >= block.timestamp, - "AVSDirectory.registerOperatorToAVS: operator signature expired" + SignatureExpired() ); + // Assert that the `operator` is not actively registered to the AVS. require( avsOperatorStatus[msg.sender][operator] != OperatorAVSRegistrationStatus.REGISTERED, - "AVSDirectory.registerOperatorToAVS: operator already registered" + InvalidOperator() ); + // Assert `operator` has not already spent `operatorSignature.salt`. require( !operatorSaltIsSpent[operator][operatorSignature.salt], - "AVSDirectory.registerOperatorToAVS: salt already spent" + SaltSpent() ); + // Assert `operator` is a registered operator. require( delegation.isOperator(operator), - "AVSDirectory.registerOperatorToAVS: operator not registered to EigenLayer yet" + OperatorNotRegistered() ); // Calculate the digest hash @@ -115,9 +119,10 @@ contract AVSDirectory is external onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { + // Assert that operator is registered for the AVS. require( avsOperatorStatus[msg.sender][operator] == OperatorAVSRegistrationStatus.REGISTERED, - "AVSDirectory.deregisterOperatorFromAVS: operator not registered" + InvalidOperator() ); // Set the operator as deregistered @@ -139,7 +144,6 @@ contract AVSDirectory is * @param salt A unique and single use value associated with the approver signature. */ function cancelSalt(bytes32 salt) external { - require(!operatorSaltIsSpent[msg.sender][salt], "AVSDirectory.cancelSalt: cannot cancel spent salt"); operatorSaltIsSpent[msg.sender][salt] = true; } diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index 47a326f16..d6d099dc3 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/AVSDirectoryStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/IAVSDirectory.sol"; import "../interfaces/IDelegationManager.sol"; diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index d4d12091a..de30fd47f 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; @@ -47,7 +47,7 @@ contract DelegationManager is modifier onlyStrategyManagerOrEigenPodManager() { require( msg.sender == address(strategyManager) || msg.sender == address(eigenPodManager), - "DelegationManager: onlyStrategyManagerOrEigenPodManager" + OnlyStrategyManagerOrEigenPodManager() ); _; } @@ -108,7 +108,7 @@ contract DelegationManager is OperatorDetails calldata registeringOperatorDetails, string calldata metadataURI ) external { - require(!isDelegated(msg.sender), "DelegationManager.registerAsOperator: caller is already actively delegated"); + require(!isDelegated(msg.sender), ActivelyDelegated()); _setOperatorDetails(msg.sender, registeringOperatorDetails); SignatureWithExpiry memory emptySignatureAndExpiry; // delegate from the operator to themselves @@ -125,7 +125,7 @@ contract DelegationManager is * @dev The caller must have previously registered as an operator in EigenLayer. */ function modifyOperatorDetails(OperatorDetails calldata newOperatorDetails) external { - require(isOperator(msg.sender), "DelegationManager.modifyOperatorDetails: caller must be an operator"); + require(isOperator(msg.sender), OperatorNotRegistered()); _setOperatorDetails(msg.sender, newOperatorDetails); } @@ -134,7 +134,7 @@ contract DelegationManager is * @param metadataURI The URI for metadata associated with an operator */ function updateOperatorMetadataURI(string calldata metadataURI) external { - require(isOperator(msg.sender), "DelegationManager.updateOperatorMetadataURI: caller must be an operator"); + require(isOperator(msg.sender), OperatorNotRegistered()); emit OperatorMetadataURIUpdated(msg.sender, metadataURI); } @@ -156,8 +156,8 @@ contract DelegationManager is SignatureWithExpiry memory approverSignatureAndExpiry, bytes32 approverSalt ) external { - require(!isDelegated(msg.sender), "DelegationManager.delegateTo: staker is already actively delegated"); - require(isOperator(operator), "DelegationManager.delegateTo: operator is not registered in EigenLayer"); + require(!isDelegated(msg.sender), ActivelyDelegated()); + require(isOperator(operator), OperatorNotRegistered()); // go through the internal delegation flow, checking the `approverSignatureAndExpiry` if applicable _delegate(msg.sender, operator, approverSignatureAndExpiry, approverSalt); } @@ -189,11 +189,11 @@ contract DelegationManager is // check the signature expiry require( stakerSignatureAndExpiry.expiry >= block.timestamp, - "DelegationManager.delegateToBySignature: staker signature expired" + SignatureExpired() ); - require(!isDelegated(staker), "DelegationManager.delegateToBySignature: staker is already actively delegated"); + require(!isDelegated(staker), ActivelyDelegated()); require( - isOperator(operator), "DelegationManager.delegateToBySignature: operator is not registered in EigenLayer" + isOperator(operator), OperatorNotRegistered() ); // calculate the digest hash, then increment `staker`'s nonce @@ -221,14 +221,14 @@ contract DelegationManager is onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) returns (bytes32[] memory withdrawalRoots) { - require(isDelegated(staker), "DelegationManager.undelegate: staker must be delegated to undelegate"); - require(!isOperator(staker), "DelegationManager.undelegate: operators cannot be undelegated"); - require(staker != address(0), "DelegationManager.undelegate: cannot undelegate zero address"); + require(isDelegated(staker), NotActivelyDelegated()); + require(!isOperator(staker), OperatorsCannotUndelegate()); + require(staker != address(0), InputAddressZero()); address operator = delegatedTo[staker]; require( msg.sender == staker || msg.sender == operator || msg.sender == _operatorDetails[operator].delegationApprover, - "DelegationManager.undelegate: caller cannot undelegate staker" + CallerCannotUndelegate() ); // Gather strategies and shares to remove from staker/operator during undelegation @@ -286,11 +286,11 @@ contract DelegationManager is for (uint256 i = 0; i < queuedWithdrawalParams.length; i++) { require( queuedWithdrawalParams[i].strategies.length == queuedWithdrawalParams[i].shares.length, - "DelegationManager.queueWithdrawal: input length mismatch" + InputArrayLengthMismatch() ); require( queuedWithdrawalParams[i].withdrawer == msg.sender, - "DelegationManager.queueWithdrawal: withdrawer must be staker" + WithdrawerNotStaker() ); // Remove shares from staker's strategies and place strategies/shares in queue. @@ -478,12 +478,12 @@ contract DelegationManager is // check the signature expiry require( approverSignatureAndExpiry.expiry >= block.timestamp, - "DelegationManager._delegate: approver signature expired" + SignatureExpired() ); // check that the salt hasn't been used previously, then mark the salt as spent require( !delegationApproverSaltIsSpent[_delegationApprover][approverSalt], - "DelegationManager._delegate: approverSalt already spent" + SaltSpent() ); delegationApproverSaltIsSpent[_delegationApprover][approverSalt] = true; @@ -540,23 +540,23 @@ contract DelegationManager is bytes32 withdrawalRoot = calculateWithdrawalRoot(withdrawal); require( - pendingWithdrawals[withdrawalRoot], "DelegationManager._completeQueuedWithdrawal: action is not in queue" + pendingWithdrawals[withdrawalRoot], WithdrawalNotQueued() ); require( withdrawal.startBlock + minWithdrawalDelayBlocks <= block.number, - "DelegationManager._completeQueuedWithdrawal: minWithdrawalDelayBlocks period has not yet passed" + WithdrawalDelayNotElapsed() ); require( msg.sender == withdrawal.withdrawer, - "DelegationManager._completeQueuedWithdrawal: only withdrawer can complete action" + WithdrawerNotCaller() ); if (receiveAsTokens) { require( tokens.length == withdrawal.strategies.length, - "DelegationManager._completeQueuedWithdrawal: input length mismatch" + InputArrayLengthMismatch() ); } @@ -569,7 +569,7 @@ contract DelegationManager is for (uint256 i = 0; i < withdrawal.strategies.length;) { require( withdrawal.startBlock + strategyWithdrawalDelayBlocks[withdrawal.strategies[i]] <= block.number, - "DelegationManager._completeQueuedWithdrawal: withdrawalDelayBlocks period has not yet passed for this strategy" + WithdrawalDelayNotElapsed() ); _withdrawSharesAsTokens({ @@ -664,9 +664,9 @@ contract DelegationManager is uint256[] memory shares ) internal returns (bytes32) { require( - staker != address(0), "DelegationManager._removeSharesAndQueueWithdrawal: staker cannot be zero address" + staker != address(0), InputAddressZero() ); - require(strategies.length != 0, "DelegationManager._removeSharesAndQueueWithdrawal: strategies cannot be empty"); + require(strategies.length != 0, InputArrayLengthZero()); // Remove shares from staker and operator // Each of these operations fail if we attempt to remove more shares than exist @@ -694,7 +694,7 @@ contract DelegationManager is } else { require( staker == withdrawer || !strategyManager.thirdPartyTransfersForbidden(strategies[i]), - "DelegationManager._removeSharesAndQueueWithdrawal: withdrawer must be same address as staker if thirdPartyTransfersForbidden are set" + WithdrawerNotStaker() ); // this call will revert if `shares[i]` exceeds the Staker's current shares in `strategies[i]` strategyManager.removeShares(staker, strategies[i], shares[i]); diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index 00fc5b4ac..3af7b64fe 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/IStrategyManager.sol"; import "../interfaces/IDelegationManager.sol"; diff --git a/src/contracts/core/RewardsCoordinator.sol b/src/contracts/core/RewardsCoordinator.sol index d23330e0a..a3ded2471 100644 --- a/src/contracts/core/RewardsCoordinator.sol +++ b/src/contracts/core/RewardsCoordinator.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; @@ -55,14 +55,14 @@ contract RewardsCoordinator is IStrategy public constant beaconChainETHStrategy = IStrategy(0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0); modifier onlyRewardsUpdater() { - require(msg.sender == rewardsUpdater, "RewardsCoordinator: caller is not the rewardsUpdater"); + require(msg.sender == rewardsUpdater, OnlyRewardsUpdater()); _; } modifier onlyRewardsForAllSubmitter() { require( isRewardsForAllSubmitter[msg.sender], - "RewardsCoordinator: caller is not a valid createRewardsForAllSubmission submitter" + OnlyRewardsForAllSubmitter() ); _; } @@ -229,14 +229,14 @@ contract RewardsCoordinator is if (claimer == address(0)) { claimer = earner; } - require(msg.sender == claimer, "RewardsCoordinator.processClaim: caller is not valid claimer"); + require(msg.sender == claimer, InvalidClaimer()); for (uint256 i = 0; i < claim.tokenIndices.length; i++) { TokenTreeMerkleLeaf calldata tokenLeaf = claim.tokenLeaves[i]; uint256 currCumulativeClaimed = cumulativeClaimed[earner][tokenLeaf.token]; require( tokenLeaf.cumulativeEarnings > currCumulativeClaimed, - "RewardsCoordinator.processClaim: cumulativeEarnings must be gt than cumulativeClaimed" + EarningsNotGreaterThanClaimed() ); // Calculate amount to claim and update cumulativeClaimed @@ -260,11 +260,11 @@ contract RewardsCoordinator is ) external onlyWhenNotPaused(PAUSED_SUBMIT_DISABLE_ROOTS) onlyRewardsUpdater { require( rewardsCalculationEndTimestamp > currRewardsCalculationEndTimestamp, - "RewardsCoordinator.submitRoot: new root must be for newer calculated period" + NewRootMustBeForNewCalculatedPeriod() ); require( rewardsCalculationEndTimestamp < block.timestamp, - "RewardsCoordinator.submitRoot: rewardsCalculationEndTimestamp cannot be in the future" + RewardsEndTimestampNotElapsed() ); uint32 rootIndex = uint32(_distributionRoots.length); uint32 activatedAt = uint32(block.timestamp) + activationDelay; @@ -285,10 +285,10 @@ contract RewardsCoordinator is * @param rootIndex The index of the root to be disabled */ function disableRoot(uint32 rootIndex) external onlyWhenNotPaused(PAUSED_SUBMIT_DISABLE_ROOTS) onlyRewardsUpdater { - require(rootIndex < _distributionRoots.length, "RewardsCoordinator.disableRoot: invalid rootIndex"); + require(rootIndex < _distributionRoots.length, InvalidRootIndex()); DistributionRoot storage root = _distributionRoots[rootIndex]; - require(!root.disabled, "RewardsCoordinator.disableRoot: root already disabled"); - require(block.timestamp < root.activatedAt, "RewardsCoordinator.disableRoot: root already activated"); + require(!root.disabled, RootDisabled()); + require(block.timestamp < root.activatedAt, RootActivated()); root.disabled = true; emit DistributionRootDisabled(rootIndex); } @@ -356,33 +356,33 @@ contract RewardsCoordinator is function _validateRewardsSubmission(RewardsSubmission calldata rewardsSubmission) internal view { require( rewardsSubmission.strategiesAndMultipliers.length > 0, - "RewardsCoordinator._validateRewardsSubmission: no strategies set" + InputArrayLengthZero() ); - require(rewardsSubmission.amount > 0, "RewardsCoordinator._validateRewardsSubmission: amount cannot be 0"); + require(rewardsSubmission.amount > 0, AmountZero()); require( rewardsSubmission.amount <= MAX_REWARDS_AMOUNT, - "RewardsCoordinator._validateRewardsSubmission: amount too large" + AmountExceedsMax() ); require( rewardsSubmission.duration <= MAX_REWARDS_DURATION, - "RewardsCoordinator._validateRewardsSubmission: duration exceeds MAX_REWARDS_DURATION" + DurationExceedsMax() ); require( rewardsSubmission.duration % CALCULATION_INTERVAL_SECONDS == 0, - "RewardsCoordinator._validateRewardsSubmission: duration must be a multiple of CALCULATION_INTERVAL_SECONDS" + DurationNotMultipleOfCalculationIntervalSeconds() ); require( rewardsSubmission.startTimestamp % CALCULATION_INTERVAL_SECONDS == 0, - "RewardsCoordinator._validateRewardsSubmission: startTimestamp must be a multiple of CALCULATION_INTERVAL_SECONDS" + StartTimestampNotMultipleOfCalculationIntervalSeconds() ); require( block.timestamp - MAX_RETROACTIVE_LENGTH <= rewardsSubmission.startTimestamp && GENESIS_REWARDS_TIMESTAMP <= rewardsSubmission.startTimestamp, - "RewardsCoordinator._validateRewardsSubmission: startTimestamp too far in the past" + StartTimestampTooFarInPast() ); require( rewardsSubmission.startTimestamp <= block.timestamp + MAX_FUTURE_LENGTH, - "RewardsCoordinator._validateRewardsSubmission: startTimestamp too far in the future" + StartTimestampTooFarInFuture() ); // Require rewardsSubmission is for whitelisted strategy or beaconChainETHStrategy @@ -391,26 +391,26 @@ contract RewardsCoordinator is IStrategy strategy = rewardsSubmission.strategiesAndMultipliers[i].strategy; require( strategyManager.strategyIsWhitelistedForDeposit(strategy) || strategy == beaconChainETHStrategy, - "RewardsCoordinator._validateRewardsSubmission: invalid strategy considered" + InvalidStrategy() ); require( currAddress < address(strategy), - "RewardsCoordinator._validateRewardsSubmission: strategies must be in ascending order to handle duplicates" + StrategiesNotInAscendingOrder() ); currAddress = address(strategy); } } function _checkClaim(RewardsMerkleClaim calldata claim, DistributionRoot memory root) internal view { - require(!root.disabled, "RewardsCoordinator._checkClaim: root is disabled"); - require(block.timestamp >= root.activatedAt, "RewardsCoordinator._checkClaim: root not activated yet"); + require(!root.disabled, RootDisabled()); + require(block.timestamp >= root.activatedAt, RootNotActivated()); require( claim.tokenIndices.length == claim.tokenTreeProofs.length, - "RewardsCoordinator._checkClaim: tokenIndices and tokenProofs length mismatch" + InputArrayLengthMismatch() ); require( claim.tokenTreeProofs.length == claim.tokenLeaves.length, - "RewardsCoordinator._checkClaim: tokenTreeProofs and leaves length mismatch" + InputArrayLengthMismatch() ); // Verify inclusion of earners leaf (earner, earnerTokenRoot) in the distribution root @@ -449,7 +449,7 @@ contract RewardsCoordinator is // index can't be greater than 2**(tokenProof/32) require( tokenLeafIndex < (1 << (tokenProof.length / 32)), - "RewardsCoordinator._verifyTokenClaim: invalid tokenLeafIndex" + InvalidTokenLeafIndex() ); // Verify inclusion of token leaf @@ -461,7 +461,7 @@ contract RewardsCoordinator is proof: tokenProof, leaf: tokenLeafHash }), - "RewardsCoordinator._verifyTokenClaim: invalid token claim proof" + InvalidClaimProof() ); } @@ -484,7 +484,7 @@ contract RewardsCoordinator is // index can't be greater than 2**(earnerProof/32) require( earnerLeafIndex < (1 << (earnerProof.length / 32)), - "RewardsCoordinator._verifyEarnerClaimProof: invalid earnerLeafIndex" + InvalidClaimProof() ); // Verify inclusion of earner leaf bytes32 earnerLeafHash = calculateEarnerLeafHash(earnerLeaf); @@ -496,7 +496,7 @@ contract RewardsCoordinator is proof: earnerProof, leaf: earnerLeafHash }), - "RewardsCoordinator._verifyEarnerClaimProof: invalid earner claim proof" + InvalidClaimProof() ); } @@ -575,7 +575,7 @@ contract RewardsCoordinator is return i - 1; } } - revert("RewardsCoordinator.getRootIndexFromHash: root not found"); + revert InvalidRoot(); } /** diff --git a/src/contracts/core/RewardsCoordinatorStorage.sol b/src/contracts/core/RewardsCoordinatorStorage.sol index 3d019ff92..253398d42 100644 --- a/src/contracts/core/RewardsCoordinatorStorage.sol +++ b/src/contracts/core/RewardsCoordinatorStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/IStrategyManager.sol"; import "../interfaces/IDelegationManager.sol"; diff --git a/src/contracts/core/Slasher.sol b/src/contracts/core/Slasher.sol index 9a05a560a..98901f9de 100644 --- a/src/contracts/core/Slasher.sol +++ b/src/contracts/core/Slasher.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/ISlasher.sol"; import "../interfaces/IDelegationManager.sol"; diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index ddc36a032..a7959630f 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; @@ -36,7 +36,7 @@ contract StrategyManager is modifier onlyStrategyWhitelister() { require( - msg.sender == strategyWhitelister, "StrategyManager.onlyStrategyWhitelister: not the strategyWhitelister" + msg.sender == strategyWhitelister, OnlyStrategyWhitelister() ); _; } @@ -44,13 +44,13 @@ contract StrategyManager is modifier onlyStrategiesWhitelistedForDeposit(IStrategy strategy) { require( strategyIsWhitelistedForDeposit[strategy], - "StrategyManager.onlyStrategiesWhitelistedForDeposit: strategy not whitelisted" + StrategyNotWhitelisted() ); _; } modifier onlyDelegationManager() { - require(msg.sender == address(delegation), "StrategyManager.onlyDelegationManager: not the DelegationManager"); + require(msg.sender == address(delegation), OnlyDelegationManager()); _; } @@ -140,9 +140,9 @@ contract StrategyManager is ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 shares) { require( !thirdPartyTransfersForbidden[strategy], - "StrategyManager.depositIntoStrategyWithSignature: third transfers disabled" + ThirdPartyTransfersDisabled() ); - require(expiry >= block.timestamp, "StrategyManager.depositIntoStrategyWithSignature: signature expired"); + require(expiry >= block.timestamp, SignatureExpired()); // calculate struct hash, then increment `staker`'s nonce uint256 nonce = nonces[staker]; bytes32 structHash = keccak256(abi.encode(DEPOSIT_TYPEHASH, staker, strategy, token, amount, nonce, expiry)); @@ -220,7 +220,7 @@ contract StrategyManager is ) external onlyStrategyWhitelister { require( strategiesToWhitelist.length == thirdPartyTransfersForbiddenValues.length, - "StrategyManager.addStrategiesToDepositWhitelist: array lengths do not match" + InputArrayLengthMismatch() ); uint256 strategiesToWhitelistLength = strategiesToWhitelist.length; for (uint256 i = 0; i < strategiesToWhitelistLength;) { @@ -273,14 +273,14 @@ contract StrategyManager is */ function _addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) internal { // sanity checks on inputs - require(staker != address(0), "StrategyManager._addShares: staker cannot be zero address"); - require(shares != 0, "StrategyManager._addShares: shares should not be zero!"); + require(staker != address(0), StakerAddressZero()); + require(shares != 0, SharesAmountZero()); // if they dont have existing shares of this strategy, add it to their strats if (stakerStrategyShares[staker][strategy] == 0) { require( stakerStrategyList[staker].length < MAX_STAKER_STRATEGY_LIST_LENGTH, - "StrategyManager._addShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH" + MaxStrategiesExceeded() ); stakerStrategyList[staker].push(strategy); } @@ -331,12 +331,12 @@ contract StrategyManager is */ function _removeShares(address staker, IStrategy strategy, uint256 shareAmount) internal returns (bool) { // sanity checks on inputs - require(shareAmount != 0, "StrategyManager._removeShares: shareAmount should not be zero!"); + require(shareAmount != 0, SharesAmountZero()); //check that the user has sufficient shares uint256 userShares = stakerStrategyShares[staker][strategy]; - require(shareAmount <= userShares, "StrategyManager._removeShares: shareAmount too high"); + require(shareAmount <= userShares, SharesAmountTooHigh()); //unchecked arithmetic since we just checked this above unchecked { userShares = userShares - shareAmount; @@ -376,7 +376,7 @@ contract StrategyManager is } } // if we didn't find the strategy, revert - require(j != stratsLength, "StrategyManager._removeStrategyFromStakerStrategyList: strategy not found"); + require(j != stratsLength, StrategyNotFound()); // pop off the last entry in the list of strategies stakerStrategyList[staker].pop(); } diff --git a/src/contracts/core/StrategyManagerStorage.sol b/src/contracts/core/StrategyManagerStorage.sol index 085b1dc9a..1a0e5963d 100644 --- a/src/contracts/core/StrategyManagerStorage.sol +++ b/src/contracts/core/StrategyManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/IStrategyManager.sol"; import "../interfaces/IStrategy.sol"; diff --git a/src/contracts/interfaces/IAVSDirectory.sol b/src/contracts/interfaces/IAVSDirectory.sol index b35cabc99..975c8106d 100644 --- a/src/contracts/interfaces/IAVSDirectory.sol +++ b/src/contracts/interfaces/IAVSDirectory.sol @@ -4,6 +4,19 @@ pragma solidity >=0.5.0; import "./ISignatureUtils.sol"; interface IAVSDirectory is ISignatureUtils { + /// @dev Thrown when an invalid AVS is provided. + error InvalidAVS(); + /// @dev Thrown when an invalid operator is provided. + error InvalidOperator(); + /// @dev Thrown when an invalid operator set is provided. + error InvalidOperatorSet(); + /// @dev Thrown when `operator` is not a registered operator. + error OperatorNotRegistered(); + /// @dev Thrown when attempting to spend a spent eip-712 salt. + error SaltSpent(); + /// @dev Thrown when attempting to use an expired eip-712 signature. + error SignatureExpired(); + /// @notice Enum representing the status of an operator's registration with an AVS enum OperatorAVSRegistrationStatus { UNREGISTERED, // Operator not registered to AVS diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index dc42416b6..951580f5e 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -15,6 +15,43 @@ import "./ISignatureUtils.sol"; * - enabling a staker to undelegate its assets from the operator it is delegated to (performed as part of the withdrawal process, initiated through the StrategyManager) */ interface IDelegationManager is ISignatureUtils { + /// @dev Thrown when an account is actively delegated. + error ActivelyDelegated(); + /// @dev Thrown when attempting to execute an action that was not queued. + error WithdrawalNotQueued(); + /// @dev Thrown when caller cannot undelegate on behalf of a staker. + error CallerCannotUndelegate(); + /// @dev Thrown when two array parameters have mismatching lengths. + error InputArrayLengthMismatch(); + /// @dev Thrown when input arrays length is zero. + error InputArrayLengthZero(); + /// @dev Thrown when `operator` is not a registered operator. + error OperatorNotRegistered(); + /// @dev Thrown when caller is neither the StrategyManager or EigenPodManager contract. + error OnlyStrategyManagerOrEigenPodManager(); + /// @dev Thrown when an operator attempts to undelegate. + error OperatorsCannotUndelegate(); + /// @dev Thrown when an account is not actively delegated. + error NotActivelyDelegated(); + /// @dev Thrown when attempting to spend a spent eip-712 salt. + error SaltSpent(); + /// @dev Thrown when attempting to use an expired eip-712 signature. + error SignatureExpired(); + /// @dev Thrown when provided `stakerOptOutWindowBlocks` cannot decrease. + error StakerOptOutWindowBlocksCannotDecrease(); + /// @dev Thrown when provided `stakerOptOutWindowBlocks` exceeds maximum. + error StakerOptOutWindowBlocksExceedsMax(); + /// @dev Thrown when attempting to withdraw before delay has elapsed. + error WithdrawalDelayNotElapsed(); + /// @dev Thrown when provided delay exceeds maximum. + error WithdrawalDelayExeedsMax(); + /// @dev Thrown when a withdraw amount larger than max is attempted. + error WithdrawalExeedsMax(); + /// @dev Thrown when withdrawer is not the current caller. + error WithdrawerNotCaller(); + /// @dev Thrown when `withdrawer` is not staker. + error WithdrawerNotStaker(); + // @notice Struct used for storing information about a single operator who has registered with EigenLayer struct OperatorDetails { /// @notice DEPRECATED -- this field is no longer used, payments are handled in PaymentCoordinator.sol diff --git a/src/contracts/interfaces/IEigenPod.sol b/src/contracts/interfaces/IEigenPod.sol index be96da52c..33a643cb7 100644 --- a/src/contracts/interfaces/IEigenPod.sol +++ b/src/contracts/interfaces/IEigenPod.sol @@ -13,6 +13,55 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; * to account balances in terms of gwei in the EigenPod contract and convert to wei when making calls to other contracts */ interface IEigenPod { + /// @dev Thrown when amount exceeds `withdrawableRestakedExecutionLayerGwei`. + error AmountExceedsWithdrawableRestakedExecutionLayerGwei(); + /// @dev Thrown when provided `amountGwei` is not a multiple of gwei. + error AmountMustBeMultipleOfGwei(); + /// @dev Thrown when provided `beaconTimestamp` is too far in the past. + error BeaconTimestampTooFarInPast(); + /// @dev Thrown when attempting to create a checkpoint twice within a given block. + error CannotCheckpointTwiceInSingleBlock(); + /// @dev Thrown when attempting an action that is currently paused. + error CurrentlyPaused(); + /// @dev Thrown if a validator is exiting. + error ValidatorIsExiting(); + /// @dev Thrown when no active checkpoints are found. + error NoActiveCheckpoints(); + /// @dev Thrown if there's not a balance available to checkpoint. + error NoBalanceToCheckpoint(); + /// @dev Thrown when an address of zero is provided. + error InputAddressZero(); + /// @dev Thrown when two array parameters have mismatching lengths. + error InputArrayLengthMismatch(); + /// @dev Thrown when an invalid block root is returned. + error InvalidBlockRoot(); + /// @dev Thrown when `validatorPubKey` length is not equal to 48-bytes. + error InvalidValidatorPubKeyLength(); + /// @dev Thrown when a proof is older than the last checkpoint. + error ProofOlderThanLastCheckpoint(); + /// @dev Thrown when a validator is not inactive. + error ValidatorAlreadyActive(); + /// @dev Thrown when a validator is not active. + error ValidatorNotActive(); + /// @dev Thrown when a validator is not stale. + error ValidatorNotSlashed(); + /// @dev Thrown when validator is not in the process of becoming active. + error ValidatorNoPendingActivation(); + /// @dev Thrown if a previous uncomplete checkpoint exists. + error IncompletePreviousCheckpoint(); + /// @dev Thrown when msg.value is not equal to 32 eth. + error MsgValueNot32ETH(); + /// @dev Thrown when provided timestamp is out of range. + error TimestampOutOfRange(); + /// @dev Thrown when only the EigenPodManager can perform the action. + error OnlyEigenPodManager(); + /// @dev Thrown when only the EigenPodOwner can perform the action. + error OnlyEigenPodOwner(); + /// @dev Thrown when either the EigenPodOwner or a proof submitter can perform the action. + error OnlyEigenPodOwnerOrProofSubmitter(); + /// @dev Thrown if the provided proof is not valid for this EigenPod. + error WithdrawCredentialsNotForEigenPod(); + /** * * STRUCTS / ENUMS diff --git a/src/contracts/interfaces/IEigenPodManager.sol b/src/contracts/interfaces/IEigenPodManager.sol index cbe253382..56efce861 100644 --- a/src/contracts/interfaces/IEigenPodManager.sol +++ b/src/contracts/interfaces/IEigenPodManager.sol @@ -15,6 +15,17 @@ import "./IStrategy.sol"; * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service */ interface IEigenPodManager is IPausable { + /// @dev Thrown when caller is not a EigenPod. + error OnlyEigenPod(); + /// @dev Thrown when caller is not DelegationManager. + error OnlyDelegationManager(); + /// @dev Thrown when caller already has an EigenPod. + error EigenPodAlreadyExists(); + /// @dev Thrown when shares is not a multiple of gwei. + error SharesNotMultipleOfGwei(); + /// @dev Thrown when shares would result in a negative integer. + error SharesNegative(); + /// @notice Emitted to notify the deployment of an EigenPod event PodDeployed(address indexed eigenPod, address indexed podOwner); diff --git a/src/contracts/interfaces/IPausable.sol b/src/contracts/interfaces/IPausable.sol index 061712653..c0277d8fa 100644 --- a/src/contracts/interfaces/IPausable.sol +++ b/src/contracts/interfaces/IPausable.sol @@ -20,6 +20,17 @@ import "../interfaces/IPauserRegistry.sol"; * indicates specifically that if the *third bit* of `_paused` is flipped -- i.e. it is a '1' -- then deposits should be paused */ interface IPausable { + /// @dev Thrown when caller is not pauser. + error OnlyPauser(); + /// @dev Thrown when caller is not unpauser. + error OnlyUnpauser(); + /// @dev Thrown when currently paused. + error CurrentlyPaused(); + /// @dev Thrown when invalid `newPausedStatus` is provided. + error InvalidNewPausedStatus(); + /// @dev Thrown when a null address input is provided. + error InputAddressZero(); + /// @notice Emitted when the `pauserRegistry` is set to `newPauserRegistry`. event PauserRegistrySet(IPauserRegistry pauserRegistry, IPauserRegistry newPauserRegistry); diff --git a/src/contracts/interfaces/IPauserRegistry.sol b/src/contracts/interfaces/IPauserRegistry.sol index cd0b95546..9a058bcd8 100644 --- a/src/contracts/interfaces/IPauserRegistry.sol +++ b/src/contracts/interfaces/IPauserRegistry.sol @@ -7,6 +7,9 @@ pragma solidity >=0.5.0; * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service */ interface IPauserRegistry { + error OnlyUnpauser(); + error InputAddressZero(); + event PauserStatusChanged(address pauser, bool canPause); event UnpauserChanged(address previousUnpauser, address newUnpauser); diff --git a/src/contracts/interfaces/IRewardsCoordinator.sol b/src/contracts/interfaces/IRewardsCoordinator.sol index d3f5beaf2..5a767f818 100644 --- a/src/contracts/interfaces/IRewardsCoordinator.sol +++ b/src/contracts/interfaces/IRewardsCoordinator.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IStrategy.sol"; @@ -14,6 +14,61 @@ import "./IStrategy.sol"; * a Merkle root against which Stakers & Operators can make claims. */ interface IRewardsCoordinator { + /// @dev Thrown when input `amount` exceeds maximum. + error AmountExceedsMax(); + /// @dev Thrown when input `amount` is zero. + error AmountZero(); + /// @dev Thrown if provided commision bips exceeds maximum. + error CommissionBipsExceedsMax(); + /// @dev Thrown when input `duration` exceeds maximum. + error DurationExceedsMax(); + /// @dev Thrown when input `duration` is not evenly divisble by CALCULATION_INTERVAL_SECONDS. + error DurationNotMultipleOfCalculationIntervalSeconds(); + /// @dev Thrown when cummulative earnings are not greater than cummulative claimed. + error EarningsNotGreaterThanClaimed(); + /// @dev Thrown when claim is attempted by invalid claimer. + error InvalidClaimer(); + /// @dev Thrown when an invalid earn leaf index is provided. + error InvalidEarnerLeafIndex(); + /// @dev Thrown when an invalid earner claim proof is provided. + error InvalidClaimProof(); + /// @dev Thrown when an invalid operator set is provided. + error InvalidOperatorSet(); + /// @dev Thrown when an invalid root is provided. + error InvalidRoot(); + /// @dev Thrown when an invalid root index is provided. + error InvalidRootIndex(); + /// @dev Thrown when an invalid token leaf index is provided. + error InvalidTokenLeafIndex(); + /// @dev Thrown when an attempt to use a non-whitelisted strategy is made. + error InvalidStrategy(); + /// @dev Thrown when two array parameters have mismatching lengths. + error InputArrayLengthMismatch(); + /// @dev Thrown when input arrays length is zero. + error InputArrayLengthZero(); + /// @dev Thrown when provided root is not for new calculated period. + error NewRootMustBeForNewCalculatedPeriod(); + /// @dev Thrown when call is attempted by address that's not a rewards for all submitter. + error OnlyRewardsForAllSubmitter(); + /// @dev Thrown when call is attempted by address that's not the rewards updater. + error OnlyRewardsUpdater(); + /// @dev Thrown when rewards end timestamp has not elapsed. + error RewardsEndTimestampNotElapsed(); + /// @dev Thrown if a root has already been activated. + error RootActivated(); + /// @dev Thrown if a root has already been disabled. + error RootDisabled(); + /// @dev Thrown if a root has not been activated yet. + error RootNotActivated(); + /// @dev Thrown when `startTimestamp` is not evenly divisble by CALCULATION_INTERVAL_SECONDS. + error StartTimestampNotMultipleOfCalculationIntervalSeconds(); + /// @dev Thrown when `startTimestamp` is too far in the future. + error StartTimestampTooFarInFuture(); + /// @dev Thrown when `startTimestamp` is too far in the past. + error StartTimestampTooFarInPast(); + /// @dev Thrown when `strategies` is not sorted in ascending order. + error StrategiesNotInAscendingOrder(); + /// STRUCTS /// /** * @notice A linear combination of strategies and multipliers for AVSs to weigh diff --git a/src/contracts/interfaces/ISocketUpdater.sol b/src/contracts/interfaces/ISocketUpdater.sol index df95d4ab0..dc17ecfa9 100644 --- a/src/contracts/interfaces/ISocketUpdater.sol +++ b/src/contracts/interfaces/ISocketUpdater.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; /** * @title Interface for an `ISocketUpdater` where operators can update their sockets. diff --git a/src/contracts/interfaces/IStrategy.sol b/src/contracts/interfaces/IStrategy.sol index e7a6f684d..1be05d09f 100644 --- a/src/contracts/interfaces/IStrategy.sol +++ b/src/contracts/interfaces/IStrategy.sol @@ -10,6 +10,21 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; * @notice Custom `Strategy` implementations may expand extensively on this interface. */ interface IStrategy { + /// @dev Thrown when balance exceeds max total deposits. + error BalanceExceedsMaxTotalDeposits(); + /// @dev Thrown when called by an account that is not strategy manager. + error OnlyStrategyManager(); + /// @dev Thrown when new shares value is zero. + error NewSharesZero(); + /// @dev Thrown when total shares exceeds max. + error TotalSharesExceedsMax(); + /// @dev Thrown when amount shares is greater than total shares. + error WithdrawalAmountExceedsDeposit(); + /// @dev Thrown when attempting an action with a token that is not accepted. + error OnlyUnderlyingToken(); + /// @dev Thrown when `maxPerDeposit` exceeds max. + error MaxPerDepositExceedsMax(); + /** * @notice Used to emit an event for the exchange rate between 1 share and underlying token in a strategy contract * @param rate is the exchange rate in wad 18 decimals diff --git a/src/contracts/interfaces/IStrategyFactory.sol b/src/contracts/interfaces/IStrategyFactory.sol index 85dab8cd0..1873f4dd0 100644 --- a/src/contracts/interfaces/IStrategyFactory.sol +++ b/src/contracts/interfaces/IStrategyFactory.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity >=0.5.0; import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; @@ -12,6 +12,13 @@ import "./IStrategy.sol"; * @dev This may not be compatible with non-standard ERC20 tokens. Caution is warranted. */ 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. + error StrategyAlreadyExists(); + /// @dev Thrown when attempting to blacklist a token that already has a deployed strategy. + error CannotBlacklistDeployedStrategy(); + event TokenBlacklisted(IERC20 token); /// @notice Upgradeable beacon which new Strategies deployed by this contract point to diff --git a/src/contracts/interfaces/IStrategyManager.sol b/src/contracts/interfaces/IStrategyManager.sol index 565b301cd..f3351c154 100644 --- a/src/contracts/interfaces/IStrategyManager.sol +++ b/src/contracts/interfaces/IStrategyManager.sol @@ -13,6 +13,29 @@ import "./IEigenPodManager.sol"; * @notice See the `StrategyManager` contract itself for implementation details. */ interface IStrategyManager { + /// @dev Thrown when total strategies deployed exceeds max. + error MaxStrategiesExceeded(); + /// @dev Thrown when two array parameters have mismatching lengths. + error InputArrayLengthMismatch(); + /// @dev Thrown when call attempted from address that's not delegation manager. + error OnlyDelegationManager(); + /// @dev Thrown when call attempted from address that's not strategy whitelister. + error OnlyStrategyWhitelister(); + /// @dev Thrown when provided `shares` amount is too high. + error SharesAmountTooHigh(); + /// @dev Thrown when provided `shares` amount is zero. + error SharesAmountZero(); + /// @dev Thrown when attempting to use an expired eip-712 signature. + error SignatureExpired(); + /// @dev Thrown when provided `staker` address is null. + error StakerAddressZero(); + /// @dev Thrown when provided `strategy` not found. + error StrategyNotFound(); + /// @dev Thrown when attempting to deposit to a non-whitelisted strategy. + error StrategyNotWhitelisted(); + /// @dev Thrown when attempting a third party transfer from a strategy that's disabled it. + error ThirdPartyTransfersDisabled(); + /** * @notice Emitted when a new deposit occurs on behalf of `staker`. * @param staker Is the staker who is depositing funds into EigenLayer. diff --git a/src/contracts/libraries/BeaconChainProofs.sol b/src/contracts/libraries/BeaconChainProofs.sol index 9d0caa8d9..a0486767a 100644 --- a/src/contracts/libraries/BeaconChainProofs.sol +++ b/src/contracts/libraries/BeaconChainProofs.sol @@ -10,6 +10,13 @@ import "../libraries/Endian.sol"; //BeaconBlockHeader Spec: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#beaconblockheader //BeaconState Spec: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#beaconstate library BeaconChainProofs { + /// @dev Thrown when a proof is invalid. + error InvalidProof(); + /// @dev Thrown when a proof with an invalid length is provided. + error InvalidProofLength(); + /// @dev Thrown when a validator fields length is invalid. + error InvalidValidatorFieldsLength(); + /// @notice Heights of various merkle trees in the beacon chain /// - beaconBlockRoot /// | HEIGHT: BEACON_BLOCK_HEADER_TREE_HEIGHT @@ -101,7 +108,7 @@ library BeaconChainProofs { function verifyStateRoot(bytes32 beaconBlockRoot, StateRootProof calldata proof) internal view { require( proof.proof.length == 32 * (BEACON_BLOCK_HEADER_TREE_HEIGHT), - "BeaconChainProofs.verifyStateRoot: Proof has incorrect length" + InvalidProofLength() ); /// This merkle proof verifies the `beaconStateRoot` under the `beaconBlockRoot` @@ -115,7 +122,7 @@ library BeaconChainProofs { leaf: proof.beaconStateRoot, index: STATE_ROOT_INDEX }), - "BeaconChainProofs.verifyStateRoot: Invalid state root merkle proof" + InvalidProof() ); } @@ -137,14 +144,14 @@ library BeaconChainProofs { ) internal view { require( validatorFields.length == VALIDATOR_FIELDS_LENGTH, - "BeaconChainProofs.verifyValidatorFields: Validator fields has incorrect length" + InvalidValidatorFieldsLength() ); /// Note: the reason we use `VALIDATOR_TREE_HEIGHT + 1` here is because the merklization process for /// this container includes hashing the root of the validator tree with the length of the validator list require( validatorFieldsProof.length == 32 * ((VALIDATOR_TREE_HEIGHT + 1) + BEACON_STATE_TREE_HEIGHT), - "BeaconChainProofs.verifyValidatorFields: Proof has incorrect length" + InvalidProofLength() ); // Merkleize `validatorFields` to get the leaf to prove @@ -165,7 +172,7 @@ library BeaconChainProofs { leaf: validatorRoot, index: index }), - "BeaconChainProofs.verifyValidatorFields: Invalid merkle proof" + InvalidProof() ); } @@ -187,7 +194,7 @@ library BeaconChainProofs { function verifyBalanceContainer(bytes32 beaconBlockRoot, BalanceContainerProof calldata proof) internal view { require( proof.proof.length == 32 * (BEACON_BLOCK_HEADER_TREE_HEIGHT + BEACON_STATE_TREE_HEIGHT), - "BeaconChainProofs.verifyBalanceContainer: Proof has incorrect length" + InvalidProofLength() ); /// This proof combines two proofs, so its index accounts for the relative position of leaves in two trees: @@ -205,7 +212,7 @@ library BeaconChainProofs { leaf: proof.balanceContainerRoot, index: index }), - "BeaconChainProofs.verifyBalanceContainer: invalid balance container proof" + InvalidProof() ); } @@ -223,7 +230,7 @@ library BeaconChainProofs { /// this container includes hashing the root of the balances tree with the length of the balances list require( proof.proof.length == 32 * (BALANCE_TREE_HEIGHT + 1), - "BeaconChainProofs.verifyValidatorBalance: Proof has incorrect length" + InvalidProofLength() ); /// When merkleized, beacon chain balances are combined into groups of 4 called a `balanceRoot`. The merkle @@ -240,7 +247,7 @@ library BeaconChainProofs { leaf: proof.balanceRoot, index: balanceIndex }), - "BeaconChainProofs.verifyValidatorBalance: Invalid merkle proof" + InvalidProof() ); /// Extract the individual validator's balance from the `balanceRoot` diff --git a/src/contracts/libraries/BytesLib.sol b/src/contracts/libraries/BytesLib.sol index a019da303..b20ef5992 100644 --- a/src/contracts/libraries/BytesLib.sol +++ b/src/contracts/libraries/BytesLib.sol @@ -9,6 +9,9 @@ pragma solidity >=0.8.0 <0.9.0; library BytesLib { + error Overflow(); + error OutOfBounds(); + function concat(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bytes memory) { bytes memory tempBytes; @@ -211,8 +214,8 @@ library BytesLib { } function slice(bytes memory _bytes, uint256 _start, uint256 _length) internal pure returns (bytes memory) { - require(_length + 31 >= _length, "slice_overflow"); - require(_bytes.length >= _start + _length, "slice_outOfBounds"); + require(_length + 31 >= _length, Overflow()); + require(_bytes.length >= _start + _length, OutOfBounds()); bytes memory tempBytes; @@ -270,7 +273,7 @@ library BytesLib { } function toAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) { - require(_bytes.length >= _start + 20, "toAddress_outOfBounds"); + require(_bytes.length >= _start + 20, OutOfBounds()); address tempAddress; assembly { @@ -281,7 +284,7 @@ library BytesLib { } function toUint8(bytes memory _bytes, uint256 _start) internal pure returns (uint8) { - require(_bytes.length >= _start + 1, "toUint8_outOfBounds"); + require(_bytes.length >= _start + 1, OutOfBounds()); uint8 tempUint; assembly { @@ -292,7 +295,7 @@ library BytesLib { } function toUint16(bytes memory _bytes, uint256 _start) internal pure returns (uint16) { - require(_bytes.length >= _start + 2, "toUint16_outOfBounds"); + require(_bytes.length >= _start + 2, OutOfBounds()); uint16 tempUint; assembly { @@ -303,7 +306,7 @@ library BytesLib { } function toUint32(bytes memory _bytes, uint256 _start) internal pure returns (uint32) { - require(_bytes.length >= _start + 4, "toUint32_outOfBounds"); + require(_bytes.length >= _start + 4, OutOfBounds()); uint32 tempUint; assembly { @@ -314,7 +317,7 @@ library BytesLib { } function toUint64(bytes memory _bytes, uint256 _start) internal pure returns (uint64) { - require(_bytes.length >= _start + 8, "toUint64_outOfBounds"); + require(_bytes.length >= _start + 8, OutOfBounds()); uint64 tempUint; assembly { @@ -325,7 +328,7 @@ library BytesLib { } function toUint96(bytes memory _bytes, uint256 _start) internal pure returns (uint96) { - require(_bytes.length >= _start + 12, "toUint96_outOfBounds"); + require(_bytes.length >= _start + 12, OutOfBounds()); uint96 tempUint; assembly { @@ -336,7 +339,7 @@ library BytesLib { } function toUint128(bytes memory _bytes, uint256 _start) internal pure returns (uint128) { - require(_bytes.length >= _start + 16, "toUint128_outOfBounds"); + require(_bytes.length >= _start + 16, OutOfBounds()); uint128 tempUint; assembly { @@ -347,7 +350,7 @@ library BytesLib { } function toUint256(bytes memory _bytes, uint256 _start) internal pure returns (uint256) { - require(_bytes.length >= _start + 32, "toUint256_outOfBounds"); + require(_bytes.length >= _start + 32, OutOfBounds()); uint256 tempUint; assembly { @@ -358,7 +361,7 @@ library BytesLib { } function toBytes32(bytes memory _bytes, uint256 _start) internal pure returns (bytes32) { - require(_bytes.length >= _start + 32, "toBytes32_outOfBounds"); + require(_bytes.length >= _start + 32, OutOfBounds()); bytes32 tempBytes32; assembly { diff --git a/src/contracts/libraries/EIP1271SignatureUtils.sol b/src/contracts/libraries/EIP1271SignatureUtils.sol index a4452f91e..517cac65f 100644 --- a/src/contracts/libraries/EIP1271SignatureUtils.sol +++ b/src/contracts/libraries/EIP1271SignatureUtils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/interfaces/IERC1271.sol"; import "@openzeppelin/contracts/utils/Address.sol"; @@ -11,6 +11,9 @@ import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service */ library EIP1271SignatureUtils { + error InvalidSignatureEIP1271(); + error InvalidSignatureSigner(); + // bytes4(keccak256("isValidSignature(bytes32,bytes)") bytes4 internal constant EIP1271_MAGICVALUE = 0x1626ba7e; @@ -29,12 +32,12 @@ library EIP1271SignatureUtils { if (Address.isContract(signer)) { require( IERC1271(signer).isValidSignature(digestHash, signature) == EIP1271_MAGICVALUE, - "EIP1271SignatureUtils.checkSignature_EIP1271: ERC1271 signature verification failed" + InvalidSignatureEIP1271() ); } else { require( ECDSA.recover(digestHash, signature) == signer, - "EIP1271SignatureUtils.checkSignature_EIP1271: signature not from signer" + InvalidSignatureSigner() ); } } diff --git a/src/contracts/libraries/Merkle.sol b/src/contracts/libraries/Merkle.sol index 5b7635423..67aac299e 100644 --- a/src/contracts/libraries/Merkle.sol +++ b/src/contracts/libraries/Merkle.sol @@ -18,6 +18,8 @@ pragma solidity ^0.8.0; * against this attack out of the box. */ library Merkle { + error ProofLengthNotMultipleOf32(); + /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt @@ -51,7 +53,7 @@ library Merkle { bytes32 leaf, uint256 index ) internal pure returns (bytes32) { - require(proof.length % 32 == 0, "Merkle.processInclusionProofKeccak: proof length should be a multiple of 32"); + require(proof.length % 32 == 0, ProofLengthNotMultipleOf32()); bytes32 computedHash = leaf; for (uint256 i = 32; i <= proof.length; i += 32) { if (index % 2 == 0) { @@ -109,7 +111,7 @@ library Merkle { ) internal view returns (bytes32) { require( proof.length != 0 && proof.length % 32 == 0, - "Merkle.processInclusionProofSha256: proof length should be a non-zero multiple of 32" + ProofLengthNotMultipleOf32() ); bytes32[1] memory computedHash = [leaf]; for (uint256 i = 32; i <= proof.length; i += 32) { diff --git a/src/contracts/libraries/StructuredLinkedList.sol b/src/contracts/libraries/StructuredLinkedList.sol index 29410656f..9efb6b59d 100644 --- a/src/contracts/libraries/StructuredLinkedList.sol +++ b/src/contracts/libraries/StructuredLinkedList.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; /** * @title StructuredLinkedList diff --git a/src/contracts/permissions/Pausable.sol b/src/contracts/permissions/Pausable.sol index 52883e888..9d0248e4f 100644 --- a/src/contracts/permissions/Pausable.sol +++ b/src/contracts/permissions/Pausable.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/IPausable.sol"; @@ -32,24 +32,24 @@ contract Pausable is IPausable { /// @notice modifier onlyPauser() { - require(pauserRegistry.isPauser(msg.sender), "msg.sender is not permissioned as pauser"); + require(pauserRegistry.isPauser(msg.sender), OnlyPauser()); _; } modifier onlyUnpauser() { - require(msg.sender == pauserRegistry.unpauser(), "msg.sender is not permissioned as unpauser"); + require(msg.sender == pauserRegistry.unpauser(), OnlyUnpauser()); _; } /// @notice Throws if the contract is paused, i.e. if any of the bits in `_paused` is flipped to 1. modifier whenNotPaused() { - require(_paused == 0, "Pausable: contract is paused"); + require(_paused == 0, CurrentlyPaused()); _; } /// @notice Throws if the `indexed`th bit of `_paused` is 1, i.e. if the `index`th pause switch is flipped. modifier onlyWhenNotPaused(uint8 index) { - require(!paused(index), "Pausable: index is paused"); + require(!paused(index), CurrentlyPaused()); _; } @@ -57,7 +57,7 @@ contract Pausable is IPausable { function _initializePauser(IPauserRegistry _pauserRegistry, uint256 initPausedStatus) internal { require( address(pauserRegistry) == address(0) && address(_pauserRegistry) != address(0), - "Pausable._initializePauser: _initializePauser() can only be called once" + InputAddressZero() ); _paused = initPausedStatus; emit Paused(msg.sender, initPausedStatus); @@ -72,7 +72,7 @@ contract Pausable is IPausable { */ function pause(uint256 newPausedStatus) external onlyPauser { // verify that the `newPausedStatus` does not *unflip* any bits (i.e. doesn't unpause anything, all 1 bits remain) - require((_paused & newPausedStatus) == _paused, "Pausable.pause: invalid attempt to unpause functionality"); + require((_paused & newPausedStatus) == _paused, InvalidNewPausedStatus()); _paused = newPausedStatus; emit Paused(msg.sender, newPausedStatus); } @@ -94,7 +94,7 @@ contract Pausable is IPausable { function unpause(uint256 newPausedStatus) external onlyUnpauser { // verify that the `newPausedStatus` does not *flip* any bits (i.e. doesn't pause anything, all 0 bits remain) require( - ((~_paused) & (~newPausedStatus)) == (~_paused), "Pausable.unpause: invalid attempt to pause functionality" + ((~_paused) & (~newPausedStatus)) == (~_paused), InvalidNewPausedStatus() ); _paused = newPausedStatus; emit Unpaused(msg.sender, newPausedStatus); @@ -120,7 +120,7 @@ contract Pausable is IPausable { function _setPauserRegistry(IPauserRegistry newPauserRegistry) internal { require( address(newPauserRegistry) != address(0), - "Pausable._setPauserRegistry: newPauserRegistry cannot be the zero address" + InputAddressZero() ); emit PauserRegistrySet(pauserRegistry, newPauserRegistry); pauserRegistry = newPauserRegistry; diff --git a/src/contracts/permissions/PauserRegistry.sol b/src/contracts/permissions/PauserRegistry.sol index 1058784ec..2a1b765e7 100644 --- a/src/contracts/permissions/PauserRegistry.sol +++ b/src/contracts/permissions/PauserRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/IPauserRegistry.sol"; @@ -16,7 +16,7 @@ contract PauserRegistry is IPauserRegistry { address public unpauser; modifier onlyUnpauser() { - require(msg.sender == unpauser, "msg.sender is not permissioned as unpauser"); + require(msg.sender == unpauser, OnlyUnpauser()); _; } @@ -40,13 +40,13 @@ contract PauserRegistry is IPauserRegistry { } function _setIsPauser(address pauser, bool canPause) internal { - require(pauser != address(0), "PauserRegistry._setPauser: zero address input"); + require(pauser != address(0), InputAddressZero()); isPauser[pauser] = canPause; emit PauserStatusChanged(pauser, canPause); } function _setUnpauser(address newUnpauser) internal { - require(newUnpauser != address(0), "PauserRegistry._setUnpauser: zero address input"); + require(newUnpauser != address(0), InputAddressZero()); emit UnpauserChanged(unpauser, newUnpauser); unpauser = newUnpauser; } diff --git a/src/contracts/pods/EigenPod.sol b/src/contracts/pods/EigenPod.sol index d98ef59f3..110d6c6a2 100644 --- a/src/contracts/pods/EigenPod.sol +++ b/src/contracts/pods/EigenPod.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol"; @@ -61,13 +61,13 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC /// @notice Callable only by the EigenPodManager modifier onlyEigenPodManager() { - require(msg.sender == address(eigenPodManager), "EigenPod.onlyEigenPodManager: not eigenPodManager"); + require(msg.sender == address(eigenPodManager), OnlyEigenPodManager()); _; } /// @notice Callable only by the pod's owner modifier onlyEigenPodOwner() { - require(msg.sender == podOwner, "EigenPod.onlyEigenPodOwner: not podOwner"); + require(msg.sender == podOwner, OnlyEigenPodOwner()); _; } @@ -75,7 +75,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC modifier onlyOwnerOrProofSubmitter() { require( msg.sender == podOwner || msg.sender == proofSubmitter, - "EigenPod.onlyOwnerOrProofSubmitter: caller is not pod owner or proof submitter" + OnlyEigenPodOwnerOrProofSubmitter() ); _; } @@ -88,7 +88,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC modifier onlyWhenNotPaused(uint8 index) { require( !IPausable(address(eigenPodManager)).paused(index), - "EigenPod.onlyWhenNotPaused: index is paused in EigenPodManager" + CurrentlyPaused() ); _; } @@ -107,7 +107,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC /// @notice Used to initialize the pointers to addresses crucial to the pod's functionality. Called on construction by the EigenPodManager. function initialize(address _podOwner) external initializer { - require(_podOwner != address(0), "EigenPod.initialize: podOwner cannot be zero address"); + require(_podOwner != address(0), InputAddressZero()); podOwner = _podOwner; } @@ -159,7 +159,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC uint64 checkpointTimestamp = currentCheckpointTimestamp; require( checkpointTimestamp != 0, - "EigenPod.verifyCheckpointProofs: must have active checkpoint to perform checkpoint proof" + NoActiveCheckpoints() ); Checkpoint memory checkpoint = _currentCheckpoint; @@ -241,7 +241,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC require( (validatorIndices.length == validatorFieldsProofs.length) && (validatorFieldsProofs.length == validatorFields.length), - "EigenPod.verifyWithdrawalCredentials: validatorIndices and proofs must be same length" + InputArrayLengthMismatch() ); // Calling this method using a `beaconTimestamp` <= `currentCheckpointTimestamp` would allow @@ -249,7 +249,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC // on an existing checkpoint. require( beaconTimestamp > currentCheckpointTimestamp, - "EigenPod.verifyWithdrawalCredentials: specified timestamp is too far in past" + BeaconTimestampTooFarInPast() ); // Verify passed-in `beaconStateRoot` against the beacon block root @@ -331,16 +331,16 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC // (regardless of the relationship between `beaconTimestamp` and `lastCheckpointedAt`). require( beaconTimestamp > validatorInfo.lastCheckpointedAt, - "EigenPod.verifyStaleBalance: proof is older than last checkpoint" + ProofOlderThanLastCheckpoint() ); // Validator must be checkpoint-able - require(validatorInfo.status == VALIDATOR_STATUS.ACTIVE, "EigenPod.verifyStaleBalance: validator is not active"); + require(validatorInfo.status == VALIDATOR_STATUS.ACTIVE, ValidatorNotActive()); // Validator must be slashed on the beacon chain require( proof.validatorFields.isValidatorSlashed(), - "EigenPod.verifyStaleBalance: validator must be slashed to be marked stale" + ValidatorNotSlashed() ); // Verify passed-in `beaconStateRoot` against the beacon block root @@ -370,7 +370,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC ) external onlyEigenPodOwner onlyWhenNotPaused(PAUSED_NON_PROOF_WITHDRAWALS) { require( tokenList.length == amountsToWithdraw.length, - "EigenPod.recoverTokens: tokenList and amountsToWithdraw must be same length" + InputArrayLengthMismatch() ); for (uint256 i = 0; i < tokenList.length; i++) { tokenList[i].safeTransfer(recipient, amountsToWithdraw[i]); @@ -396,7 +396,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC bytes32 depositDataRoot ) external payable onlyEigenPodManager { // stake on ethpos - require(msg.value == 32 ether, "EigenPod.stake: must initially stake for any validator with 32 ether"); + require(msg.value == 32 ether, MsgValueNot32ETH()); ethPOS.deposit{value: 32 ether}(pubkey, _podWithdrawalCredentials(), signature, depositDataRoot); emit EigenPodStaked(pubkey); } @@ -411,12 +411,12 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC function withdrawRestakedBeaconChainETH(address recipient, uint256 amountWei) external onlyEigenPodManager { require( amountWei % GWEI_TO_WEI == 0, - "EigenPod.withdrawRestakedBeaconChainETH: amountWei must be a whole Gwei amount" + AmountMustBeMultipleOfGwei() ); uint64 amountGwei = uint64(amountWei / GWEI_TO_WEI); require( amountGwei <= withdrawableRestakedExecutionLayerGwei, - "EigenPod.withdrawRestakedBeaconChainETH: amountGwei exceeds withdrawableRestakedExecutionLayerGwei" + AmountExceedsWithdrawableRestakedExecutionLayerGwei() ); withdrawableRestakedExecutionLayerGwei -= amountGwei; emit RestakedBeaconChainETHWithdrawn(recipient, amountWei); @@ -448,7 +448,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC // Withdrawal credential proofs should only be processed for "INACTIVE" validators require( validatorInfo.status == VALIDATOR_STATUS.INACTIVE, - "EigenPod._verifyWithdrawalCredentials: validator must be inactive to prove withdrawal credentials" + ValidatorAlreadyActive() ); // Validator should be active on the beacon chain, or in the process of activating. @@ -466,7 +466,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC // shares from being slashable on EigenLayer for a short period of time. require( validatorFields.getActivationEpoch() != BeaconChainProofs.FAR_FUTURE_EPOCH, - "EigenPod._verifyWithdrawalCredentials: validator must be in the process of activating" + ValidatorNoPendingActivation() ); // Validator should not already be in the process of exiting. This is an important property @@ -493,13 +493,13 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC // (See https://eth2book.info/capella/part3/helper/mutators/#initiate_validator_exit) require( validatorFields.getExitEpoch() == BeaconChainProofs.FAR_FUTURE_EPOCH, - "EigenPod._verifyWithdrawalCredentials: validator must not be exiting" + ValidatorIsExiting() ); // Ensure the validator's withdrawal credentials are pointed at this pod require( validatorFields.getWithdrawalCredentials() == bytes32(_podWithdrawalCredentials()), - "EigenPod._verifyWithdrawalCredentials: proof is not for this EigenPod" + WithdrawCredentialsNotForEigenPod() ); // Get the validator's effective balance. Note that this method uses effective balance, while @@ -596,7 +596,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC function _startCheckpoint(bool revertIfNoBalance) internal { require( currentCheckpointTimestamp == 0, - "EigenPod._startCheckpoint: must finish previous checkpoint before starting another" + IncompletePreviousCheckpoint() ); // Prevent a checkpoint being completable twice in the same block. This prevents an edge case @@ -606,7 +606,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC // value equal to the second checkpoint, causing their proofs to get skipped in `verifyCheckpointProofs` require( lastCheckpointTimestamp != uint64(block.timestamp), - "EigenPod._startCheckpoint: cannot checkpoint twice in one block" + CannotCheckpointTwiceInSingleBlock() ); // Snapshot pod balance at the start of the checkpoint, subtracting pod balance that has @@ -622,7 +622,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC // If the caller doesn't want a "0 balance" checkpoint, revert if (revertIfNoBalance && podBalanceGwei == 0) { - revert("EigenPod._startCheckpoint: no balance available to checkpoint"); + revert NoBalanceToCheckpoint(); } // Create checkpoint using the previous block's root for proofs, and the current @@ -679,7 +679,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC ///@notice Calculates the pubkey hash of a validator's pubkey as per SSZ spec function _calculateValidatorPubkeyHash(bytes memory validatorPubkey) internal pure returns (bytes32) { - require(validatorPubkey.length == 48, "EigenPod._calculateValidatorPubkeyHash must be a 48-byte BLS public key"); + require(validatorPubkey.length == 48, InvalidValidatorPubKeyLength()); return sha256(abi.encodePacked(validatorPubkey, bytes16(0))); } @@ -726,12 +726,12 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC function getParentBlockRoot(uint64 timestamp) public view returns (bytes32) { require( block.timestamp - timestamp < BEACON_ROOTS_HISTORY_BUFFER_LENGTH * 12, - "EigenPod.getParentBlockRoot: timestamp out of range" + TimestampOutOfRange() ); (bool success, bytes memory result) = BEACON_ROOTS_ADDRESS.staticcall(abi.encode(timestamp)); - require(success && result.length > 0, "EigenPod.getParentBlockRoot: invalid block root returned"); + require(success && result.length > 0, InvalidBlockRoot()); return abi.decode(result, (bytes32)); } } diff --git a/src/contracts/pods/EigenPodManager.sol b/src/contracts/pods/EigenPodManager.sol index 300f36de0..4f6820033 100644 --- a/src/contracts/pods/EigenPodManager.sol +++ b/src/contracts/pods/EigenPodManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/Create2.sol"; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; @@ -29,13 +29,13 @@ contract EigenPodManager is ReentrancyGuardUpgradeable { modifier onlyEigenPod(address podOwner) { - require(address(ownerToPod[podOwner]) == msg.sender, "EigenPodManager.onlyEigenPod: not a pod"); + require(address(ownerToPod[podOwner]) == msg.sender, OnlyEigenPod()); _; } modifier onlyDelegationManager() { require( - msg.sender == address(delegationManager), "EigenPodManager.onlyDelegationManager: not the DelegationManager" + msg.sender == address(delegationManager), OnlyDelegationManager() ); _; } @@ -65,7 +65,7 @@ contract EigenPodManager is * @dev Returns EigenPod address */ function createPod() external onlyWhenNotPaused(PAUSED_NEW_EIGENPODS) returns (address) { - require(!hasPod(msg.sender), "EigenPodManager.createPod: Sender already has a pod"); + require(!hasPod(msg.sender), EigenPodAlreadyExists()); // deploy a pod if the sender doesn't have one already IEigenPod pod = _deployPod(); @@ -105,11 +105,11 @@ contract EigenPodManager is int256 sharesDelta ) external onlyEigenPod(podOwner) nonReentrant { require( - podOwner != address(0), "EigenPodManager.recordBeaconChainETHBalanceUpdate: podOwner cannot be zero address" + podOwner != address(0), InputAddressZero() ); require( sharesDelta % int256(GWEI_TO_WEI) == 0, - "EigenPodManager.recordBeaconChainETHBalanceUpdate: sharesDelta must be a whole Gwei amount" + SharesNotMultipleOfGwei() ); int256 currentPodOwnerShares = podOwnerShares[podOwner]; int256 updatedPodOwnerShares = currentPodOwnerShares + sharesDelta; @@ -150,12 +150,12 @@ contract EigenPodManager is * @dev The delegation manager validates that the podOwner is not address(0) */ function removeShares(address podOwner, uint256 shares) external onlyDelegationManager { - require(int256(shares) >= 0, "EigenPodManager.removeShares: shares cannot be negative"); - require(shares % GWEI_TO_WEI == 0, "EigenPodManager.removeShares: shares must be a whole Gwei amount"); + require(int256(shares) >= 0, SharesNegative()); + require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); int256 updatedPodOwnerShares = podOwnerShares[podOwner] - int256(shares); require( updatedPodOwnerShares >= 0, - "EigenPodManager.removeShares: cannot result in pod owner having negative shares" + SharesNegative() ); podOwnerShares[podOwner] = updatedPodOwnerShares; @@ -170,9 +170,9 @@ contract EigenPodManager is * @dev Reverts if `shares` is not a whole Gwei amount */ function addShares(address podOwner, uint256 shares) external onlyDelegationManager returns (uint256) { - require(podOwner != address(0), "EigenPodManager.addShares: podOwner cannot be zero address"); - require(int256(shares) >= 0, "EigenPodManager.addShares: shares cannot be negative"); - require(shares % GWEI_TO_WEI == 0, "EigenPodManager.addShares: shares must be a whole Gwei amount"); + require(podOwner != address(0), InputAddressZero()); + require(int256(shares) >= 0, SharesNegative()); + require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); int256 currentPodOwnerShares = podOwnerShares[podOwner]; int256 updatedPodOwnerShares = currentPodOwnerShares + int256(shares); podOwnerShares[podOwner] = updatedPodOwnerShares; @@ -200,10 +200,10 @@ contract EigenPodManager is address destination, uint256 shares ) external onlyDelegationManager { - require(podOwner != address(0), "EigenPodManager.withdrawSharesAsTokens: podOwner cannot be zero address"); - require(destination != address(0), "EigenPodManager.withdrawSharesAsTokens: destination cannot be zero address"); - require(int256(shares) >= 0, "EigenPodManager.withdrawSharesAsTokens: shares cannot be negative"); - require(shares % GWEI_TO_WEI == 0, "EigenPodManager.withdrawSharesAsTokens: shares must be a whole Gwei amount"); + require(podOwner != address(0), InputAddressZero()); + require(destination != address(0), InputAddressZero()); + require(int256(shares) >= 0, SharesNegative()); + require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); int256 currentPodOwnerShares = podOwnerShares[podOwner]; // if there is an existing shares deficit, prioritize decreasing the deficit first diff --git a/src/contracts/pods/EigenPodManagerStorage.sol b/src/contracts/pods/EigenPodManagerStorage.sol index d85c0a178..76b140846 100644 --- a/src/contracts/pods/EigenPodManagerStorage.sol +++ b/src/contracts/pods/EigenPodManagerStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; diff --git a/src/contracts/pods/EigenPodPausingConstants.sol b/src/contracts/pods/EigenPodPausingConstants.sol index e731747a6..509fcade1 100644 --- a/src/contracts/pods/EigenPodPausingConstants.sol +++ b/src/contracts/pods/EigenPodPausingConstants.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; /** * @title Constants shared between 'EigenPod' and 'EigenPodManager' contracts. diff --git a/src/contracts/pods/EigenPodStorage.sol b/src/contracts/pods/EigenPodStorage.sol index 43bd494b8..096bf539c 100644 --- a/src/contracts/pods/EigenPodStorage.sol +++ b/src/contracts/pods/EigenPodStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/IEigenPod.sol"; diff --git a/src/contracts/strategies/EigenStrategy.sol b/src/contracts/strategies/EigenStrategy.sol index aa5204dcb..a814fb552 100644 --- a/src/contracts/strategies/EigenStrategy.sol +++ b/src/contracts/strategies/EigenStrategy.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; // NOTE: Mainnet uses the OpenZeppelin v4.9.0 contracts, but this imports the 4.7.1 version. This will be changed after an upgrade. import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; @@ -51,7 +51,7 @@ contract EigenStrategy is StrategyBase { * @param amount deposit amount */ function _beforeDeposit(IERC20 token, uint256 amount) internal virtual override { - require(token == underlyingToken || token == EIGEN, "EigenStrategy.deposit: Can only deposit bEIGEN or EIGEN"); + require(token == underlyingToken || token == EIGEN, OnlyUnderlyingToken()); if (token == EIGEN) { // unwrap EIGEN into bEIGEN assuming a 1-1 unwrapping amount @@ -71,7 +71,7 @@ contract EigenStrategy is StrategyBase { IERC20 token, uint256 /*amountShares*/ ) internal virtual override { - require(token == underlyingToken || token == EIGEN, "EigenStrategy.withdraw: Can only withdraw bEIGEN or EIGEN"); + require(token == underlyingToken || token == EIGEN, OnlyUnderlyingToken()); } /** diff --git a/src/contracts/strategies/StrategyBase.sol b/src/contracts/strategies/StrategyBase.sol index a4fab630a..25ac165ec 100644 --- a/src/contracts/strategies/StrategyBase.sol +++ b/src/contracts/strategies/StrategyBase.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/IStrategyManager.sol"; import "../permissions/Pausable.sol"; @@ -64,7 +64,7 @@ contract StrategyBase is Initializable, Pausable, IStrategy { /// @notice Simply checks that the `msg.sender` is the `strategyManager`, which is an address stored immutably at construction. modifier onlyStrategyManager() { - require(msg.sender == address(strategyManager), "StrategyBase.onlyStrategyManager"); + require(msg.sender == address(strategyManager), OnlyStrategyManager()); _; } @@ -123,12 +123,12 @@ contract StrategyBase is Initializable, Pausable, IStrategy { newShares = (amount * virtualShareAmount) / virtualPriorTokenBalance; // extra check for correctness / against edge case where share rate can be massively inflated as a 'griefing' sort of attack - require(newShares != 0, "StrategyBase.deposit: newShares cannot be zero"); + require(newShares != 0, NewSharesZero()); // update total share amount to account for deposit totalShares = (priorTotalShares + newShares); - require(totalShares <= MAX_TOTAL_SHARES, "StrategyBase.deposit: totalShares exceeds `MAX_TOTAL_SHARES`"); + require(totalShares <= MAX_TOTAL_SHARES, TotalSharesExceedsMax()); // emit exchange rate _emitExchangeRate(virtualTokenBalance, totalShares + SHARES_OFFSET); @@ -158,7 +158,7 @@ contract StrategyBase is Initializable, Pausable, IStrategy { require( amountShares <= priorTotalShares, - "StrategyBase.withdraw: amountShares must be less than or equal to totalShares" + WithdrawalAmountExceedsDeposit() ); /** @@ -186,7 +186,7 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * @param amount The amount of `token` being deposited */ function _beforeDeposit(IERC20 token, uint256 amount) internal virtual { - require(token == underlyingToken, "StrategyBase.deposit: Can only deposit underlyingToken"); + require(token == underlyingToken, OnlyUnderlyingToken()); } /** @@ -196,7 +196,7 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * @param amountShares The amount of shares being withdrawn */ function _beforeWithdrawal(address recipient, IERC20 token, uint256 amountShares) internal virtual { - require(token == underlyingToken, "StrategyBase.withdraw: Can only withdraw the strategy token"); + require(token == underlyingToken, OnlyUnderlyingToken()); } /** diff --git a/src/contracts/strategies/StrategyBaseTVLLimits.sol b/src/contracts/strategies/StrategyBaseTVLLimits.sol index 63b76ff45..251ef2fc9 100644 --- a/src/contracts/strategies/StrategyBaseTVLLimits.sol +++ b/src/contracts/strategies/StrategyBaseTVLLimits.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "./StrategyBase.sol"; @@ -58,7 +58,7 @@ contract StrategyBaseTVLLimits is StrategyBase { emit MaxTotalDepositsUpdated(maxTotalDeposits, newMaxTotalDeposits); require( newMaxPerDeposit <= newMaxTotalDeposits, - "StrategyBaseTVLLimits._setTVLLimits: maxPerDeposit exceeds maxTotalDeposits" + MaxPerDepositExceedsMax() ); maxPerDeposit = newMaxPerDeposit; maxTotalDeposits = newMaxTotalDeposits; @@ -77,8 +77,8 @@ contract StrategyBaseTVLLimits is StrategyBase { * @param amount The amount of `token` being deposited */ function _beforeDeposit(IERC20 token, uint256 amount) internal virtual override { - require(amount <= maxPerDeposit, "StrategyBaseTVLLimits: max per deposit exceeded"); - require(_tokenBalance() <= maxTotalDeposits, "StrategyBaseTVLLimits: max deposits exceeded"); + require(amount <= maxPerDeposit, MaxPerDepositExceedsMax()); + require(_tokenBalance() <= maxTotalDeposits, BalanceExceedsMaxTotalDeposits()); super._beforeDeposit(token, amount); } diff --git a/src/contracts/strategies/StrategyFactory.sol b/src/contracts/strategies/StrategyFactory.sol index 7e9a468fb..501199886 100644 --- a/src/contracts/strategies/StrategyFactory.sol +++ b/src/contracts/strategies/StrategyFactory.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; @@ -48,10 +48,10 @@ contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable onlyWhenNotPaused(PAUSED_NEW_STRATEGIES) returns (IStrategy newStrategy) { - require(!isBlacklisted[token], "StrategyFactory.deployNewStrategy: Token is blacklisted"); + require(!isBlacklisted[token], BlacklistedToken()); require( deployedStrategies[token] == IStrategy(address(0)), - "StrategyFactory.deployNewStrategy: Strategy already exists for token" + StrategyAlreadyExists() ); IStrategy strategy = IStrategy( address( @@ -79,7 +79,7 @@ contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable uint256 removeIdx = 0; for (uint256 i; i < tokens.length; ++i) { - require(!isBlacklisted[tokens[i]], "StrategyFactory.blacklistTokens: Cannot blacklist deployed strategy"); + require(!isBlacklisted[tokens[i]], CannotBlacklistDeployedStrategy()); isBlacklisted[tokens[i]] = true; emit TokenBlacklisted(tokens[i]); diff --git a/src/contracts/strategies/StrategyFactoryStorage.sol b/src/contracts/strategies/StrategyFactoryStorage.sol index f2eff77ca..c74cf7eb2 100644 --- a/src/contracts/strategies/StrategyFactoryStorage.sol +++ b/src/contracts/strategies/StrategyFactoryStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/IStrategyFactory.sol"; diff --git a/src/contracts/token/BackingEigen.sol b/src/contracts/token/BackingEigen.sol index 0a3b707ec..b88c9db96 100644 --- a/src/contracts/token/BackingEigen.sol +++ b/src/contracts/token/BackingEigen.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin-v4.9.0/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin-upgrades-v4.9.0/contracts/token/ERC20/extensions/ERC20VotesUpgradeable.sol"; diff --git a/src/contracts/token/Eigen.sol b/src/contracts/token/Eigen.sol index 327fe13b4..0181f9710 100644 --- a/src/contracts/token/Eigen.sol +++ b/src/contracts/token/Eigen.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin-v4.9.0/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin-upgrades-v4.9.0/contracts/token/ERC20/extensions/ERC20VotesUpgradeable.sol"; diff --git a/src/contracts/utils/UpgradeableSignatureCheckingUtils.sol b/src/contracts/utils/UpgradeableSignatureCheckingUtils.sol index ae6251361..562ccd495 100644 --- a/src/contracts/utils/UpgradeableSignatureCheckingUtils.sol +++ b/src/contracts/utils/UpgradeableSignatureCheckingUtils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; diff --git a/src/test/Delegation.t.sol b/src/test/Delegation.t.sol index 3138039cd..28b031ae1 100644 --- a/src/test/Delegation.t.sol +++ b/src/test/Delegation.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; import "src/contracts/interfaces/ISignatureUtils.sol"; diff --git a/src/test/DelegationFaucet.t.sol b/src/test/DelegationFaucet.t.sol index c611b8669..b9c4443f0 100644 --- a/src/test/DelegationFaucet.t.sol +++ b/src/test/DelegationFaucet.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "script/whitelist/delegationFaucet/DelegationFaucet.sol"; import "script/whitelist/ERC20PresetMinterPauser.sol"; diff --git a/src/test/DepositWithdraw.t.sol b/src/test/DepositWithdraw.t.sol index 8e87e245b..c9d48cfa2 100644 --- a/src/test/DepositWithdraw.t.sol +++ b/src/test/DepositWithdraw.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "./EigenLayerTestHelper.t.sol"; import "../contracts/core/StrategyManagerStorage.sol"; diff --git a/src/test/EigenLayerDeployer.t.sol b/src/test/EigenLayerDeployer.t.sol index 0f4888fc5..5550fc6f7 100644 --- a/src/test/EigenLayerDeployer.t.sol +++ b/src/test/EigenLayerDeployer.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; diff --git a/src/test/EigenLayerTestHelper.t.sol b/src/test/EigenLayerTestHelper.t.sol index 62508d5d8..caebaca21 100644 --- a/src/test/EigenLayerTestHelper.t.sol +++ b/src/test/EigenLayerTestHelper.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../test/EigenLayerDeployer.t.sol"; import "../contracts/interfaces/ISignatureUtils.sol"; diff --git a/src/test/Pausable.t.sol b/src/test/Pausable.t.sol index 9b6b878ec..19c00fd2f 100644 --- a/src/test/Pausable.t.sol +++ b/src/test/Pausable.t.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "./EigenLayerTestHelper.t.sol"; diff --git a/src/test/Strategy.t.sol b/src/test/Strategy.t.sol index 3139e92a2..6bcad11ad 100644 --- a/src/test/Strategy.t.sol +++ b/src/test/Strategy.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "./EigenLayerTestHelper.t.sol"; import "../contracts/core/StrategyManagerStorage.sol"; diff --git a/src/test/Withdrawals.t.sol b/src/test/Withdrawals.t.sol index f8f780e7a..b95aef9f4 100644 --- a/src/test/Withdrawals.t.sol +++ b/src/test/Withdrawals.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../test/EigenLayerTestHelper.t.sol"; diff --git a/src/test/events/IAVSDirectoryEvents.sol b/src/test/events/IAVSDirectoryEvents.sol index a4f0a2962..91f5431f2 100644 --- a/src/test/events/IAVSDirectoryEvents.sol +++ b/src/test/events/IAVSDirectoryEvents.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/contracts/interfaces/IAVSDirectory.sol"; diff --git a/src/test/events/IDelegationManagerEvents.sol b/src/test/events/IDelegationManagerEvents.sol index 9677cc226..aaeec104f 100644 --- a/src/test/events/IDelegationManagerEvents.sol +++ b/src/test/events/IDelegationManagerEvents.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/contracts/interfaces/IDelegationManager.sol"; diff --git a/src/test/events/IEigenPodEvents.sol b/src/test/events/IEigenPodEvents.sol index f6302272b..db649113a 100644 --- a/src/test/events/IEigenPodEvents.sol +++ b/src/test/events/IEigenPodEvents.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; interface IEigenPodEvents { // @notice Emitted when an ETH validator stakes via this eigenPod diff --git a/src/test/events/IEigenPodManagerEvents.sol b/src/test/events/IEigenPodManagerEvents.sol index 79c11d663..c9d009fed 100644 --- a/src/test/events/IEigenPodManagerEvents.sol +++ b/src/test/events/IEigenPodManagerEvents.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; interface IEigenPodManagerEvents { /// @notice Emitted to notify that the denebForkTimestamp has been set diff --git a/src/test/events/IRewardsCoordinatorEvents.sol b/src/test/events/IRewardsCoordinatorEvents.sol index 72832ae68..6db8af71c 100644 --- a/src/test/events/IRewardsCoordinatorEvents.sol +++ b/src/test/events/IRewardsCoordinatorEvents.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/contracts/interfaces/IRewardsCoordinator.sol"; diff --git a/src/test/events/IStrategyManagerEvents.sol b/src/test/events/IStrategyManagerEvents.sol index e0727d069..35d73ad2a 100644 --- a/src/test/events/IStrategyManagerEvents.sol +++ b/src/test/events/IStrategyManagerEvents.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/contracts/interfaces/IStrategyManager.sol"; diff --git a/src/test/harnesses/EigenHarness.sol b/src/test/harnesses/EigenHarness.sol index e5f1ccbbf..b8d11b1bc 100644 --- a/src/test/harnesses/EigenHarness.sol +++ b/src/test/harnesses/EigenHarness.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../contracts/token/Eigen.sol"; diff --git a/src/test/harnesses/EigenPodHarness.sol b/src/test/harnesses/EigenPodHarness.sol index f76e00e1f..0be5e4a54 100644 --- a/src/test/harnesses/EigenPodHarness.sol +++ b/src/test/harnesses/EigenPodHarness.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../contracts/pods/EigenPod.sol"; import "forge-std/Test.sol"; diff --git a/src/test/harnesses/EigenPodManagerWrapper.sol b/src/test/harnesses/EigenPodManagerWrapper.sol index 15eec05fd..7bce6e9bc 100644 --- a/src/test/harnesses/EigenPodManagerWrapper.sol +++ b/src/test/harnesses/EigenPodManagerWrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../contracts/pods/EigenPodManager.sol"; diff --git a/src/test/harnesses/PausableHarness.sol b/src/test/harnesses/PausableHarness.sol index 7a0e37fdb..895bf2e85 100644 --- a/src/test/harnesses/PausableHarness.sol +++ b/src/test/harnesses/PausableHarness.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../contracts/permissions/Pausable.sol"; diff --git a/src/test/integration/IntegrationBase.t.sol b/src/test/integration/IntegrationBase.t.sol index dc232a98c..872a547f2 100644 --- a/src/test/integration/IntegrationBase.t.sol +++ b/src/test/integration/IntegrationBase.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; diff --git a/src/test/integration/IntegrationChecks.t.sol b/src/test/integration/IntegrationChecks.t.sol index 2fc360581..3fc6583c3 100644 --- a/src/test/integration/IntegrationChecks.t.sol +++ b/src/test/integration/IntegrationChecks.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/integration/IntegrationBase.t.sol"; import "src/test/integration/users/User.t.sol"; diff --git a/src/test/integration/IntegrationDeployer.t.sol b/src/test/integration/IntegrationDeployer.t.sol index 8181a3ee7..3b1a5e541 100644 --- a/src/test/integration/IntegrationDeployer.t.sol +++ b/src/test/integration/IntegrationDeployer.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; // Imports import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; diff --git a/src/test/integration/TimeMachine.t.sol b/src/test/integration/TimeMachine.t.sol index aabb47d4b..253d48cc0 100644 --- a/src/test/integration/TimeMachine.t.sol +++ b/src/test/integration/TimeMachine.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; diff --git a/src/test/integration/deprecatedInterfaces/mainnet/BeaconChainProofs.sol b/src/test/integration/deprecatedInterfaces/mainnet/BeaconChainProofs.sol index 89af42013..41c8a043d 100644 --- a/src/test/integration/deprecatedInterfaces/mainnet/BeaconChainProofs.sol +++ b/src/test/integration/deprecatedInterfaces/mainnet/BeaconChainProofs.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/contracts/libraries/Merkle.sol"; import "src/contracts/libraries/Endian.sol"; diff --git a/src/test/integration/deprecatedInterfaces/mainnet/IBeaconChainOracle.sol b/src/test/integration/deprecatedInterfaces/mainnet/IBeaconChainOracle.sol index 2bb2c818e..cb36eda5b 100644 --- a/src/test/integration/deprecatedInterfaces/mainnet/IBeaconChainOracle.sol +++ b/src/test/integration/deprecatedInterfaces/mainnet/IBeaconChainOracle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; /** * @notice DEPRECATED INTERFACE at commit hash https://github.com/Layr-Labs/eigenlayer-contracts/tree/0139d6213927c0a7812578899ddd3dda58051928 diff --git a/src/test/integration/deprecatedInterfaces/mainnet/IDelayedWithdrawalRouter.sol b/src/test/integration/deprecatedInterfaces/mainnet/IDelayedWithdrawalRouter.sol index 8abb54a86..06d66c1e6 100644 --- a/src/test/integration/deprecatedInterfaces/mainnet/IDelayedWithdrawalRouter.sol +++ b/src/test/integration/deprecatedInterfaces/mainnet/IDelayedWithdrawalRouter.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; /// @notice DEPRECATED INTERFACE at commit hash https://github.com/Layr-Labs/eigenlayer-contracts/tree/0139d6213927c0a7812578899ddd3dda58051928 interface IDelayedWithdrawalRouter_DeprecatedM1 { diff --git a/src/test/integration/deprecatedInterfaces/mainnet/IEigenPod.sol b/src/test/integration/deprecatedInterfaces/mainnet/IEigenPod.sol index 0171653be..2866a9b83 100644 --- a/src/test/integration/deprecatedInterfaces/mainnet/IEigenPod.sol +++ b/src/test/integration/deprecatedInterfaces/mainnet/IEigenPod.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "./BeaconChainProofs.sol"; import "./IEigenPodManager.sol"; diff --git a/src/test/integration/deprecatedInterfaces/mainnet/IEigenPodManager.sol b/src/test/integration/deprecatedInterfaces/mainnet/IEigenPodManager.sol index d5795bf5d..311798e17 100644 --- a/src/test/integration/deprecatedInterfaces/mainnet/IEigenPodManager.sol +++ b/src/test/integration/deprecatedInterfaces/mainnet/IEigenPodManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "./IStrategyManager.sol"; import "./IEigenPod.sol"; diff --git a/src/test/integration/deprecatedInterfaces/mainnet/IStrategyManager.sol b/src/test/integration/deprecatedInterfaces/mainnet/IStrategyManager.sol index be5745683..dec934d1b 100644 --- a/src/test/integration/deprecatedInterfaces/mainnet/IStrategyManager.sol +++ b/src/test/integration/deprecatedInterfaces/mainnet/IStrategyManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/contracts/interfaces/IStrategy.sol"; import "src/contracts/interfaces/ISlasher.sol"; diff --git a/src/test/integration/mocks/BeaconChainMock.t.sol b/src/test/integration/mocks/BeaconChainMock.t.sol index 81958fef8..0ed38503d 100644 --- a/src/test/integration/mocks/BeaconChainMock.t.sol +++ b/src/test/integration/mocks/BeaconChainMock.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; diff --git a/src/test/integration/mocks/EIP_4788_Oracle_Mock.t.sol b/src/test/integration/mocks/EIP_4788_Oracle_Mock.t.sol index b83aac72a..37cb50c59 100644 --- a/src/test/integration/mocks/EIP_4788_Oracle_Mock.t.sol +++ b/src/test/integration/mocks/EIP_4788_Oracle_Mock.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; contract EIP_4788_Oracle_Mock { diff --git a/src/test/integration/tests/Delegate_Deposit_Queue_Complete.t.sol b/src/test/integration/tests/Delegate_Deposit_Queue_Complete.t.sol index 1c20e1807..97afbaf74 100644 --- a/src/test/integration/tests/Delegate_Deposit_Queue_Complete.t.sol +++ b/src/test/integration/tests/Delegate_Deposit_Queue_Complete.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/integration/IntegrationChecks.t.sol"; import "src/test/integration/users/User.t.sol"; diff --git a/src/test/integration/tests/Deposit_Delegate_Queue_Complete.t.sol b/src/test/integration/tests/Deposit_Delegate_Queue_Complete.t.sol index 7a703dea9..c05f15206 100644 --- a/src/test/integration/tests/Deposit_Delegate_Queue_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Delegate_Queue_Complete.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/integration/IntegrationChecks.t.sol"; import "src/test/integration/users/User.t.sol"; diff --git a/src/test/integration/tests/Deposit_Delegate_Redelegate_Complete.t.sol b/src/test/integration/tests/Deposit_Delegate_Redelegate_Complete.t.sol index e5bc6b91d..efcca889f 100644 --- a/src/test/integration/tests/Deposit_Delegate_Redelegate_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Delegate_Redelegate_Complete.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/integration/users/User.t.sol"; import "src/test/integration/IntegrationChecks.t.sol"; diff --git a/src/test/integration/tests/Deposit_Delegate_Undelegate_Complete.t.sol b/src/test/integration/tests/Deposit_Delegate_Undelegate_Complete.t.sol index 9307eb358..5921c17b4 100644 --- a/src/test/integration/tests/Deposit_Delegate_Undelegate_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Delegate_Undelegate_Complete.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/integration/users/User.t.sol"; import "src/test/integration/IntegrationChecks.t.sol"; diff --git a/src/test/integration/tests/Deposit_Delegate_UpdateBalance.t.sol b/src/test/integration/tests/Deposit_Delegate_UpdateBalance.t.sol index 53b42ff4a..16655a324 100644 --- a/src/test/integration/tests/Deposit_Delegate_UpdateBalance.t.sol +++ b/src/test/integration/tests/Deposit_Delegate_UpdateBalance.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/integration/IntegrationChecks.t.sol"; import "src/test/integration/users/User.t.sol"; diff --git a/src/test/integration/tests/Deposit_Queue_Complete.t.sol b/src/test/integration/tests/Deposit_Queue_Complete.t.sol index 3260cf32c..9223b27ec 100644 --- a/src/test/integration/tests/Deposit_Queue_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Queue_Complete.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/integration/users/User.t.sol"; import "src/test/integration/IntegrationChecks.t.sol"; diff --git a/src/test/integration/tests/Deposit_Register_QueueWithdrawal_Complete.t.sol b/src/test/integration/tests/Deposit_Register_QueueWithdrawal_Complete.t.sol index 9da5443a1..0e89737e3 100644 --- a/src/test/integration/tests/Deposit_Register_QueueWithdrawal_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Register_QueueWithdrawal_Complete.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/integration/users/User.t.sol"; import "src/test/integration/IntegrationChecks.t.sol"; diff --git a/src/test/integration/tests/Upgrade_Setup.t.sol b/src/test/integration/tests/Upgrade_Setup.t.sol index cbfb4eb45..dbde22584 100644 --- a/src/test/integration/tests/Upgrade_Setup.t.sol +++ b/src/test/integration/tests/Upgrade_Setup.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/integration/IntegrationChecks.t.sol"; diff --git a/src/test/integration/tests/eigenpod/VerifyWC_StartCP_CompleteCP.t.sol b/src/test/integration/tests/eigenpod/VerifyWC_StartCP_CompleteCP.t.sol index fd641bab2..1681c1791 100644 --- a/src/test/integration/tests/eigenpod/VerifyWC_StartCP_CompleteCP.t.sol +++ b/src/test/integration/tests/eigenpod/VerifyWC_StartCP_CompleteCP.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/integration/IntegrationChecks.t.sol"; import "src/test/integration/users/User.t.sol"; diff --git a/src/test/integration/users/User.t.sol b/src/test/integration/users/User.t.sol index 7875e56c6..86d70cdae 100644 --- a/src/test/integration/users/User.t.sol +++ b/src/test/integration/users/User.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; diff --git a/src/test/integration/users/User_M1.t.sol b/src/test/integration/users/User_M1.t.sol index 3f914cfaf..4f88a41af 100644 --- a/src/test/integration/users/User_M1.t.sol +++ b/src/test/integration/users/User_M1.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/integration/deprecatedInterfaces/mainnet/IEigenPod.sol"; import "src/test/integration/deprecatedInterfaces/mainnet/IEigenPodManager.sol"; diff --git a/src/test/integration/utils/PrintUtils.t.sol b/src/test/integration/utils/PrintUtils.t.sol index c80dd42ff..5f4aac5d2 100644 --- a/src/test/integration/utils/PrintUtils.t.sol +++ b/src/test/integration/utils/PrintUtils.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; diff --git a/src/test/mocks/DelegationManagerMock.sol b/src/test/mocks/DelegationManagerMock.sol index 4fa56d087..0a4fe3141 100644 --- a/src/test/mocks/DelegationManagerMock.sol +++ b/src/test/mocks/DelegationManagerMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; import "../../contracts/interfaces/IDelegationManager.sol"; diff --git a/src/test/mocks/Dummy.sol b/src/test/mocks/Dummy.sol index 79160b45f..6990c4e26 100644 --- a/src/test/mocks/Dummy.sol +++ b/src/test/mocks/Dummy.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; contract EmptyContract { function foo() public pure returns (uint256) { diff --git a/src/test/mocks/ERC20Mock.sol b/src/test/mocks/ERC20Mock.sol index 5e02b68e8..ca0e4f677 100644 --- a/src/test/mocks/ERC20Mock.sol +++ b/src/test/mocks/ERC20Mock.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/interfaces/IERC20.sol"; import "@openzeppelin/contracts/utils/Context.sol"; diff --git a/src/test/mocks/ERC20_OneWeiFeeOnTransfer.sol b/src/test/mocks/ERC20_OneWeiFeeOnTransfer.sol index 173acf69b..7606b2a31 100644 --- a/src/test/mocks/ERC20_OneWeiFeeOnTransfer.sol +++ b/src/test/mocks/ERC20_OneWeiFeeOnTransfer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; // copy-pasted OZ code with _balances mapping made *internal* instead of private diff --git a/src/test/mocks/ERC20_SetTransferReverting_Mock.sol b/src/test/mocks/ERC20_SetTransferReverting_Mock.sol index dd12a7fd3..70230a464 100644 --- a/src/test/mocks/ERC20_SetTransferReverting_Mock.sol +++ b/src/test/mocks/ERC20_SetTransferReverting_Mock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; diff --git a/src/test/mocks/ETHDepositMock.sol b/src/test/mocks/ETHDepositMock.sol index 8b8841974..8ad2ee0d5 100644 --- a/src/test/mocks/ETHDepositMock.sol +++ b/src/test/mocks/ETHDepositMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../../contracts/interfaces/IETHPOSDeposit.sol"; diff --git a/src/test/mocks/EmptyContract.sol b/src/test/mocks/EmptyContract.sol index 79160b45f..6990c4e26 100644 --- a/src/test/mocks/EmptyContract.sol +++ b/src/test/mocks/EmptyContract.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; contract EmptyContract { function foo() public pure returns (uint256) { diff --git a/src/test/mocks/MockDecimals.sol b/src/test/mocks/MockDecimals.sol index 6f5afc44c..e450fdd5b 100644 --- a/src/test/mocks/MockDecimals.sol +++ b/src/test/mocks/MockDecimals.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; contract MockDecimals { function decimals() public pure returns (uint8) { diff --git a/src/test/mocks/OwnableMock.sol b/src/test/mocks/OwnableMock.sol index 11ba5c53f..48abf590a 100644 --- a/src/test/mocks/OwnableMock.sol +++ b/src/test/mocks/OwnableMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/access/Ownable.sol"; diff --git a/src/test/mocks/SlasherMock.sol b/src/test/mocks/SlasherMock.sol index 6524fc466..07f686d47 100644 --- a/src/test/mocks/SlasherMock.sol +++ b/src/test/mocks/SlasherMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; import "../../contracts/interfaces/ISlasher.sol"; diff --git a/src/test/mocks/StrategyManagerMock.sol b/src/test/mocks/StrategyManagerMock.sol index cefd175fa..d0bbc87a6 100644 --- a/src/test/mocks/StrategyManagerMock.sol +++ b/src/test/mocks/StrategyManagerMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; diff --git a/src/test/token/EigenTransferRestrictions.t.sol b/src/test/token/EigenTransferRestrictions.t.sol index 37b690212..c7da62af2 100644 --- a/src/test/token/EigenTransferRestrictions.t.sol +++ b/src/test/token/EigenTransferRestrictions.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; diff --git a/src/test/token/EigenWrapping.t.sol b/src/test/token/EigenWrapping.t.sol index d2a8683aa..43ad35225 100644 --- a/src/test/token/EigenWrapping.t.sol +++ b/src/test/token/EigenWrapping.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; diff --git a/src/test/token/bEIGEN.t.sol b/src/test/token/bEIGEN.t.sol index 5338c5702..cf89d527a 100644 --- a/src/test/token/bEIGEN.t.sol +++ b/src/test/token/bEIGEN.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; diff --git a/src/test/unit/AVSDirectoryUnit.t.sol b/src/test/unit/AVSDirectoryUnit.t.sol index 6fd70891f..d8b6ab3d1 100644 --- a/src/test/unit/AVSDirectoryUnit.t.sol +++ b/src/test/unit/AVSDirectoryUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; diff --git a/src/test/unit/DelegationUnit.t.sol b/src/test/unit/DelegationUnit.t.sol index 79bf46daf..1deb860fc 100644 --- a/src/test/unit/DelegationUnit.t.sol +++ b/src/test/unit/DelegationUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; diff --git a/src/test/unit/EigenPodManagerUnit.t.sol b/src/test/unit/EigenPodManagerUnit.t.sol index b31d1d404..c953f7f5c 100644 --- a/src/test/unit/EigenPodManagerUnit.t.sol +++ b/src/test/unit/EigenPodManagerUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; diff --git a/src/test/unit/EigenPodUnit.t.sol b/src/test/unit/EigenPodUnit.t.sol index 6314a107c..8b49ad429 100644 --- a/src/test/unit/EigenPodUnit.t.sol +++ b/src/test/unit/EigenPodUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; import "@openzeppelin/contracts/utils/Create2.sol"; diff --git a/src/test/unit/PausableUnit.t.sol b/src/test/unit/PausableUnit.t.sol index c8f03aa92..f848d98a4 100644 --- a/src/test/unit/PausableUnit.t.sol +++ b/src/test/unit/PausableUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; diff --git a/src/test/unit/PauserRegistryUnit.t.sol b/src/test/unit/PauserRegistryUnit.t.sol index 802c228e8..22e54c449 100644 --- a/src/test/unit/PauserRegistryUnit.t.sol +++ b/src/test/unit/PauserRegistryUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; diff --git a/src/test/unit/RewardsCoordinatorUnit.t.sol b/src/test/unit/RewardsCoordinatorUnit.t.sol index 0e3d32df2..933dbb6a0 100644 --- a/src/test/unit/RewardsCoordinatorUnit.t.sol +++ b/src/test/unit/RewardsCoordinatorUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; diff --git a/src/test/unit/StrategyBaseTVLLimitsUnit.sol b/src/test/unit/StrategyBaseTVLLimitsUnit.sol index 6a2b1d8f9..78bdcefac 100644 --- a/src/test/unit/StrategyBaseTVLLimitsUnit.sol +++ b/src/test/unit/StrategyBaseTVLLimitsUnit.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "./StrategyBaseUnit.t.sol"; diff --git a/src/test/unit/StrategyBaseUnit.t.sol b/src/test/unit/StrategyBaseUnit.t.sol index a8c8e47f0..57431326f 100644 --- a/src/test/unit/StrategyBaseUnit.t.sol +++ b/src/test/unit/StrategyBaseUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; diff --git a/src/test/unit/StrategyFactoryUnit.t.sol b/src/test/unit/StrategyFactoryUnit.t.sol index d8bd92858..2cefcea19 100644 --- a/src/test/unit/StrategyFactoryUnit.t.sol +++ b/src/test/unit/StrategyFactoryUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; diff --git a/src/test/unit/StrategyManagerUnit.t.sol b/src/test/unit/StrategyManagerUnit.t.sol index 189c495cd..7f6c7deb3 100644 --- a/src/test/unit/StrategyManagerUnit.t.sol +++ b/src/test/unit/StrategyManagerUnit.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; import "src/contracts/core/StrategyManager.sol"; diff --git a/src/test/utils/BeaconChainProofsWrapper.sol b/src/test/utils/BeaconChainProofsWrapper.sol index d093848d4..d8e4aff10 100644 --- a/src/test/utils/BeaconChainProofsWrapper.sol +++ b/src/test/utils/BeaconChainProofsWrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/contracts/libraries/BeaconChainProofs.sol"; diff --git a/src/test/utils/EigenLayerUnitTestBase.sol b/src/test/utils/EigenLayerUnitTestBase.sol index 9a776e9bf..ebd48d846 100644 --- a/src/test/utils/EigenLayerUnitTestBase.sol +++ b/src/test/utils/EigenLayerUnitTestBase.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; diff --git a/src/test/utils/EigenLayerUnitTestSetup.sol b/src/test/utils/EigenLayerUnitTestSetup.sol index ee2664f23..82a9c85b3 100644 --- a/src/test/utils/EigenLayerUnitTestSetup.sol +++ b/src/test/utils/EigenLayerUnitTestSetup.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "src/test/mocks/StrategyManagerMock.sol"; import "src/test/mocks/DelegationManagerMock.sol"; diff --git a/src/test/utils/EigenPodUser.t.sol b/src/test/utils/EigenPodUser.t.sol index 8e62b26ef..54dbe6f5d 100644 --- a/src/test/utils/EigenPodUser.t.sol +++ b/src/test/utils/EigenPodUser.t.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; diff --git a/src/test/utils/Operators.sol b/src/test/utils/Operators.sol index 7c5faabd6..7863b5ae4 100644 --- a/src/test/utils/Operators.sol +++ b/src/test/utils/Operators.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; import "forge-std/Script.sol"; diff --git a/src/test/utils/Owners.sol b/src/test/utils/Owners.sol index 9c32971ab..f16c17c6d 100644 --- a/src/test/utils/Owners.sol +++ b/src/test/utils/Owners.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; import "forge-std/Script.sol"; diff --git a/src/test/utils/ProofParsing.sol b/src/test/utils/ProofParsing.sol index e3607e07b..ebc3e6b6b 100644 --- a/src/test/utils/ProofParsing.sol +++ b/src/test/utils/ProofParsing.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "forge-std/Test.sol"; import "forge-std/StdJson.sol"; diff --git a/src/test/utils/SignatureCompaction.sol b/src/test/utils/SignatureCompaction.sol index c10b2db1d..0bb98a1c0 100644 --- a/src/test/utils/SignatureCompaction.sol +++ b/src/test/utils/SignatureCompaction.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; diff --git a/src/test/utils/Utils.sol b/src/test/utils/Utils.sol index 10c5653eb..935febc89 100644 --- a/src/test/utils/Utils.sol +++ b/src/test/utils/Utils.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "src/contracts/strategies/StrategyBase.sol"; From 090d95509cf0fe20b06143f9ba23b05b017d70be Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Thu, 12 Sep 2024 12:57:09 -0400 Subject: [PATCH 02/47] chore: forge fmt src/contracts --- src/contracts/core/AVSDirectory.sol | 44 ++---- src/contracts/core/AVSDirectoryStorage.sol | 4 +- src/contracts/core/DelegationManager.sol | 111 +++++++------- src/contracts/core/RewardsCoordinator.sol | 145 ++++++++---------- src/contracts/core/Slasher.sol | 24 ++- src/contracts/core/StrategyManager.sol | 51 +++--- src/contracts/interfaces/IAVSDirectory.sol | 8 +- .../interfaces/IDelegationFaucet.sol | 4 +- .../interfaces/IDelegationManager.sol | 62 ++++++-- src/contracts/interfaces/IEigen.sol | 8 +- src/contracts/interfaces/IEigenPod.sol | 36 +++-- src/contracts/interfaces/IEigenPodManager.sol | 16 +- src/contracts/interfaces/IPausable.sol | 16 +- src/contracts/interfaces/IPauserRegistry.sol | 4 +- .../interfaces/IRewardsCoordinator.sol | 56 +++++-- src/contracts/interfaces/ISlasher.sol | 24 ++- src/contracts/interfaces/ISocketUpdater.sol | 4 +- src/contracts/interfaces/IStrategy.sol | 28 +++- src/contracts/interfaces/IStrategyFactory.sol | 12 +- src/contracts/interfaces/IStrategyManager.sol | 20 ++- src/contracts/interfaces/IWhitelister.sol | 8 +- src/contracts/libraries/BeaconChainProofs.sol | 39 ++--- .../libraries/EIP1271SignatureUtils.sol | 5 +- src/contracts/libraries/Endian.sol | 4 +- src/contracts/libraries/Merkle.sol | 9 +- .../libraries/StructuredLinkedList.sol | 20 ++- src/contracts/permissions/Pausable.sol | 38 +++-- src/contracts/permissions/PauserRegistry.sol | 8 +- src/contracts/pods/EigenPod.sol | 123 ++++++--------- src/contracts/pods/EigenPodManager.sol | 30 ++-- src/contracts/strategies/EigenStrategy.sol | 4 +- src/contracts/strategies/StrategyBase.sol | 37 +++-- .../strategies/StrategyBaseTVLLimits.sol | 9 +- src/contracts/strategies/StrategyFactory.sol | 29 ++-- src/contracts/token/BackingEigen.sol | 8 +- src/contracts/token/Eigen.sol | 12 +- 36 files changed, 603 insertions(+), 457 deletions(-) diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 60f5bf025..40ea0fd90 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -31,7 +31,9 @@ contract AVSDirectory is * @dev Initializes the immutable addresses of the strategy mananger, delegationManager, slasher, * and eigenpodManager contracts */ - constructor(IDelegationManager _delegation) AVSDirectoryStorage(_delegation) { + constructor( + IDelegationManager _delegation + ) AVSDirectoryStorage(_delegation) { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; } @@ -66,25 +68,13 @@ contract AVSDirectory is ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature ) external onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { // Assert `operatorSignature.expiry` has not elapsed. - require( - operatorSignature.expiry >= block.timestamp, - SignatureExpired() - ); + require(operatorSignature.expiry >= block.timestamp, SignatureExpired()); // Assert that the `operator` is not actively registered to the AVS. - require( - avsOperatorStatus[msg.sender][operator] != OperatorAVSRegistrationStatus.REGISTERED, - InvalidOperator() - ); + require(avsOperatorStatus[msg.sender][operator] != OperatorAVSRegistrationStatus.REGISTERED, InvalidOperator()); // Assert `operator` has not already spent `operatorSignature.salt`. - require( - !operatorSaltIsSpent[operator][operatorSignature.salt], - SaltSpent() - ); + require(!operatorSaltIsSpent[operator][operatorSignature.salt], SaltSpent()); // Assert `operator` is a registered operator. - require( - delegation.isOperator(operator), - OperatorNotRegistered() - ); + require(delegation.isOperator(operator), OperatorNotRegistered()); // Calculate the digest hash bytes32 operatorRegistrationDigestHash = calculateOperatorAVSRegistrationDigestHash({ @@ -115,15 +105,11 @@ contract AVSDirectory is * @notice Called by an avs to deregister an operator with the avs. * @param operator The address of the operator to deregister. */ - function deregisterOperatorFromAVS(address operator) - external - onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) - { + function deregisterOperatorFromAVS( + address operator + ) external onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { // Assert that operator is registered for the AVS. - require( - avsOperatorStatus[msg.sender][operator] == OperatorAVSRegistrationStatus.REGISTERED, - InvalidOperator() - ); + require(avsOperatorStatus[msg.sender][operator] == OperatorAVSRegistrationStatus.REGISTERED, InvalidOperator()); // Set the operator as deregistered avsOperatorStatus[msg.sender][operator] = OperatorAVSRegistrationStatus.UNREGISTERED; @@ -135,7 +121,9 @@ contract AVSDirectory is * @notice Called by an avs to emit an `AVSMetadataURIUpdated` event indicating the information has updated. * @param metadataURI The URI for metadata associated with an avs */ - function updateAVSMetadataURI(string calldata metadataURI) external { + function updateAVSMetadataURI( + string calldata metadataURI + ) external { emit AVSMetadataURIUpdated(msg.sender, metadataURI); } @@ -143,7 +131,9 @@ contract AVSDirectory is * @notice Called by an operator to cancel a salt that has been used to register with an AVS. * @param salt A unique and single use value associated with the approver signature. */ - function cancelSalt(bytes32 salt) external { + function cancelSalt( + bytes32 salt + ) external { operatorSaltIsSpent[msg.sender][salt] = true; } diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index d6d099dc3..836c954b6 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/AVSDirectoryStorage.sol @@ -30,7 +30,9 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { /// @dev Salt is used in the `registerOperatorToAVS` function. mapping(address => mapping(bytes32 => bool)) public operatorSaltIsSpent; - constructor(IDelegationManager _delegation) { + constructor( + IDelegationManager _delegation + ) { delegation = _delegation; } diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index de30fd47f..1b3bb5b61 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -124,7 +124,9 @@ contract DelegationManager is * * @dev The caller must have previously registered as an operator in EigenLayer. */ - function modifyOperatorDetails(OperatorDetails calldata newOperatorDetails) external { + function modifyOperatorDetails( + OperatorDetails calldata newOperatorDetails + ) external { require(isOperator(msg.sender), OperatorNotRegistered()); _setOperatorDetails(msg.sender, newOperatorDetails); } @@ -133,7 +135,9 @@ contract DelegationManager is * @notice Called by an operator to emit an `OperatorMetadataURIUpdated` event indicating the information has updated. * @param metadataURI The URI for metadata associated with an operator */ - function updateOperatorMetadataURI(string calldata metadataURI) external { + function updateOperatorMetadataURI( + string calldata metadataURI + ) external { require(isOperator(msg.sender), OperatorNotRegistered()); emit OperatorMetadataURIUpdated(msg.sender, metadataURI); } @@ -187,14 +191,9 @@ contract DelegationManager is bytes32 approverSalt ) external { // check the signature expiry - require( - stakerSignatureAndExpiry.expiry >= block.timestamp, - SignatureExpired() - ); + require(stakerSignatureAndExpiry.expiry >= block.timestamp, SignatureExpired()); require(!isDelegated(staker), ActivelyDelegated()); - require( - isOperator(operator), OperatorNotRegistered() - ); + require(isOperator(operator), OperatorNotRegistered()); // calculate the digest hash, then increment `staker`'s nonce uint256 currentStakerNonce = stakerNonce[staker]; @@ -216,11 +215,9 @@ contract DelegationManager is * a staker from their operator. Undelegation immediately removes ALL active shares/strategies from * both the staker and operator, and places the shares and strategies in the withdrawal queue */ - function undelegate(address staker) - external - onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) - returns (bytes32[] memory withdrawalRoots) - { + function undelegate( + address staker + ) external onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) returns (bytes32[] memory withdrawalRoots) { require(isDelegated(staker), NotActivelyDelegated()); require(!isOperator(staker), OperatorsCannotUndelegate()); require(staker != address(0), InputAddressZero()); @@ -275,11 +272,9 @@ contract DelegationManager is * * All withdrawn shares/strategies are placed in a queue and can be fully withdrawn after a delay. */ - function queueWithdrawals(QueuedWithdrawalParams[] calldata queuedWithdrawalParams) - external - onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) - returns (bytes32[] memory) - { + function queueWithdrawals( + QueuedWithdrawalParams[] calldata queuedWithdrawalParams + ) external onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) returns (bytes32[] memory) { bytes32[] memory withdrawalRoots = new bytes32[](queuedWithdrawalParams.length); address operator = delegatedTo[msg.sender]; @@ -288,10 +283,7 @@ contract DelegationManager is queuedWithdrawalParams[i].strategies.length == queuedWithdrawalParams[i].shares.length, InputArrayLengthMismatch() ); - require( - queuedWithdrawalParams[i].withdrawer == msg.sender, - WithdrawerNotStaker() - ); + require(queuedWithdrawalParams[i].withdrawer == msg.sender, WithdrawerNotStaker()); // Remove shares from staker's strategies and place strategies/shares in queue. // If the staker is delegated to an operator, the operator's delegated shares are also reduced @@ -406,7 +398,9 @@ contract DelegationManager is * @notice Owner-only function for modifying the value of the `minWithdrawalDelayBlocks` variable. * @param newMinWithdrawalDelayBlocks new value of `minWithdrawalDelayBlocks`. */ - function setMinWithdrawalDelayBlocks(uint256 newMinWithdrawalDelayBlocks) external onlyOwner { + function setMinWithdrawalDelayBlocks( + uint256 newMinWithdrawalDelayBlocks + ) external onlyOwner { _setMinWithdrawalDelayBlocks(newMinWithdrawalDelayBlocks); } @@ -476,15 +470,9 @@ contract DelegationManager is */ if (_delegationApprover != address(0) && msg.sender != _delegationApprover && msg.sender != operator) { // check the signature expiry - require( - approverSignatureAndExpiry.expiry >= block.timestamp, - SignatureExpired() - ); + require(approverSignatureAndExpiry.expiry >= block.timestamp, SignatureExpired()); // check that the salt hasn't been used previously, then mark the salt as spent - require( - !delegationApproverSaltIsSpent[_delegationApprover][approverSalt], - SaltSpent() - ); + require(!delegationApproverSaltIsSpent[_delegationApprover][approverSalt], SaltSpent()); delegationApproverSaltIsSpent[_delegationApprover][approverSalt] = true; // forgefmt: disable-next-item @@ -539,25 +527,14 @@ contract DelegationManager is ) internal { bytes32 withdrawalRoot = calculateWithdrawalRoot(withdrawal); - require( - pendingWithdrawals[withdrawalRoot], WithdrawalNotQueued() - ); + require(pendingWithdrawals[withdrawalRoot], WithdrawalNotQueued()); - require( - withdrawal.startBlock + minWithdrawalDelayBlocks <= block.number, - WithdrawalDelayNotElapsed() - ); + require(withdrawal.startBlock + minWithdrawalDelayBlocks <= block.number, WithdrawalDelayNotElapsed()); - require( - msg.sender == withdrawal.withdrawer, - WithdrawerNotCaller() - ); + require(msg.sender == withdrawal.withdrawer, WithdrawerNotCaller()); if (receiveAsTokens) { - require( - tokens.length == withdrawal.strategies.length, - InputArrayLengthMismatch() - ); + require(tokens.length == withdrawal.strategies.length, InputArrayLengthMismatch()); } // Remove `withdrawalRoot` from pending roots @@ -663,9 +640,7 @@ contract DelegationManager is IStrategy[] memory strategies, uint256[] memory shares ) internal returns (bytes32) { - require( - staker != address(0), InputAddressZero() - ); + require(staker != address(0), InputAddressZero()); require(strategies.length != 0, InputArrayLengthZero()); // Remove shares from staker and operator @@ -746,7 +721,9 @@ contract DelegationManager is } } - function _setMinWithdrawalDelayBlocks(uint256 _minWithdrawalDelayBlocks) internal { + function _setMinWithdrawalDelayBlocks( + uint256 _minWithdrawalDelayBlocks + ) internal { require( _minWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, "DelegationManager._setMinWithdrawalDelayBlocks: _minWithdrawalDelayBlocks cannot be > MAX_WITHDRAWAL_DELAY_BLOCKS" @@ -809,35 +786,45 @@ contract DelegationManager is /** * @notice Returns 'true' if `staker` *is* actively delegated, and 'false' otherwise. */ - function isDelegated(address staker) public view returns (bool) { + function isDelegated( + address staker + ) public view returns (bool) { return (delegatedTo[staker] != address(0)); } /** * @notice Returns true is an operator has previously registered for delegation. */ - function isOperator(address operator) public view returns (bool) { + function isOperator( + address operator + ) public view returns (bool) { return operator != address(0) && delegatedTo[operator] == operator; } /** * @notice Returns the OperatorDetails struct associated with an `operator`. */ - function operatorDetails(address operator) external view returns (OperatorDetails memory) { + function operatorDetails( + address operator + ) external view returns (OperatorDetails memory) { return _operatorDetails[operator]; } /** * @notice Returns the delegationApprover account for an operator */ - function delegationApprover(address operator) external view returns (address) { + function delegationApprover( + address operator + ) external view returns (address) { return _operatorDetails[operator].delegationApprover; } /** * @notice Returns the stakerOptOutWindowBlocks for an operator */ - function stakerOptOutWindowBlocks(address operator) external view returns (uint256) { + function stakerOptOutWindowBlocks( + address operator + ) external view returns (uint256) { return _operatorDetails[operator].stakerOptOutWindowBlocks; } @@ -857,7 +844,9 @@ contract DelegationManager is * @notice Returns the number of actively-delegatable shares a staker has across all strategies. * @dev Returns two empty arrays in the case that the Staker has no actively-delegateable shares. */ - function getDelegatableShares(address staker) public view returns (IStrategy[] memory, uint256[] memory) { + function getDelegatableShares( + address staker + ) public view returns (IStrategy[] memory, uint256[] memory) { // Get currently active shares and strategies for `staker` int256 podShares = eigenPodManager.podOwnerShares(staker); (IStrategy[] memory strategyManagerStrats, uint256[] memory strategyManagerShares) = @@ -907,7 +896,9 @@ contract DelegationManager is * from all the inputted strategies. Return value is >= minWithdrawalDelayBlocks as this is the global min withdrawal delay. * @param strategies The strategies to check withdrawal delays for */ - function getWithdrawalDelay(IStrategy[] calldata strategies) public view returns (uint256) { + function getWithdrawalDelay( + IStrategy[] calldata strategies + ) public view returns (uint256) { uint256 withdrawalDelay = minWithdrawalDelayBlocks; for (uint256 i = 0; i < strategies.length; ++i) { uint256 currWithdrawalDelay = strategyWithdrawalDelayBlocks[strategies[i]]; @@ -919,7 +910,9 @@ contract DelegationManager is } /// @notice Returns the keccak256 hash of `withdrawal`. - function calculateWithdrawalRoot(Withdrawal memory withdrawal) public pure returns (bytes32) { + function calculateWithdrawalRoot( + Withdrawal memory withdrawal + ) public pure returns (bytes32) { return keccak256(abi.encode(withdrawal)); } diff --git a/src/contracts/core/RewardsCoordinator.sol b/src/contracts/core/RewardsCoordinator.sol index a3ded2471..56260be6c 100644 --- a/src/contracts/core/RewardsCoordinator.sol +++ b/src/contracts/core/RewardsCoordinator.sol @@ -60,10 +60,7 @@ contract RewardsCoordinator is } modifier onlyRewardsForAllSubmitter() { - require( - isRewardsForAllSubmitter[msg.sender], - OnlyRewardsForAllSubmitter() - ); + require(isRewardsForAllSubmitter[msg.sender], OnlyRewardsForAllSubmitter()); _; } @@ -128,11 +125,9 @@ contract RewardsCoordinator is * @dev This function will revert if the `rewardsSubmission` is malformed, * e.g. if the `strategies` and `weights` arrays are of non-equal lengths */ - function createAVSRewardsSubmission(RewardsSubmission[] calldata rewardsSubmissions) - external - onlyWhenNotPaused(PAUSED_AVS_REWARDS_SUBMISSION) - nonReentrant - { + function createAVSRewardsSubmission( + RewardsSubmission[] calldata rewardsSubmissions + ) external onlyWhenNotPaused(PAUSED_AVS_REWARDS_SUBMISSION) nonReentrant { for (uint256 i = 0; i < rewardsSubmissions.length; i++) { RewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -154,12 +149,9 @@ contract RewardsCoordinator is * a permissioned call based on isRewardsForAllSubmitter mapping. * @param rewardsSubmissions The rewards submissions being created */ - function createRewardsForAllSubmission(RewardsSubmission[] calldata rewardsSubmissions) - external - onlyWhenNotPaused(PAUSED_REWARDS_FOR_ALL_SUBMISSION) - onlyRewardsForAllSubmitter - nonReentrant - { + function createRewardsForAllSubmission( + RewardsSubmission[] calldata rewardsSubmissions + ) external onlyWhenNotPaused(PAUSED_REWARDS_FOR_ALL_SUBMISSION) onlyRewardsForAllSubmitter nonReentrant { for (uint256 i = 0; i < rewardsSubmissions.length; i++) { RewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -182,12 +174,9 @@ contract RewardsCoordinator is * by the token hopper contract from the Eigen Foundation * @param rewardsSubmissions The rewards submissions being created */ - function createRewardsForAllEarners(RewardsSubmission[] calldata rewardsSubmissions) - external - onlyWhenNotPaused(PAUSED_REWARD_ALL_STAKERS_AND_OPERATORS) - onlyRewardsForAllSubmitter - nonReentrant - { + function createRewardsForAllEarners( + RewardsSubmission[] calldata rewardsSubmissions + ) external onlyWhenNotPaused(PAUSED_REWARD_ALL_STAKERS_AND_OPERATORS) onlyRewardsForAllSubmitter nonReentrant { for (uint256 i = 0; i < rewardsSubmissions.length; i++) { RewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -234,10 +223,7 @@ contract RewardsCoordinator is TokenTreeMerkleLeaf calldata tokenLeaf = claim.tokenLeaves[i]; uint256 currCumulativeClaimed = cumulativeClaimed[earner][tokenLeaf.token]; - require( - tokenLeaf.cumulativeEarnings > currCumulativeClaimed, - EarningsNotGreaterThanClaimed() - ); + require(tokenLeaf.cumulativeEarnings > currCumulativeClaimed, EarningsNotGreaterThanClaimed()); // Calculate amount to claim and update cumulativeClaimed uint256 claimAmount = tokenLeaf.cumulativeEarnings - currCumulativeClaimed; @@ -259,13 +245,9 @@ contract RewardsCoordinator is uint32 rewardsCalculationEndTimestamp ) external onlyWhenNotPaused(PAUSED_SUBMIT_DISABLE_ROOTS) onlyRewardsUpdater { require( - rewardsCalculationEndTimestamp > currRewardsCalculationEndTimestamp, - NewRootMustBeForNewCalculatedPeriod() - ); - require( - rewardsCalculationEndTimestamp < block.timestamp, - RewardsEndTimestampNotElapsed() + rewardsCalculationEndTimestamp > currRewardsCalculationEndTimestamp, NewRootMustBeForNewCalculatedPeriod() ); + require(rewardsCalculationEndTimestamp < block.timestamp, RewardsEndTimestampNotElapsed()); uint32 rootIndex = uint32(_distributionRoots.length); uint32 activatedAt = uint32(block.timestamp) + activationDelay; _distributionRoots.push( @@ -284,7 +266,9 @@ contract RewardsCoordinator is * @notice allow the rewardsUpdater to disable/cancel a pending root submission in case of an error * @param rootIndex The index of the root to be disabled */ - function disableRoot(uint32 rootIndex) external onlyWhenNotPaused(PAUSED_SUBMIT_DISABLE_ROOTS) onlyRewardsUpdater { + function disableRoot( + uint32 rootIndex + ) external onlyWhenNotPaused(PAUSED_SUBMIT_DISABLE_ROOTS) onlyRewardsUpdater { require(rootIndex < _distributionRoots.length, InvalidRootIndex()); DistributionRoot storage root = _distributionRoots[rootIndex]; require(!root.disabled, RootDisabled()); @@ -298,7 +282,9 @@ contract RewardsCoordinator is * @param claimer The address of the entity that can call `processClaim` on behalf of the earner * @dev Only callable by the `earner` */ - function setClaimerFor(address claimer) external { + function setClaimerFor( + address claimer + ) external { address earner = msg.sender; address prevClaimer = claimerFor[earner]; claimerFor[earner] = claimer; @@ -310,7 +296,9 @@ contract RewardsCoordinator is * @dev Only callable by the contract owner * @param _activationDelay The new value for activationDelay */ - function setActivationDelay(uint32 _activationDelay) external onlyOwner { + function setActivationDelay( + uint32 _activationDelay + ) external onlyOwner { _setActivationDelay(_activationDelay); } @@ -319,7 +307,9 @@ contract RewardsCoordinator is * @dev Only callable by the contract owner * @param _globalCommissionBips The commission for all operators across all avss */ - function setGlobalOperatorCommission(uint16 _globalCommissionBips) external onlyOwner { + function setGlobalOperatorCommission( + uint16 _globalCommissionBips + ) external onlyOwner { _setGlobalOperatorCommission(_globalCommissionBips); } @@ -328,7 +318,9 @@ contract RewardsCoordinator is * @dev Only callable by the contract owner * @param _rewardsUpdater The address of the new rewardsUpdater */ - function setRewardsUpdater(address _rewardsUpdater) external onlyOwner { + function setRewardsUpdater( + address _rewardsUpdater + ) external onlyOwner { _setRewardsUpdater(_rewardsUpdater); } @@ -353,20 +345,13 @@ contract RewardsCoordinator is /** * @notice Validate a RewardsSubmission. Called from both `createAVSRewardsSubmission` and `createRewardsForAllSubmission` */ - function _validateRewardsSubmission(RewardsSubmission calldata rewardsSubmission) internal view { - require( - rewardsSubmission.strategiesAndMultipliers.length > 0, - InputArrayLengthZero() - ); + function _validateRewardsSubmission( + RewardsSubmission calldata rewardsSubmission + ) internal view { + require(rewardsSubmission.strategiesAndMultipliers.length > 0, InputArrayLengthZero()); require(rewardsSubmission.amount > 0, AmountZero()); - require( - rewardsSubmission.amount <= MAX_REWARDS_AMOUNT, - AmountExceedsMax() - ); - require( - rewardsSubmission.duration <= MAX_REWARDS_DURATION, - DurationExceedsMax() - ); + require(rewardsSubmission.amount <= MAX_REWARDS_AMOUNT, AmountExceedsMax()); + require(rewardsSubmission.duration <= MAX_REWARDS_DURATION, DurationExceedsMax()); require( rewardsSubmission.duration % CALCULATION_INTERVAL_SECONDS == 0, DurationNotMultipleOfCalculationIntervalSeconds() @@ -380,10 +365,7 @@ contract RewardsCoordinator is && GENESIS_REWARDS_TIMESTAMP <= rewardsSubmission.startTimestamp, StartTimestampTooFarInPast() ); - require( - rewardsSubmission.startTimestamp <= block.timestamp + MAX_FUTURE_LENGTH, - StartTimestampTooFarInFuture() - ); + require(rewardsSubmission.startTimestamp <= block.timestamp + MAX_FUTURE_LENGTH, StartTimestampTooFarInFuture()); // Require rewardsSubmission is for whitelisted strategy or beaconChainETHStrategy address currAddress = address(0); @@ -393,10 +375,7 @@ contract RewardsCoordinator is strategyManager.strategyIsWhitelistedForDeposit(strategy) || strategy == beaconChainETHStrategy, InvalidStrategy() ); - require( - currAddress < address(strategy), - StrategiesNotInAscendingOrder() - ); + require(currAddress < address(strategy), StrategiesNotInAscendingOrder()); currAddress = address(strategy); } } @@ -404,14 +383,8 @@ contract RewardsCoordinator is function _checkClaim(RewardsMerkleClaim calldata claim, DistributionRoot memory root) internal view { require(!root.disabled, RootDisabled()); require(block.timestamp >= root.activatedAt, RootNotActivated()); - require( - claim.tokenIndices.length == claim.tokenTreeProofs.length, - InputArrayLengthMismatch() - ); - require( - claim.tokenTreeProofs.length == claim.tokenLeaves.length, - InputArrayLengthMismatch() - ); + require(claim.tokenIndices.length == claim.tokenTreeProofs.length, InputArrayLengthMismatch()); + require(claim.tokenTreeProofs.length == claim.tokenLeaves.length, InputArrayLengthMismatch()); // Verify inclusion of earners leaf (earner, earnerTokenRoot) in the distribution root _verifyEarnerClaimProof({ @@ -447,10 +420,7 @@ contract RewardsCoordinator is ) internal pure { // Validate index size so that there aren't multiple valid indices for the given proof // index can't be greater than 2**(tokenProof/32) - require( - tokenLeafIndex < (1 << (tokenProof.length / 32)), - InvalidTokenLeafIndex() - ); + require(tokenLeafIndex < (1 << (tokenProof.length / 32)), InvalidTokenLeafIndex()); // Verify inclusion of token leaf bytes32 tokenLeafHash = calculateTokenLeafHash(tokenLeaf); @@ -482,10 +452,7 @@ contract RewardsCoordinator is ) internal pure { // Validate index size so that there aren't multiple valid indices for the given proof // index can't be greater than 2**(earnerProof/32) - require( - earnerLeafIndex < (1 << (earnerProof.length / 32)), - InvalidClaimProof() - ); + require(earnerLeafIndex < (1 << (earnerProof.length / 32)), InvalidClaimProof()); // Verify inclusion of earner leaf bytes32 earnerLeafHash = calculateEarnerLeafHash(earnerLeaf); // forgefmt: disable-next-item @@ -500,17 +467,23 @@ contract RewardsCoordinator is ); } - function _setActivationDelay(uint32 _activationDelay) internal { + function _setActivationDelay( + uint32 _activationDelay + ) internal { emit ActivationDelaySet(activationDelay, _activationDelay); activationDelay = _activationDelay; } - function _setGlobalOperatorCommission(uint16 _globalCommissionBips) internal { + function _setGlobalOperatorCommission( + uint16 _globalCommissionBips + ) internal { emit GlobalCommissionBipsSet(globalOperatorCommissionBips, _globalCommissionBips); globalOperatorCommissionBips = _globalCommissionBips; } - function _setRewardsUpdater(address _rewardsUpdater) internal { + function _setRewardsUpdater( + address _rewardsUpdater + ) internal { emit RewardsUpdaterSet(rewardsUpdater, _rewardsUpdater); rewardsUpdater = _rewardsUpdater; } @@ -522,18 +495,24 @@ contract RewardsCoordinator is */ /// @notice return the hash of the earner's leaf - function calculateEarnerLeafHash(EarnerTreeMerkleLeaf calldata leaf) public pure returns (bytes32) { + function calculateEarnerLeafHash( + EarnerTreeMerkleLeaf calldata leaf + ) public pure returns (bytes32) { return keccak256(abi.encodePacked(EARNER_LEAF_SALT, leaf.earner, leaf.earnerTokenRoot)); } /// @notice returns the hash of the earner's token leaf - function calculateTokenLeafHash(TokenTreeMerkleLeaf calldata leaf) public pure returns (bytes32) { + function calculateTokenLeafHash( + TokenTreeMerkleLeaf calldata leaf + ) public pure returns (bytes32) { return keccak256(abi.encodePacked(TOKEN_LEAF_SALT, leaf.token, leaf.cumulativeEarnings)); } /// @notice returns 'true' if the claim would currently pass the check in `processClaims` /// but will revert if not valid - function checkClaim(RewardsMerkleClaim calldata claim) public view returns (bool) { + function checkClaim( + RewardsMerkleClaim calldata claim + ) public view returns (bool) { _checkClaim(claim, _distributionRoots[claim.rootIndex]); return true; } @@ -548,7 +527,9 @@ contract RewardsCoordinator is return _distributionRoots.length; } - function getDistributionRootAtIndex(uint256 index) external view returns (DistributionRoot memory) { + function getDistributionRootAtIndex( + uint256 index + ) external view returns (DistributionRoot memory) { return _distributionRoots[index]; } @@ -569,7 +550,9 @@ contract RewardsCoordinator is } /// @notice loop through distribution roots from reverse and return hash - function getRootIndexFromHash(bytes32 rootHash) public view returns (uint32) { + function getRootIndexFromHash( + bytes32 rootHash + ) public view returns (uint32) { for (uint32 i = uint32(_distributionRoots.length); i > 0; i--) { if (_distributionRoots[i - 1].root == rootHash) { return i - 1; diff --git a/src/contracts/core/Slasher.sol b/src/contracts/core/Slasher.sol index 98901f9de..85cc9a2ae 100644 --- a/src/contracts/core/Slasher.sol +++ b/src/contracts/core/Slasher.sol @@ -29,11 +29,17 @@ contract Slasher is Initializable, OwnableUpgradeable, ISlasher, Pausable { function initialize(address, IPauserRegistry, uint256) external {} - function optIntoSlashing(address) external {} + function optIntoSlashing( + address + ) external {} - function freezeOperator(address) external {} + function freezeOperator( + address + ) external {} - function resetFrozenStatus(address[] calldata) external {} + function resetFrozenStatus( + address[] calldata + ) external {} function recordFirstStakeUpdate(address, uint32) external {} @@ -45,7 +51,9 @@ contract Slasher is Initializable, OwnableUpgradeable, ISlasher, Pausable { function delegation() external view returns (IDelegationManager) {} - function isFrozen(address) external view returns (bool) {} + function isFrozen( + address + ) external view returns (bool) {} function canSlash(address, address) external view returns (bool) {} @@ -59,13 +67,17 @@ contract Slasher is Initializable, OwnableUpgradeable, ISlasher, Pausable { function operatorToMiddlewareTimes(address, uint256) external view returns (MiddlewareTimes memory) {} - function middlewareTimesLength(address) external view returns (uint256) {} + function middlewareTimesLength( + address + ) external view returns (uint256) {} function getMiddlewareTimesIndexStalestUpdateBlock(address, uint32) external view returns (uint32) {} function getMiddlewareTimesIndexServeUntilBlock(address, uint32) external view returns (uint32) {} - function operatorWhitelistedContractsLinkedListSize(address) external view returns (uint256) {} + function operatorWhitelistedContractsLinkedListSize( + address + ) external view returns (uint256) {} function operatorWhitelistedContractsLinkedListEntry( address, diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index a7959630f..89576f185 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -35,17 +35,14 @@ contract StrategyManager is uint256 internal immutable ORIGINAL_CHAIN_ID; modifier onlyStrategyWhitelister() { - require( - msg.sender == strategyWhitelister, OnlyStrategyWhitelister() - ); + require(msg.sender == strategyWhitelister, OnlyStrategyWhitelister()); _; } - modifier onlyStrategiesWhitelistedForDeposit(IStrategy strategy) { - require( - strategyIsWhitelistedForDeposit[strategy], - StrategyNotWhitelisted() - ); + modifier onlyStrategiesWhitelistedForDeposit( + IStrategy strategy + ) { + require(strategyIsWhitelistedForDeposit[strategy], StrategyNotWhitelisted()); _; } @@ -138,10 +135,7 @@ contract StrategyManager is uint256 expiry, bytes memory signature ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 shares) { - require( - !thirdPartyTransfersForbidden[strategy], - ThirdPartyTransfersDisabled() - ); + require(!thirdPartyTransfersForbidden[strategy], ThirdPartyTransfersDisabled()); require(expiry >= block.timestamp, SignatureExpired()); // calculate struct hash, then increment `staker`'s nonce uint256 nonce = nonces[staker]; @@ -205,7 +199,9 @@ contract StrategyManager is * @notice Owner-only function to change the `strategyWhitelister` address. * @param newStrategyWhitelister new address for the `strategyWhitelister`. */ - function setStrategyWhitelister(address newStrategyWhitelister) external onlyOwner { + function setStrategyWhitelister( + address newStrategyWhitelister + ) external onlyOwner { _setStrategyWhitelister(newStrategyWhitelister); } @@ -218,10 +214,7 @@ contract StrategyManager is IStrategy[] calldata strategiesToWhitelist, bool[] calldata thirdPartyTransfersForbiddenValues ) external onlyStrategyWhitelister { - require( - strategiesToWhitelist.length == thirdPartyTransfersForbiddenValues.length, - InputArrayLengthMismatch() - ); + require(strategiesToWhitelist.length == thirdPartyTransfersForbiddenValues.length, InputArrayLengthMismatch()); uint256 strategiesToWhitelistLength = strategiesToWhitelist.length; for (uint256 i = 0; i < strategiesToWhitelistLength;) { // change storage and emit event only if strategy is not already in whitelist @@ -240,10 +233,9 @@ contract StrategyManager is * @notice Owner-only function that removes the provided Strategies from the 'whitelist' of strategies that stakers can deposit into * @param strategiesToRemoveFromWhitelist Strategies that will be removed to the `strategyIsWhitelistedForDeposit` mapping (if they are in it) */ - function removeStrategiesFromDepositWhitelist(IStrategy[] calldata strategiesToRemoveFromWhitelist) - external - onlyStrategyWhitelister - { + function removeStrategiesFromDepositWhitelist( + IStrategy[] calldata strategiesToRemoveFromWhitelist + ) external onlyStrategyWhitelister { uint256 strategiesToRemoveFromWhitelistLength = strategiesToRemoveFromWhitelist.length; for (uint256 i = 0; i < strategiesToRemoveFromWhitelistLength;) { // change storage and emit event only if strategy is already in whitelist @@ -278,10 +270,7 @@ contract StrategyManager is // if they dont have existing shares of this strategy, add it to their strats if (stakerStrategyShares[staker][strategy] == 0) { - require( - stakerStrategyList[staker].length < MAX_STAKER_STRATEGY_LIST_LENGTH, - MaxStrategiesExceeded() - ); + require(stakerStrategyList[staker].length < MAX_STAKER_STRATEGY_LIST_LENGTH, MaxStrategiesExceeded()); stakerStrategyList[staker].push(strategy); } @@ -396,7 +385,9 @@ contract StrategyManager is * @notice Internal function for modifying the `strategyWhitelister`. Used inside of the `setStrategyWhitelister` and `initialize` functions. * @param newStrategyWhitelister The new address for the `strategyWhitelister` to take. */ - function _setStrategyWhitelister(address newStrategyWhitelister) internal { + function _setStrategyWhitelister( + address newStrategyWhitelister + ) internal { emit StrategyWhitelisterChanged(strategyWhitelister, newStrategyWhitelister); strategyWhitelister = newStrategyWhitelister; } @@ -407,7 +398,9 @@ contract StrategyManager is * @param staker The staker of interest, whose deposits this function will fetch * @return (staker's strategies, shares in these strategies) */ - function getDeposits(address staker) external view returns (IStrategy[] memory, uint256[] memory) { + function getDeposits( + address staker + ) external view returns (IStrategy[] memory, uint256[] memory) { uint256 strategiesLength = stakerStrategyList[staker].length; uint256[] memory shares = new uint256[](strategiesLength); @@ -421,7 +414,9 @@ contract StrategyManager is } /// @notice Simple getter function that returns `stakerStrategyList[staker].length`. - function stakerStrategyListLength(address staker) external view returns (uint256) { + function stakerStrategyListLength( + address staker + ) external view returns (uint256) { return stakerStrategyList[staker].length; } diff --git a/src/contracts/interfaces/IAVSDirectory.sol b/src/contracts/interfaces/IAVSDirectory.sol index 975c8106d..8e81ee696 100644 --- a/src/contracts/interfaces/IAVSDirectory.sol +++ b/src/contracts/interfaces/IAVSDirectory.sol @@ -49,14 +49,18 @@ interface IAVSDirectory is ISignatureUtils { * @notice Called by an avs to deregister an operator with the avs. * @param operator The address of the operator to deregister. */ - function deregisterOperatorFromAVS(address operator) external; + function deregisterOperatorFromAVS( + address operator + ) external; /** * @notice Called by an AVS to emit an `AVSMetadataURIUpdated` event indicating the information has updated. * @param metadataURI The URI for metadata associated with an AVS * @dev Note that the `metadataURI` is *never stored * and is only emitted in the `AVSMetadataURIUpdated` event */ - function updateAVSMetadataURI(string calldata metadataURI) external; + function updateAVSMetadataURI( + string calldata metadataURI + ) external; /** * @notice Returns whether or not the salt has already been used by the operator. diff --git a/src/contracts/interfaces/IDelegationFaucet.sol b/src/contracts/interfaces/IDelegationFaucet.sol index 8741208db..5642c1342 100644 --- a/src/contracts/interfaces/IDelegationFaucet.sol +++ b/src/contracts/interfaces/IDelegationFaucet.sol @@ -13,7 +13,9 @@ interface IDelegationFaucet { uint256 _depositAmount ) external; - function getStaker(address operator) external returns (address); + function getStaker( + address operator + ) external returns (address); function depositIntoStrategy( address staker, diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index 951580f5e..612421f2e 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -198,14 +198,18 @@ interface IDelegationManager is ISignatureUtils { * * @dev The caller must have previously registered as an operator in EigenLayer. */ - function modifyOperatorDetails(OperatorDetails calldata newOperatorDetails) external; + function modifyOperatorDetails( + OperatorDetails calldata newOperatorDetails + ) external; /** * @notice Called by an operator to emit an `OperatorMetadataURIUpdated` event indicating the information has updated. * @param metadataURI The URI for metadata associated with an operator * @dev Note that the `metadataURI` is *never stored * and is only emitted in the `OperatorMetadataURIUpdated` event */ - function updateOperatorMetadataURI(string calldata metadataURI) external; + function updateOperatorMetadataURI( + string calldata metadataURI + ) external; /** * @notice Caller delegates their stake to an operator. @@ -261,7 +265,9 @@ interface IDelegationManager is ISignatureUtils { * @dev Reverts if the caller is not the staker, nor the operator who the staker is delegated to, nor the operator's specified "delegationApprover" * @dev Reverts if the `staker` is already undelegated. */ - function undelegate(address staker) external returns (bytes32[] memory withdrawalRoot); + function undelegate( + address staker + ) external returns (bytes32[] memory withdrawalRoot); /** * Allows a staker to withdraw some shares. Withdrawn shares/strategies are immediately removed @@ -270,9 +276,9 @@ interface IDelegationManager is ISignatureUtils { * * All withdrawn shares/strategies are placed in a queue and can be fully withdrawn after a delay. */ - function queueWithdrawals(QueuedWithdrawalParams[] calldata queuedWithdrawalParams) - external - returns (bytes32[] memory); + function queueWithdrawals( + QueuedWithdrawalParams[] calldata queuedWithdrawalParams + ) external returns (bytes32[] memory); /** * @notice Used to complete the specified `withdrawal`. The caller must match `withdrawal.withdrawer` @@ -338,22 +344,30 @@ interface IDelegationManager is ISignatureUtils { * @notice Mapping: staker => operator whom the staker is currently delegated to. * @dev Note that returning address(0) indicates that the staker is not actively delegated to any operator. */ - function delegatedTo(address staker) external view returns (address); + function delegatedTo( + address staker + ) external view returns (address); /** * @notice Returns the OperatorDetails struct associated with an `operator`. */ - function operatorDetails(address operator) external view returns (OperatorDetails memory); + function operatorDetails( + address operator + ) external view returns (OperatorDetails memory); /** * @notice Returns the delegationApprover account for an operator */ - function delegationApprover(address operator) external view returns (address); + function delegationApprover( + address operator + ) external view returns (address); /** * @notice Returns the stakerOptOutWindowBlocks for an operator */ - function stakerOptOutWindowBlocks(address operator) external view returns (uint256); + function stakerOptOutWindowBlocks( + address operator + ) external view returns (uint256); /** * @notice Given array of strategies, returns array of shares for the operator @@ -368,7 +382,9 @@ interface IDelegationManager is ISignatureUtils { * from all the inputted strategies. Return value is >= minWithdrawalDelayBlocks as this is the global min withdrawal delay. * @param strategies The strategies to check withdrawal delays for */ - function getWithdrawalDelay(IStrategy[] calldata strategies) external view returns (uint256); + function getWithdrawalDelay( + IStrategy[] calldata strategies + ) external view returns (uint256); /** * @notice returns the total number of shares in `strategy` that are delegated to `operator`. @@ -382,15 +398,21 @@ interface IDelegationManager is ISignatureUtils { /** * @notice Returns 'true' if `staker` *is* actively delegated, and 'false' otherwise. */ - function isDelegated(address staker) external view returns (bool); + function isDelegated( + address staker + ) external view returns (bool); /** * @notice Returns true is an operator has previously registered for delegation. */ - function isOperator(address operator) external view returns (bool); + function isOperator( + address operator + ) external view returns (bool); /// @notice Mapping: staker => number of signed delegation nonces (used in `delegateToBySignature`) from the staker that the contract has already checked - function stakerNonce(address staker) external view returns (uint256); + function stakerNonce( + address staker + ) external view returns (uint256); /** * @notice Mapping: delegationApprover => 32-byte salt => whether or not the salt has already been used by the delegationApprover. @@ -411,7 +433,9 @@ interface IDelegationManager is ISignatureUtils { * @notice Minimum delay enforced by this contract per Strategy for completing queued withdrawals. Measured in blocks, and adjustable by this contract's owner, * up to a maximum of `MAX_WITHDRAWAL_DELAY_BLOCKS`. Minimum value is 0 (i.e. no delay enforced). */ - function strategyWithdrawalDelayBlocks(IStrategy strategy) external view returns (uint256); + function strategyWithdrawalDelayBlocks( + IStrategy strategy + ) external view returns (uint256); /// @notice return address of the beaconChainETHStrategy function beaconChainETHStrategy() external view returns (IStrategy); @@ -478,8 +502,12 @@ interface IDelegationManager is ISignatureUtils { /// @notice Mapping: staker => cumulative number of queued withdrawals they have ever initiated. /// @dev This only increments (doesn't decrement), and is used to help ensure that otherwise identical withdrawals have unique hashes. - function cumulativeWithdrawalsQueued(address staker) external view returns (uint256); + function cumulativeWithdrawalsQueued( + address staker + ) external view returns (uint256); /// @notice Returns the keccak256 hash of `withdrawal`. - function calculateWithdrawalRoot(Withdrawal memory withdrawal) external pure returns (bytes32); + function calculateWithdrawalRoot( + Withdrawal memory withdrawal + ) external pure returns (bytes32); } diff --git a/src/contracts/interfaces/IEigen.sol b/src/contracts/interfaces/IEigen.sol index cd9279e55..0de79374b 100644 --- a/src/contracts/interfaces/IEigen.sol +++ b/src/contracts/interfaces/IEigen.sol @@ -31,12 +31,16 @@ interface IEigen is IERC20 { /** * @notice This function allows bEIGEN holders to wrap their tokens into Eigen */ - function wrap(uint256 amount) external; + function wrap( + uint256 amount + ) external; /** * @notice This function allows Eigen holders to unwrap their tokens into bEIGEN */ - function unwrap(uint256 amount) external; + function unwrap( + uint256 amount + ) external; /** * @dev Clock used for flagging checkpoints. Has been overridden to implement timestamp based diff --git a/src/contracts/interfaces/IEigenPod.sol b/src/contracts/interfaces/IEigenPod.sol index 33a643cb7..0edb74f9c 100644 --- a/src/contracts/interfaces/IEigenPod.sol +++ b/src/contracts/interfaces/IEigenPod.sol @@ -138,7 +138,9 @@ interface IEigenPod { */ /// @notice Used to initialize the pointers to contracts crucial to the pod's functionality, in beacon proxy construction from EigenPodManager - function initialize(address owner) external; + function initialize( + address owner + ) external; /// @notice Called by EigenPodManager when the owner wants to create another ETH validator. function stake(bytes calldata pubkey, bytes calldata signature, bytes32 depositDataRoot) external payable; @@ -164,7 +166,9 @@ interface IEigenPod { * @param revertIfNoBalance Forces a revert if the pod ETH balance is 0. This allows the pod owner * to prevent accidentally starting a checkpoint that will not increase their shares */ - function startCheckpoint(bool revertIfNoBalance) external; + function startCheckpoint( + bool revertIfNoBalance + ) external; /** * @dev Progress the current checkpoint towards completion by submitting one or more validator @@ -249,7 +253,9 @@ interface IEigenPod { /// only address that can call these methods. /// @param newProofSubmitter The new proof submitter address. If set to 0, only the /// pod owner will be able to call `startCheckpoint` and `verifyWithdrawalCredentials` - function setProofSubmitter(address newProofSubmitter) external; + function setProofSubmitter( + address newProofSubmitter + ) external; /** * @@ -273,16 +279,24 @@ interface IEigenPod { function podOwner() external view returns (address); /// @notice Returns the validatorInfo struct for the provided pubkeyHash - function validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) external view returns (ValidatorInfo memory); + function validatorPubkeyHashToInfo( + bytes32 validatorPubkeyHash + ) external view returns (ValidatorInfo memory); /// @notice Returns the validatorInfo struct for the provided pubkey - function validatorPubkeyToInfo(bytes calldata validatorPubkey) external view returns (ValidatorInfo memory); + function validatorPubkeyToInfo( + bytes calldata validatorPubkey + ) external view returns (ValidatorInfo memory); /// @notice This returns the status of a given validator - function validatorStatus(bytes32 pubkeyHash) external view returns (VALIDATOR_STATUS); + function validatorStatus( + bytes32 pubkeyHash + ) external view returns (VALIDATOR_STATUS); /// @notice This returns the status of a given validator pubkey - function validatorStatus(bytes calldata validatorPubkey) external view returns (VALIDATOR_STATUS); + function validatorStatus( + bytes calldata validatorPubkey + ) external view returns (VALIDATOR_STATUS); /// @notice Number of validators with proven withdrawal credentials, who do not have proven full withdrawals function activeValidatorCount() external view returns (uint256); @@ -324,11 +338,15 @@ interface IEigenPod { /// - The final partial withdrawal for an exited validator will be likely be included in this mapping. /// i.e. if a validator was last checkpointed at 32.1 ETH before exiting, the next checkpoint will calculate their /// "exited" amount to be 32.1 ETH rather than 32 ETH. - function checkpointBalanceExitedGwei(uint64) external view returns (uint64); + function checkpointBalanceExitedGwei( + uint64 + ) external view returns (uint64); /// @notice Query the 4788 oracle to get the parent block root of the slot with the given `timestamp` /// @param timestamp of the block for which the parent block root will be returned. MUST correspond /// to an existing slot within the last 24 hours. If the slot at `timestamp` was skipped, this method /// will revert. - function getParentBlockRoot(uint64 timestamp) external view returns (bytes32); + function getParentBlockRoot( + uint64 timestamp + ) external view returns (bytes32); } diff --git a/src/contracts/interfaces/IEigenPodManager.sol b/src/contracts/interfaces/IEigenPodManager.sol index 56efce861..c4fb2910e 100644 --- a/src/contracts/interfaces/IEigenPodManager.sol +++ b/src/contracts/interfaces/IEigenPodManager.sol @@ -75,10 +75,14 @@ interface IEigenPodManager is IPausable { function recordBeaconChainETHBalanceUpdate(address podOwner, int256 sharesDelta) external; /// @notice Returns the address of the `podOwner`'s EigenPod if it has been deployed. - function ownerToPod(address podOwner) external view returns (IEigenPod); + function ownerToPod( + address podOwner + ) external view returns (IEigenPod); /// @notice Returns the address of the `podOwner`'s EigenPod (whether it is deployed yet or not). - function getPod(address podOwner) external view returns (IEigenPod); + function getPod( + address podOwner + ) external view returns (IEigenPod); /// @notice The ETH2 Deposit Contract function ethPOS() external view returns (IETHPOSDeposit); @@ -93,7 +97,9 @@ interface IEigenPodManager is IPausable { function slasher() external view returns (ISlasher); /// @notice Returns 'true' if the `podOwner` has created an EigenPod, and 'false' otherwise. - function hasPod(address podOwner) external view returns (bool); + function hasPod( + address podOwner + ) external view returns (bool); /// @notice Returns the number of EigenPods that have been created function numPods() external view returns (uint256); @@ -106,7 +112,9 @@ interface IEigenPodManager is IPausable { * Likewise, when a withdrawal is completed, this "deficit" is decreased and the withdrawal amount is decreased; We can think of this * as the withdrawal "paying off the deficit". */ - function podOwnerShares(address podOwner) external view returns (int256); + function podOwnerShares( + address podOwner + ) external view returns (int256); /// @notice returns canonical, virtual beaconChainETH strategy function beaconChainETHStrategy() external view returns (IStrategy); diff --git a/src/contracts/interfaces/IPausable.sol b/src/contracts/interfaces/IPausable.sol index c0277d8fa..38b39bf42 100644 --- a/src/contracts/interfaces/IPausable.sol +++ b/src/contracts/interfaces/IPausable.sol @@ -49,7 +49,9 @@ interface IPausable { * @param newPausedStatus represents the new value for `_paused` to take, which means it may flip several bits at once. * @dev This function can only pause functionality, and thus cannot 'unflip' any bit in `_paused` from 1 to 0. */ - function pause(uint256 newPausedStatus) external; + function pause( + uint256 newPausedStatus + ) external; /** * @notice Alias for `pause(type(uint256).max)`. @@ -62,14 +64,20 @@ interface IPausable { * @param newPausedStatus represents the new value for `_paused` to take, which means it may flip several bits at once. * @dev This function can only unpause functionality, and thus cannot 'flip' any bit in `_paused` from 0 to 1. */ - function unpause(uint256 newPausedStatus) external; + function unpause( + uint256 newPausedStatus + ) external; /// @notice Returns the current paused status as a uint256. function paused() external view returns (uint256); /// @notice Returns 'true' if the `indexed`th bit of `_paused` is 1, and 'false' otherwise - function paused(uint8 index) external view returns (bool); + function paused( + uint8 index + ) external view returns (bool); /// @notice Allows the unpauser to set a new pauser registry - function setPauserRegistry(IPauserRegistry newPauserRegistry) external; + function setPauserRegistry( + IPauserRegistry newPauserRegistry + ) external; } diff --git a/src/contracts/interfaces/IPauserRegistry.sol b/src/contracts/interfaces/IPauserRegistry.sol index 9a058bcd8..e20fd77a7 100644 --- a/src/contracts/interfaces/IPauserRegistry.sol +++ b/src/contracts/interfaces/IPauserRegistry.sol @@ -15,7 +15,9 @@ interface IPauserRegistry { event UnpauserChanged(address previousUnpauser, address newUnpauser); /// @notice Mapping of addresses to whether they hold the pauser role. - function isPauser(address pauser) external view returns (bool); + function isPauser( + address pauser + ) external view returns (bool); /// @notice Unique address that holds the unpauser role. Capable of changing *both* the pauser and unpauser addresses. function unpauser() external view returns (address); diff --git a/src/contracts/interfaces/IRewardsCoordinator.sol b/src/contracts/interfaces/IRewardsCoordinator.sol index 5a767f818..625ca8b60 100644 --- a/src/contracts/interfaces/IRewardsCoordinator.sol +++ b/src/contracts/interfaces/IRewardsCoordinator.sol @@ -262,7 +262,9 @@ interface IRewardsCoordinator { function activationDelay() external view returns (uint32); /// @notice Mapping: earner => the address of the entity who can call `processClaim` on behalf of the earner - function claimerFor(address earner) external view returns (address); + function claimerFor( + address earner + ) external view returns (address); /// @notice Mapping: claimer => token => total amount claimed function cumulativeClaimed(address claimer, IERC20 token) external view returns (uint256); @@ -275,14 +277,20 @@ interface IRewardsCoordinator { function operatorCommissionBips(address operator, address avs) external view returns (uint16); /// @notice return the hash of the earner's leaf - function calculateEarnerLeafHash(EarnerTreeMerkleLeaf calldata leaf) external pure returns (bytes32); + function calculateEarnerLeafHash( + EarnerTreeMerkleLeaf calldata leaf + ) external pure returns (bytes32); /// @notice returns the hash of the earner's token leaf - function calculateTokenLeafHash(TokenTreeMerkleLeaf calldata leaf) external pure returns (bytes32); + function calculateTokenLeafHash( + TokenTreeMerkleLeaf calldata leaf + ) external pure returns (bytes32); /// @notice returns 'true' if the claim would currently pass the check in `processClaims` /// but will revert if not valid - function checkClaim(RewardsMerkleClaim calldata claim) external view returns (bool); + function checkClaim( + RewardsMerkleClaim calldata claim + ) external view returns (bool); /// @notice The timestamp until which RewardsSubmissions have been calculated function currRewardsCalculationEndTimestamp() external view returns (uint32); @@ -291,7 +299,9 @@ interface IRewardsCoordinator { function getDistributionRootsLength() external view returns (uint256); /// @notice returns the distributionRoot at the specified index - function getDistributionRootAtIndex(uint256 index) external view returns (DistributionRoot memory); + function getDistributionRootAtIndex( + uint256 index + ) external view returns (DistributionRoot memory); /// @notice returns the current distributionRoot function getCurrentDistributionRoot() external view returns (DistributionRoot memory); @@ -301,7 +311,9 @@ interface IRewardsCoordinator { function getCurrentClaimableDistributionRoot() external view returns (DistributionRoot memory); /// @notice loop through distribution roots from reverse and return index from hash - function getRootIndexFromHash(bytes32 rootHash) external view returns (uint32); + function getRootIndexFromHash( + bytes32 rootHash + ) external view returns (uint32); /** * @@ -320,14 +332,18 @@ interface IRewardsCoordinator { * @dev This function will revert if the `rewardsSubmission` is malformed, * e.g. if the `strategies` and `weights` arrays are of non-equal lengths */ - function createAVSRewardsSubmission(RewardsSubmission[] calldata rewardsSubmissions) external; + function createAVSRewardsSubmission( + RewardsSubmission[] calldata rewardsSubmissions + ) external; /** * @notice similar to `createAVSRewardsSubmission` except the rewards are split amongst *all* stakers * rather than just those delegated to operators who are registered to a single avs and is * a permissioned call based on isRewardsForAllSubmitter mapping. */ - function createRewardsForAllSubmission(RewardsSubmission[] calldata rewardsSubmission) external; + function createRewardsForAllSubmission( + RewardsSubmission[] calldata rewardsSubmission + ) external; /** * @notice Creates a new rewards submission for all earners across all AVSs. @@ -336,7 +352,9 @@ interface IRewardsCoordinator { * by the token hopper contract from the Eigen Foundation * @param rewardsSubmissions The rewards submissions being created */ - function createRewardsForAllEarners(RewardsSubmission[] calldata rewardsSubmissions) external; + function createRewardsForAllEarners( + RewardsSubmission[] calldata rewardsSubmissions + ) external; /** * @notice Claim rewards against a given root (read from _distributionRoots[claim.rootIndex]). @@ -364,34 +382,44 @@ interface IRewardsCoordinator { * @notice allow the rewardsUpdater to disable/cancel a pending root submission in case of an error * @param rootIndex The index of the root to be disabled */ - function disableRoot(uint32 rootIndex) external; + function disableRoot( + uint32 rootIndex + ) external; /** * @notice Sets the address of the entity that can call `processClaim` on behalf of the earner (msg.sender) * @param claimer The address of the entity that can claim rewards on behalf of the earner * @dev Only callable by the `earner` */ - function setClaimerFor(address claimer) external; + function setClaimerFor( + address claimer + ) external; /** * @notice Sets the delay in timestamp before a posted root can be claimed against * @param _activationDelay Delay in timestamp (seconds) before a posted root can be claimed against * @dev Only callable by the contract owner */ - function setActivationDelay(uint32 _activationDelay) external; + function setActivationDelay( + uint32 _activationDelay + ) external; /** * @notice Sets the global commission for all operators across all avss * @param _globalCommissionBips The commission for all operators across all avss * @dev Only callable by the contract owner */ - function setGlobalOperatorCommission(uint16 _globalCommissionBips) external; + function setGlobalOperatorCommission( + uint16 _globalCommissionBips + ) external; /** * @notice Sets the permissioned `rewardsUpdater` address which can post new roots * @dev Only callable by the contract owner */ - function setRewardsUpdater(address _rewardsUpdater) external; + function setRewardsUpdater( + address _rewardsUpdater + ) external; /** * @notice Sets the permissioned `rewardsForAllSubmitter` address which can submit createRewardsForAllSubmission diff --git a/src/contracts/interfaces/ISlasher.sol b/src/contracts/interfaces/ISlasher.sol index f2b4952be..1cd77b996 100644 --- a/src/contracts/interfaces/ISlasher.sol +++ b/src/contracts/interfaces/ISlasher.sol @@ -55,7 +55,9 @@ interface ISlasher { * @notice Gives the `contractAddress` permission to slash the funds of the caller. * @dev Typically, this function must be called prior to registering for a middleware. */ - function optIntoSlashing(address contractAddress) external; + function optIntoSlashing( + address contractAddress + ) external; /** * @notice Used for 'slashing' a certain operator. @@ -63,13 +65,17 @@ interface ISlasher { * @dev Technically the operator is 'frozen' (hence the name of this function), and then subject to slashing pending a decision by a human-in-the-loop. * @dev The operator must have previously given the caller (which should be a contract) the ability to slash them, through a call to `optIntoSlashing`. */ - function freezeOperator(address toBeFrozen) external; + function freezeOperator( + address toBeFrozen + ) external; /** * @notice Removes the 'frozen' status from each of the `frozenAddresses` * @dev Callable only by the contract owner (i.e. governance). */ - function resetFrozenStatus(address[] calldata frozenAddresses) external; + function resetFrozenStatus( + address[] calldata frozenAddresses + ) external; /** * @notice this function is a called by middlewares during an operator's registration to make sure the operator's stake at registration @@ -121,7 +127,9 @@ interface ISlasher { * @return Returns 'true' if `staker` themselves has their status set to frozen, OR if the staker is delegated * to an operator who has their status set to frozen. Otherwise returns 'false'. */ - function isFrozen(address staker) external view returns (bool); + function isFrozen( + address staker + ) external view returns (bool); /// @notice Returns true if `slashingContract` is currently allowed to slash `toBeSlashed`. function canSlash(address toBeSlashed, address slashingContract) external view returns (bool); @@ -171,7 +179,9 @@ interface ISlasher { ) external view returns (MiddlewareTimes memory); /// @notice Getter function for fetching `operatorToMiddlewareTimes[operator].length` - function middlewareTimesLength(address operator) external view returns (uint256); + function middlewareTimesLength( + address operator + ) external view returns (uint256); /// @notice Getter function for fetching `operatorToMiddlewareTimes[operator][index].stalestUpdateBlock`. function getMiddlewareTimesIndexStalestUpdateBlock(address operator, uint32 index) external view returns (uint32); @@ -180,7 +190,9 @@ interface ISlasher { function getMiddlewareTimesIndexServeUntilBlock(address operator, uint32 index) external view returns (uint32); /// @notice Getter function for fetching `_operatorToWhitelistedContractsByUpdate[operator].size`. - function operatorWhitelistedContractsLinkedListSize(address operator) external view returns (uint256); + function operatorWhitelistedContractsLinkedListSize( + address operator + ) external view returns (uint256); /// @notice Getter function for fetching a single node in the operator's linked list (`_operatorToWhitelistedContractsByUpdate[operator]`). function operatorWhitelistedContractsLinkedListEntry( diff --git a/src/contracts/interfaces/ISocketUpdater.sol b/src/contracts/interfaces/ISocketUpdater.sol index dc17ecfa9..921b1a46b 100644 --- a/src/contracts/interfaces/ISocketUpdater.sol +++ b/src/contracts/interfaces/ISocketUpdater.sol @@ -16,5 +16,7 @@ interface ISocketUpdater { * @notice Updates the socket of the msg.sender given they are a registered operator * @param socket is the new socket of the operator */ - function updateSocket(string memory socket) external; + function updateSocket( + string memory socket + ) external; } diff --git a/src/contracts/interfaces/IStrategy.sol b/src/contracts/interfaces/IStrategy.sol index 1be05d09f..afeace90a 100644 --- a/src/contracts/interfaces/IStrategy.sol +++ b/src/contracts/interfaces/IStrategy.sol @@ -67,7 +67,9 @@ interface IStrategy { * @return The amount of underlying tokens corresponding to the input `amountShares` * @dev Implementation for these functions in particular may vary significantly for different strategies */ - function sharesToUnderlying(uint256 amountShares) external returns (uint256); + function sharesToUnderlying( + uint256 amountShares + ) external returns (uint256); /** * @notice Used to convert an amount of underlying tokens to the equivalent amount of shares in this strategy. @@ -76,19 +78,25 @@ interface IStrategy { * @return The amount of underlying tokens corresponding to the input `amountShares` * @dev Implementation for these functions in particular may vary significantly for different strategies */ - function underlyingToShares(uint256 amountUnderlying) external returns (uint256); + function underlyingToShares( + uint256 amountUnderlying + ) external returns (uint256); /** * @notice convenience function for fetching the current underlying value of all of the `user`'s shares in * this strategy. In contrast to `userUnderlyingView`, this function **may** make state modifications */ - function userUnderlying(address user) external returns (uint256); + function userUnderlying( + address user + ) external returns (uint256); /** * @notice convenience function for fetching the current total shares of `user` in this strategy, by * querying the `strategyManager` contract */ - function shares(address user) external view returns (uint256); + function shares( + address user + ) external view returns (uint256); /** * @notice Used to convert a number of shares to the equivalent amount of underlying tokens for this strategy. @@ -97,7 +105,9 @@ interface IStrategy { * @return The amount of shares corresponding to the input `amountUnderlying` * @dev Implementation for these functions in particular may vary significantly for different strategies */ - function sharesToUnderlyingView(uint256 amountShares) external view returns (uint256); + function sharesToUnderlyingView( + uint256 amountShares + ) external view returns (uint256); /** * @notice Used to convert an amount of underlying tokens to the equivalent amount of shares in this strategy. @@ -106,13 +116,17 @@ interface IStrategy { * @return The amount of shares corresponding to the input `amountUnderlying` * @dev Implementation for these functions in particular may vary significantly for different strategies */ - function underlyingToSharesView(uint256 amountUnderlying) external view returns (uint256); + function underlyingToSharesView( + uint256 amountUnderlying + ) external view returns (uint256); /** * @notice convenience function for fetching the current underlying value of all of the `user`'s shares in * this strategy. In contrast to `userUnderlying`, this function guarantees no state modifications */ - function userUnderlyingView(address user) external view returns (uint256); + function userUnderlyingView( + address user + ) external view returns (uint256); /// @notice The underlying token for shares in this Strategy function underlyingToken() external view returns (IERC20); diff --git a/src/contracts/interfaces/IStrategyFactory.sol b/src/contracts/interfaces/IStrategyFactory.sol index 1873f4dd0..d04bfbfc8 100644 --- a/src/contracts/interfaces/IStrategyFactory.sol +++ b/src/contracts/interfaces/IStrategyFactory.sol @@ -31,7 +31,9 @@ interface IStrategyFactory { /// though deployNewStrategy does whitelist by default. /// These strategies MIGHT not be the only strategy for the underlying token /// as additional strategies can be whitelisted by the owner of the factory. - function deployedStrategies(IERC20 token) external view returns (IStrategy); + function deployedStrategies( + IERC20 token + ) external view returns (IStrategy); /** * @notice Deploy a new strategyBeacon contract for the ERC20 token. @@ -40,7 +42,9 @@ interface IStrategyFactory { * $dev Immense caution is warranted for non-standard ERC20 tokens, particularly "reentrant" tokens * like those that conform to ERC777. */ - function deployNewStrategy(IERC20 token) external returns (IStrategy newStrategy); + function deployNewStrategy( + IERC20 token + ) external returns (IStrategy newStrategy); /** * @notice Owner-only function to pass through a call to `StrategyManager.addStrategiesToDepositWhitelist` @@ -58,7 +62,9 @@ interface IStrategyFactory { /** * @notice Owner-only function to pass through a call to `StrategyManager.removeStrategiesFromDepositWhitelist` */ - function removeStrategiesFromWhitelist(IStrategy[] calldata strategiesToRemoveFromWhitelist) external; + function removeStrategiesFromWhitelist( + IStrategy[] calldata strategiesToRemoveFromWhitelist + ) external; /// @notice Emitted when the `strategyBeacon` is changed event StrategyBeaconModified(IBeacon previousBeacon, IBeacon newBeacon); diff --git a/src/contracts/interfaces/IStrategyManager.sol b/src/contracts/interfaces/IStrategyManager.sol index f3351c154..3c1d467c3 100644 --- a/src/contracts/interfaces/IStrategyManager.sol +++ b/src/contracts/interfaces/IStrategyManager.sol @@ -117,10 +117,14 @@ interface IStrategyManager { * @notice Get all details on the staker's deposits and corresponding shares * @return (staker's strategies, shares in these strategies) */ - function getDeposits(address staker) external view returns (IStrategy[] memory, uint256[] memory); + function getDeposits( + address staker + ) external view returns (IStrategy[] memory, uint256[] memory); /// @notice Simple getter function that returns `stakerStrategyList[staker].length`. - function stakerStrategyListLength(address staker) external view returns (uint256); + function stakerStrategyListLength( + address staker + ) external view returns (uint256); /** * @notice Owner-only function that adds the provided Strategies to the 'whitelist' of strategies that stakers can deposit into @@ -136,7 +140,9 @@ interface IStrategyManager { * @notice Owner-only function that removes the provided Strategies from the 'whitelist' of strategies that stakers can deposit into * @param strategiesToRemoveFromWhitelist Strategies that will be removed to the `strategyIsWhitelistedForDeposit` mapping (if they are in it) */ - function removeStrategiesFromDepositWhitelist(IStrategy[] calldata strategiesToRemoveFromWhitelist) external; + function removeStrategiesFromDepositWhitelist( + IStrategy[] calldata strategiesToRemoveFromWhitelist + ) external; /** * If true for a strategy, a user cannot depositIntoStrategyWithSignature into that strategy for another staker @@ -160,11 +166,15 @@ interface IStrategyManager { function strategyWhitelister() external view returns (address); /// @notice Returns bool for whether or not `strategy` is whitelisted for deposit - function strategyIsWhitelistedForDeposit(IStrategy strategy) external view returns (bool); + function strategyIsWhitelistedForDeposit( + IStrategy strategy + ) external view returns (bool); /** * @notice Returns bool for whether or not `strategy` enables credit transfers. i.e enabling * depositIntoStrategyWithSignature calls or queueing withdrawals to a different address than the staker. */ - function thirdPartyTransfersForbidden(IStrategy strategy) external view returns (bool); + function thirdPartyTransfersForbidden( + IStrategy strategy + ) external view returns (bool); } diff --git a/src/contracts/interfaces/IWhitelister.sol b/src/contracts/interfaces/IWhitelister.sol index da68992c8..1afdce118 100644 --- a/src/contracts/interfaces/IWhitelister.sol +++ b/src/contracts/interfaces/IWhitelister.sol @@ -11,9 +11,13 @@ import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Create2.sol"; interface IWhitelister { - function whitelist(address operator) external; + function whitelist( + address operator + ) external; - function getStaker(address operator) external returns (address); + function getStaker( + address operator + ) external returns (address); function depositIntoStrategy( address staker, diff --git a/src/contracts/libraries/BeaconChainProofs.sol b/src/contracts/libraries/BeaconChainProofs.sol index a0486767a..7e176653b 100644 --- a/src/contracts/libraries/BeaconChainProofs.sol +++ b/src/contracts/libraries/BeaconChainProofs.sol @@ -106,10 +106,7 @@ library BeaconChainProofs { /// @param beaconBlockRoot merkle root of the beacon block /// @param proof the beacon state root and merkle proof of its inclusion under `beaconBlockRoot` function verifyStateRoot(bytes32 beaconBlockRoot, StateRootProof calldata proof) internal view { - require( - proof.proof.length == 32 * (BEACON_BLOCK_HEADER_TREE_HEIGHT), - InvalidProofLength() - ); + require(proof.proof.length == 32 * (BEACON_BLOCK_HEADER_TREE_HEIGHT), InvalidProofLength()); /// This merkle proof verifies the `beaconStateRoot` under the `beaconBlockRoot` /// - beaconBlockRoot @@ -142,10 +139,7 @@ library BeaconChainProofs { bytes calldata validatorFieldsProof, uint40 validatorIndex ) internal view { - require( - validatorFields.length == VALIDATOR_FIELDS_LENGTH, - InvalidValidatorFieldsLength() - ); + require(validatorFields.length == VALIDATOR_FIELDS_LENGTH, InvalidValidatorFieldsLength()); /// Note: the reason we use `VALIDATOR_TREE_HEIGHT + 1` here is because the merklization process for /// this container includes hashing the root of the validator tree with the length of the validator list @@ -228,10 +222,7 @@ library BeaconChainProofs { ) internal view returns (uint64 validatorBalanceGwei) { /// Note: the reason we use `BALANCE_TREE_HEIGHT + 1` here is because the merklization process for /// this container includes hashing the root of the balances tree with the length of the balances list - require( - proof.proof.length == 32 * (BALANCE_TREE_HEIGHT + 1), - InvalidProofLength() - ); + require(proof.proof.length == 32 * (BALANCE_TREE_HEIGHT + 1), InvalidProofLength()); /// When merkleized, beacon chain balances are combined into groups of 4 called a `balanceRoot`. The merkle /// proof here verifies that this validator's `balanceRoot` is included in the `balanceContainerRoot` @@ -281,32 +272,44 @@ library BeaconChainProofs { /// (See https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#validator) /// @dev Retrieves a validator's pubkey hash - function getPubkeyHash(bytes32[] memory validatorFields) internal pure returns (bytes32) { + function getPubkeyHash( + bytes32[] memory validatorFields + ) internal pure returns (bytes32) { return validatorFields[VALIDATOR_PUBKEY_INDEX]; } /// @dev Retrieves a validator's withdrawal credentials - function getWithdrawalCredentials(bytes32[] memory validatorFields) internal pure returns (bytes32) { + function getWithdrawalCredentials( + bytes32[] memory validatorFields + ) internal pure returns (bytes32) { return validatorFields[VALIDATOR_WITHDRAWAL_CREDENTIALS_INDEX]; } /// @dev Retrieves a validator's effective balance (in gwei) - function getEffectiveBalanceGwei(bytes32[] memory validatorFields) internal pure returns (uint64) { + function getEffectiveBalanceGwei( + bytes32[] memory validatorFields + ) internal pure returns (uint64) { return Endian.fromLittleEndianUint64(validatorFields[VALIDATOR_BALANCE_INDEX]); } /// @dev Retrieves a validator's activation epoch - function getActivationEpoch(bytes32[] memory validatorFields) internal pure returns (uint64) { + function getActivationEpoch( + bytes32[] memory validatorFields + ) internal pure returns (uint64) { return Endian.fromLittleEndianUint64(validatorFields[VALIDATOR_ACTIVATION_EPOCH_INDEX]); } /// @dev Retrieves true IFF a validator is marked slashed - function isValidatorSlashed(bytes32[] memory validatorFields) internal pure returns (bool) { + function isValidatorSlashed( + bytes32[] memory validatorFields + ) internal pure returns (bool) { return validatorFields[VALIDATOR_SLASHED_INDEX] != 0; } /// @dev Retrieves a validator's exit epoch - function getExitEpoch(bytes32[] memory validatorFields) internal pure returns (uint64) { + function getExitEpoch( + bytes32[] memory validatorFields + ) internal pure returns (uint64) { return Endian.fromLittleEndianUint64(validatorFields[VALIDATOR_EXIT_EPOCH_INDEX]); } } diff --git a/src/contracts/libraries/EIP1271SignatureUtils.sol b/src/contracts/libraries/EIP1271SignatureUtils.sol index 517cac65f..4726e7d29 100644 --- a/src/contracts/libraries/EIP1271SignatureUtils.sol +++ b/src/contracts/libraries/EIP1271SignatureUtils.sol @@ -35,10 +35,7 @@ library EIP1271SignatureUtils { InvalidSignatureEIP1271() ); } else { - require( - ECDSA.recover(digestHash, signature) == signer, - InvalidSignatureSigner() - ); + require(ECDSA.recover(digestHash, signature) == signer, InvalidSignatureSigner()); } } } diff --git a/src/contracts/libraries/Endian.sol b/src/contracts/libraries/Endian.sol index f9799bb9e..56233cda2 100644 --- a/src/contracts/libraries/Endian.sol +++ b/src/contracts/libraries/Endian.sol @@ -9,7 +9,9 @@ library Endian { * @dev Note that the input is formatted as a 'bytes32' type (i.e. 256 bits), but it is immediately truncated to a uint64 (i.e. 64 bits) * through a right-shift/shr operation. */ - function fromLittleEndianUint64(bytes32 lenum) internal pure returns (uint64 n) { + function fromLittleEndianUint64( + bytes32 lenum + ) internal pure returns (uint64 n) { // the number needs to be stored in little-endian encoding (ie in bytes 0-8) n = uint64(uint256(lenum >> 192)); // forgefmt: disable-next-item diff --git a/src/contracts/libraries/Merkle.sol b/src/contracts/libraries/Merkle.sol index 67aac299e..b221a1d51 100644 --- a/src/contracts/libraries/Merkle.sol +++ b/src/contracts/libraries/Merkle.sol @@ -109,10 +109,7 @@ library Merkle { bytes32 leaf, uint256 index ) internal view returns (bytes32) { - require( - proof.length != 0 && proof.length % 32 == 0, - ProofLengthNotMultipleOf32() - ); + require(proof.length != 0 && proof.length % 32 == 0, ProofLengthNotMultipleOf32()); bytes32[1] memory computedHash = [leaf]; for (uint256 i = 32; i <= proof.length; i += 32) { if (index % 2 == 0) { @@ -142,7 +139,9 @@ library Merkle { * @return The computed Merkle root of the tree. * @dev A pre-condition to this function is that leaves.length is a power of two. If not, the function will merkleize the inputs incorrectly. */ - function merkleizeSha256(bytes32[] memory leaves) internal pure returns (bytes32) { + function merkleizeSha256( + bytes32[] memory leaves + ) internal pure returns (bytes32) { //there are half as many nodes in the layer above the leaves uint256 numNodesInLayer = leaves.length / 2; //create a layer to store the internal nodes diff --git a/src/contracts/libraries/StructuredLinkedList.sol b/src/contracts/libraries/StructuredLinkedList.sol index 9efb6b59d..dc7a63450 100644 --- a/src/contracts/libraries/StructuredLinkedList.sol +++ b/src/contracts/libraries/StructuredLinkedList.sol @@ -25,7 +25,9 @@ library StructuredLinkedList { * @param self stored linked list from contract * @return bool true if list exists, false otherwise */ - function listExists(List storage self) internal view returns (bool) { + function listExists( + List storage self + ) internal view returns (bool) { // if the head nodes previous or next pointers both point to itself, then there are no items in the list if (self.list[_HEAD][_PREV] != _HEAD || self.list[_HEAD][_NEXT] != _HEAD) { return true; @@ -57,7 +59,9 @@ library StructuredLinkedList { * @param self stored linked list from contract * @return uint256 */ - function sizeOf(List storage self) internal view returns (uint256) { + function sizeOf( + List storage self + ) internal view returns (uint256) { return self.size; } @@ -66,7 +70,9 @@ library StructuredLinkedList { * @param self stored linked list from contract * @return uint256 the head of the list */ - function getHead(List storage self) internal view returns (uint256) { + function getHead( + List storage self + ) internal view returns (uint256) { return self.list[_HEAD][_NEXT]; } @@ -186,7 +192,9 @@ library StructuredLinkedList { * @param self stored linked list from contract * @return uint256 the removed node */ - function popFront(List storage self) internal returns (uint256) { + function popFront( + List storage self + ) internal returns (uint256) { return _pop(self, _NEXT); } @@ -195,7 +203,9 @@ library StructuredLinkedList { * @param self stored linked list from contract * @return uint256 the removed node */ - function popBack(List storage self) internal returns (uint256) { + function popBack( + List storage self + ) internal returns (uint256) { return _pop(self, _PREV); } diff --git a/src/contracts/permissions/Pausable.sol b/src/contracts/permissions/Pausable.sol index 9d0248e4f..99182c601 100644 --- a/src/contracts/permissions/Pausable.sol +++ b/src/contracts/permissions/Pausable.sol @@ -48,17 +48,16 @@ contract Pausable is IPausable { } /// @notice Throws if the `indexed`th bit of `_paused` is 1, i.e. if the `index`th pause switch is flipped. - modifier onlyWhenNotPaused(uint8 index) { + modifier onlyWhenNotPaused( + uint8 index + ) { require(!paused(index), CurrentlyPaused()); _; } /// @notice One-time function for setting the `pauserRegistry` and initializing the value of `_paused`. function _initializePauser(IPauserRegistry _pauserRegistry, uint256 initPausedStatus) internal { - require( - address(pauserRegistry) == address(0) && address(_pauserRegistry) != address(0), - InputAddressZero() - ); + require(address(pauserRegistry) == address(0) && address(_pauserRegistry) != address(0), InputAddressZero()); _paused = initPausedStatus; emit Paused(msg.sender, initPausedStatus); _setPauserRegistry(_pauserRegistry); @@ -70,7 +69,9 @@ contract Pausable is IPausable { * @param newPausedStatus represents the new value for `_paused` to take, which means it may flip several bits at once. * @dev This function can only pause functionality, and thus cannot 'unflip' any bit in `_paused` from 1 to 0. */ - function pause(uint256 newPausedStatus) external onlyPauser { + function pause( + uint256 newPausedStatus + ) external onlyPauser { // verify that the `newPausedStatus` does not *unflip* any bits (i.e. doesn't unpause anything, all 1 bits remain) require((_paused & newPausedStatus) == _paused, InvalidNewPausedStatus()); _paused = newPausedStatus; @@ -91,11 +92,11 @@ contract Pausable is IPausable { * @param newPausedStatus represents the new value for `_paused` to take, which means it may flip several bits at once. * @dev This function can only unpause functionality, and thus cannot 'flip' any bit in `_paused` from 0 to 1. */ - function unpause(uint256 newPausedStatus) external onlyUnpauser { + function unpause( + uint256 newPausedStatus + ) external onlyUnpauser { // verify that the `newPausedStatus` does not *flip* any bits (i.e. doesn't pause anything, all 0 bits remain) - require( - ((~_paused) & (~newPausedStatus)) == (~_paused), InvalidNewPausedStatus() - ); + require(((~_paused) & (~newPausedStatus)) == (~_paused), InvalidNewPausedStatus()); _paused = newPausedStatus; emit Unpaused(msg.sender, newPausedStatus); } @@ -106,22 +107,25 @@ contract Pausable is IPausable { } /// @notice Returns 'true' if the `indexed`th bit of `_paused` is 1, and 'false' otherwise - function paused(uint8 index) public view virtual returns (bool) { + function paused( + uint8 index + ) public view virtual returns (bool) { uint256 mask = 1 << index; return ((_paused & mask) == mask); } /// @notice Allows the unpauser to set a new pauser registry - function setPauserRegistry(IPauserRegistry newPauserRegistry) external onlyUnpauser { + function setPauserRegistry( + IPauserRegistry newPauserRegistry + ) external onlyUnpauser { _setPauserRegistry(newPauserRegistry); } /// internal function for setting pauser registry - function _setPauserRegistry(IPauserRegistry newPauserRegistry) internal { - require( - address(newPauserRegistry) != address(0), - InputAddressZero() - ); + function _setPauserRegistry( + IPauserRegistry newPauserRegistry + ) internal { + require(address(newPauserRegistry) != address(0), InputAddressZero()); emit PauserRegistrySet(pauserRegistry, newPauserRegistry); pauserRegistry = newPauserRegistry; } diff --git a/src/contracts/permissions/PauserRegistry.sol b/src/contracts/permissions/PauserRegistry.sol index 2a1b765e7..cc86944af 100644 --- a/src/contracts/permissions/PauserRegistry.sol +++ b/src/contracts/permissions/PauserRegistry.sol @@ -35,7 +35,9 @@ contract PauserRegistry is IPauserRegistry { } /// @notice Sets new unpauser - only callable by unpauser, as the unpauser is expected to be kept more secure, e.g. being a multisig with a higher threshold - function setUnpauser(address newUnpauser) external onlyUnpauser { + function setUnpauser( + address newUnpauser + ) external onlyUnpauser { _setUnpauser(newUnpauser); } @@ -45,7 +47,9 @@ contract PauserRegistry is IPauserRegistry { emit PauserStatusChanged(pauser, canPause); } - function _setUnpauser(address newUnpauser) internal { + function _setUnpauser( + address newUnpauser + ) internal { require(newUnpauser != address(0), InputAddressZero()); emit UnpauserChanged(unpauser, newUnpauser); unpauser = newUnpauser; diff --git a/src/contracts/pods/EigenPod.sol b/src/contracts/pods/EigenPod.sol index 110d6c6a2..a1040ca66 100644 --- a/src/contracts/pods/EigenPod.sol +++ b/src/contracts/pods/EigenPod.sol @@ -73,10 +73,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC /// @notice Callable only by the pod's owner or proof submitter modifier onlyOwnerOrProofSubmitter() { - require( - msg.sender == podOwner || msg.sender == proofSubmitter, - OnlyEigenPodOwnerOrProofSubmitter() - ); + require(msg.sender == podOwner || msg.sender == proofSubmitter, OnlyEigenPodOwnerOrProofSubmitter()); _; } @@ -85,11 +82,10 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC * is necessary for enabling pausing all EigenPods at the same time (due to EigenPods being Beacon Proxies). * Modifier throws if the `indexed`th bit of `_paused` in the EigenPodManager is 1, i.e. if the `index`th pause switch is flipped. */ - modifier onlyWhenNotPaused(uint8 index) { - require( - !IPausable(address(eigenPodManager)).paused(index), - CurrentlyPaused() - ); + modifier onlyWhenNotPaused( + uint8 index + ) { + require(!IPausable(address(eigenPodManager)).paused(index), CurrentlyPaused()); _; } @@ -106,7 +102,9 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC } /// @notice Used to initialize the pointers to addresses crucial to the pod's functionality. Called on construction by the EigenPodManager. - function initialize(address _podOwner) external initializer { + function initialize( + address _podOwner + ) external initializer { require(_podOwner != address(0), InputAddressZero()); podOwner = _podOwner; } @@ -134,11 +132,9 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC * @param revertIfNoBalance Forces a revert if the pod ETH balance is 0. This allows the pod owner * to prevent accidentally starting a checkpoint that will not increase their shares */ - function startCheckpoint(bool revertIfNoBalance) - external - onlyOwnerOrProofSubmitter - onlyWhenNotPaused(PAUSED_START_CHECKPOINT) - { + function startCheckpoint( + bool revertIfNoBalance + ) external onlyOwnerOrProofSubmitter onlyWhenNotPaused(PAUSED_START_CHECKPOINT) { _startCheckpoint(revertIfNoBalance); } @@ -157,10 +153,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC BeaconChainProofs.BalanceProof[] calldata proofs ) external onlyWhenNotPaused(PAUSED_EIGENPODS_VERIFY_CHECKPOINT_PROOFS) { uint64 checkpointTimestamp = currentCheckpointTimestamp; - require( - checkpointTimestamp != 0, - NoActiveCheckpoints() - ); + require(checkpointTimestamp != 0, NoActiveCheckpoints()); Checkpoint memory checkpoint = _currentCheckpoint; @@ -247,10 +240,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC // Calling this method using a `beaconTimestamp` <= `currentCheckpointTimestamp` would allow // a newly-verified validator to be submitted to `verifyCheckpointProofs`, making progress // on an existing checkpoint. - require( - beaconTimestamp > currentCheckpointTimestamp, - BeaconTimestampTooFarInPast() - ); + require(beaconTimestamp > currentCheckpointTimestamp, BeaconTimestampTooFarInPast()); // Verify passed-in `beaconStateRoot` against the beacon block root // forgefmt: disable-next-item @@ -329,19 +319,13 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC // that have initiated exits, we know that if we're seeing a proof where the validator // is slashed that it MUST be newer than the `verifyWithdrawalCredentials` proof // (regardless of the relationship between `beaconTimestamp` and `lastCheckpointedAt`). - require( - beaconTimestamp > validatorInfo.lastCheckpointedAt, - ProofOlderThanLastCheckpoint() - ); + require(beaconTimestamp > validatorInfo.lastCheckpointedAt, ProofOlderThanLastCheckpoint()); // Validator must be checkpoint-able require(validatorInfo.status == VALIDATOR_STATUS.ACTIVE, ValidatorNotActive()); // Validator must be slashed on the beacon chain - require( - proof.validatorFields.isValidatorSlashed(), - ValidatorNotSlashed() - ); + require(proof.validatorFields.isValidatorSlashed(), ValidatorNotSlashed()); // Verify passed-in `beaconStateRoot` against the beacon block root // forgefmt: disable-next-item @@ -368,10 +352,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC uint256[] memory amountsToWithdraw, address recipient ) external onlyEigenPodOwner onlyWhenNotPaused(PAUSED_NON_PROOF_WITHDRAWALS) { - require( - tokenList.length == amountsToWithdraw.length, - InputArrayLengthMismatch() - ); + require(tokenList.length == amountsToWithdraw.length, InputArrayLengthMismatch()); for (uint256 i = 0; i < tokenList.length; i++) { tokenList[i].safeTransfer(recipient, amountsToWithdraw[i]); } @@ -384,7 +365,9 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC /// only address that can call these methods. /// @param newProofSubmitter The new proof submitter address. If set to 0, only the /// pod owner will be able to call `startCheckpoint` and `verifyWithdrawalCredentials` - function setProofSubmitter(address newProofSubmitter) external onlyEigenPodOwner { + function setProofSubmitter( + address newProofSubmitter + ) external onlyEigenPodOwner { emit ProofSubmitterUpdated(proofSubmitter, newProofSubmitter); proofSubmitter = newProofSubmitter; } @@ -409,14 +392,10 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC * @dev Reverts if `amountWei` is not a whole Gwei amount */ function withdrawRestakedBeaconChainETH(address recipient, uint256 amountWei) external onlyEigenPodManager { - require( - amountWei % GWEI_TO_WEI == 0, - AmountMustBeMultipleOfGwei() - ); + require(amountWei % GWEI_TO_WEI == 0, AmountMustBeMultipleOfGwei()); uint64 amountGwei = uint64(amountWei / GWEI_TO_WEI); require( - amountGwei <= withdrawableRestakedExecutionLayerGwei, - AmountExceedsWithdrawableRestakedExecutionLayerGwei() + amountGwei <= withdrawableRestakedExecutionLayerGwei, AmountExceedsWithdrawableRestakedExecutionLayerGwei() ); withdrawableRestakedExecutionLayerGwei -= amountGwei; emit RestakedBeaconChainETHWithdrawn(recipient, amountWei); @@ -446,10 +425,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC ValidatorInfo memory validatorInfo = _validatorPubkeyHashToInfo[pubkeyHash]; // Withdrawal credential proofs should only be processed for "INACTIVE" validators - require( - validatorInfo.status == VALIDATOR_STATUS.INACTIVE, - ValidatorAlreadyActive() - ); + require(validatorInfo.status == VALIDATOR_STATUS.INACTIVE, ValidatorAlreadyActive()); // Validator should be active on the beacon chain, or in the process of activating. // This implies the validator has reached the minimum effective balance required @@ -465,8 +441,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC // to temporarily decrease, then be restored later. This would effectively prevent these // shares from being slashable on EigenLayer for a short period of time. require( - validatorFields.getActivationEpoch() != BeaconChainProofs.FAR_FUTURE_EPOCH, - ValidatorNoPendingActivation() + validatorFields.getActivationEpoch() != BeaconChainProofs.FAR_FUTURE_EPOCH, ValidatorNoPendingActivation() ); // Validator should not already be in the process of exiting. This is an important property @@ -491,10 +466,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC // 1 + MAX_SEED_LOOKAHEAD + MIN_VALIDATOR_WITHDRAWABILITY_DELAY == 261 epochs (8352 slots). // // (See https://eth2book.info/capella/part3/helper/mutators/#initiate_validator_exit) - require( - validatorFields.getExitEpoch() == BeaconChainProofs.FAR_FUTURE_EPOCH, - ValidatorIsExiting() - ); + require(validatorFields.getExitEpoch() == BeaconChainProofs.FAR_FUTURE_EPOCH, ValidatorIsExiting()); // Ensure the validator's withdrawal credentials are pointed at this pod require( @@ -593,21 +565,17 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC * @param revertIfNoBalance If the available ETH balance for checkpointing is 0 and this is * true, this method will revert */ - function _startCheckpoint(bool revertIfNoBalance) internal { - require( - currentCheckpointTimestamp == 0, - IncompletePreviousCheckpoint() - ); + function _startCheckpoint( + bool revertIfNoBalance + ) internal { + require(currentCheckpointTimestamp == 0, IncompletePreviousCheckpoint()); // Prevent a checkpoint being completable twice in the same block. This prevents an edge case // where the second checkpoint would not be completable. // // This is because the validators checkpointed in the first checkpoint would have a `lastCheckpointedAt` // value equal to the second checkpoint, causing their proofs to get skipped in `verifyCheckpointProofs` - require( - lastCheckpointTimestamp != uint64(block.timestamp), - CannotCheckpointTwiceInSingleBlock() - ); + require(lastCheckpointTimestamp != uint64(block.timestamp), CannotCheckpointTwiceInSingleBlock()); // Snapshot pod balance at the start of the checkpoint, subtracting pod balance that has // previously been credited with shares. Once the checkpoint is finalized, `podBalanceGwei` @@ -651,7 +619,9 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC * - `lastCheckpointTimestamp` is updated * - `_currentCheckpoint` and `currentCheckpointTimestamp` are deleted */ - function _updateCheckpoint(Checkpoint memory checkpoint) internal { + function _updateCheckpoint( + Checkpoint memory checkpoint + ) internal { if (checkpoint.proofsRemaining == 0) { int256 totalShareDeltaWei = (int128(uint128(checkpoint.podBalanceGwei)) + checkpoint.balanceDeltasGwei) * int256(GWEI_TO_WEI); @@ -678,7 +648,9 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC } ///@notice Calculates the pubkey hash of a validator's pubkey as per SSZ spec - function _calculateValidatorPubkeyHash(bytes memory validatorPubkey) internal pure returns (bytes32) { + function _calculateValidatorPubkeyHash( + bytes memory validatorPubkey + ) internal pure returns (bytes32) { require(validatorPubkey.length == 48, InvalidValidatorPubKeyLength()); return sha256(abi.encodePacked(validatorPubkey, bytes16(0))); } @@ -695,21 +667,29 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC */ /// @notice Returns the validatorInfo for a given validatorPubkeyHash - function validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) external view returns (ValidatorInfo memory) { + function validatorPubkeyHashToInfo( + bytes32 validatorPubkeyHash + ) external view returns (ValidatorInfo memory) { return _validatorPubkeyHashToInfo[validatorPubkeyHash]; } /// @notice Returns the validatorInfo for a given validatorPubkey - function validatorPubkeyToInfo(bytes calldata validatorPubkey) external view returns (ValidatorInfo memory) { + function validatorPubkeyToInfo( + bytes calldata validatorPubkey + ) external view returns (ValidatorInfo memory) { return _validatorPubkeyHashToInfo[_calculateValidatorPubkeyHash(validatorPubkey)]; } - function validatorStatus(bytes32 pubkeyHash) external view returns (VALIDATOR_STATUS) { + function validatorStatus( + bytes32 pubkeyHash + ) external view returns (VALIDATOR_STATUS) { return _validatorPubkeyHashToInfo[pubkeyHash].status; } /// @notice Returns the validator status for a given validatorPubkey - function validatorStatus(bytes calldata validatorPubkey) external view returns (VALIDATOR_STATUS) { + function validatorStatus( + bytes calldata validatorPubkey + ) external view returns (VALIDATOR_STATUS) { bytes32 validatorPubkeyHash = _calculateValidatorPubkeyHash(validatorPubkey); return _validatorPubkeyHashToInfo[validatorPubkeyHash].status; } @@ -723,11 +703,10 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC /// @param timestamp of the block for which the parent block root will be returned. MUST correspond /// to an existing slot within the last 24 hours. If the slot at `timestamp` was skipped, this method /// will revert. - function getParentBlockRoot(uint64 timestamp) public view returns (bytes32) { - require( - block.timestamp - timestamp < BEACON_ROOTS_HISTORY_BUFFER_LENGTH * 12, - TimestampOutOfRange() - ); + function getParentBlockRoot( + uint64 timestamp + ) public view returns (bytes32) { + require(block.timestamp - timestamp < BEACON_ROOTS_HISTORY_BUFFER_LENGTH * 12, TimestampOutOfRange()); (bool success, bytes memory result) = BEACON_ROOTS_ADDRESS.staticcall(abi.encode(timestamp)); diff --git a/src/contracts/pods/EigenPodManager.sol b/src/contracts/pods/EigenPodManager.sol index 4f6820033..e33b3dda4 100644 --- a/src/contracts/pods/EigenPodManager.sol +++ b/src/contracts/pods/EigenPodManager.sol @@ -28,15 +28,15 @@ contract EigenPodManager is EigenPodManagerStorage, ReentrancyGuardUpgradeable { - modifier onlyEigenPod(address podOwner) { + modifier onlyEigenPod( + address podOwner + ) { require(address(ownerToPod[podOwner]) == msg.sender, OnlyEigenPod()); _; } modifier onlyDelegationManager() { - require( - msg.sender == address(delegationManager), OnlyDelegationManager() - ); + require(msg.sender == address(delegationManager), OnlyDelegationManager()); _; } @@ -104,13 +104,8 @@ contract EigenPodManager is address podOwner, int256 sharesDelta ) external onlyEigenPod(podOwner) nonReentrant { - require( - podOwner != address(0), InputAddressZero() - ); - require( - sharesDelta % int256(GWEI_TO_WEI) == 0, - SharesNotMultipleOfGwei() - ); + require(podOwner != address(0), InputAddressZero()); + require(sharesDelta % int256(GWEI_TO_WEI) == 0, SharesNotMultipleOfGwei()); int256 currentPodOwnerShares = podOwnerShares[podOwner]; int256 updatedPodOwnerShares = currentPodOwnerShares + sharesDelta; podOwnerShares[podOwner] = updatedPodOwnerShares; @@ -153,10 +148,7 @@ contract EigenPodManager is require(int256(shares) >= 0, SharesNegative()); require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); int256 updatedPodOwnerShares = podOwnerShares[podOwner] - int256(shares); - require( - updatedPodOwnerShares >= 0, - SharesNegative() - ); + require(updatedPodOwnerShares >= 0, SharesNegative()); podOwnerShares[podOwner] = updatedPodOwnerShares; emit NewTotalShares(podOwner, updatedPodOwnerShares); @@ -279,7 +271,9 @@ contract EigenPodManager is // VIEW FUNCTIONS /// @notice Returns the address of the `podOwner`'s EigenPod (whether it is deployed yet or not). - function getPod(address podOwner) public view returns (IEigenPod) { + function getPod( + address podOwner + ) public view returns (IEigenPod) { IEigenPod pod = ownerToPod[podOwner]; // if pod does not exist already, calculate what its address *will be* once it is deployed if (address(pod) == address(0)) { @@ -294,7 +288,9 @@ contract EigenPodManager is } /// @notice Returns 'true' if the `podOwner` has created an EigenPod, and 'false' otherwise. - function hasPod(address podOwner) public view returns (bool) { + function hasPod( + address podOwner + ) public view returns (bool) { return address(ownerToPod[podOwner]) != address(0); } } diff --git a/src/contracts/strategies/EigenStrategy.sol b/src/contracts/strategies/EigenStrategy.sol index a814fb552..6fed7b313 100644 --- a/src/contracts/strategies/EigenStrategy.sol +++ b/src/contracts/strategies/EigenStrategy.sol @@ -35,7 +35,9 @@ contract EigenStrategy is StrategyBase { IEigen public EIGEN; /// @notice Since this contract is designed to be initializable, the constructor simply sets `strategyManager`, the only immutable variable. - constructor(IStrategyManager _strategyManager) StrategyBase(_strategyManager) {} + constructor( + IStrategyManager _strategyManager + ) StrategyBase(_strategyManager) {} function initialize(IEigen _EIGEN, IERC20 _bEIGEN, IPauserRegistry _pauserRegistry) public virtual initializer { EIGEN = _EIGEN; diff --git a/src/contracts/strategies/StrategyBase.sol b/src/contracts/strategies/StrategyBase.sol index 25ac165ec..c907daa7a 100644 --- a/src/contracts/strategies/StrategyBase.sol +++ b/src/contracts/strategies/StrategyBase.sol @@ -69,7 +69,9 @@ contract StrategyBase is Initializable, Pausable, IStrategy { } /// @notice Since this contract is designed to be initializable, the constructor simply sets `strategyManager`, the only immutable variable. - constructor(IStrategyManager _strategyManager) { + constructor( + IStrategyManager _strategyManager + ) { strategyManager = _strategyManager; _disableInitializers(); } @@ -156,10 +158,7 @@ contract StrategyBase is Initializable, Pausable, IStrategy { // copy `totalShares` value to memory, prior to any change uint256 priorTotalShares = totalShares; - require( - amountShares <= priorTotalShares, - WithdrawalAmountExceedsDeposit() - ); + require(amountShares <= priorTotalShares, WithdrawalAmountExceedsDeposit()); /** * @notice calculation of amountToSend *mirrors* `sharesToUnderlying(amountShares)`, but is different since the `totalShares` has already @@ -225,7 +224,9 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * @return The amount of underlying tokens corresponding to the input `amountShares` * @dev Implementation for these functions in particular may vary significantly for different strategies */ - function sharesToUnderlyingView(uint256 amountShares) public view virtual override returns (uint256) { + function sharesToUnderlyingView( + uint256 amountShares + ) public view virtual override returns (uint256) { // account for virtual shares and balance uint256 virtualTotalShares = totalShares + SHARES_OFFSET; uint256 virtualTokenBalance = _tokenBalance() + BALANCE_OFFSET; @@ -240,7 +241,9 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * @return The amount of underlying tokens corresponding to the input `amountShares` * @dev Implementation for these functions in particular may vary significantly for different strategies */ - function sharesToUnderlying(uint256 amountShares) public view virtual override returns (uint256) { + function sharesToUnderlying( + uint256 amountShares + ) public view virtual override returns (uint256) { return sharesToUnderlyingView(amountShares); } @@ -251,7 +254,9 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * @return The amount of shares corresponding to the input `amountUnderlying` * @dev Implementation for these functions in particular may vary significantly for different strategies */ - function underlyingToSharesView(uint256 amountUnderlying) public view virtual returns (uint256) { + function underlyingToSharesView( + uint256 amountUnderlying + ) public view virtual returns (uint256) { // account for virtual shares and balance uint256 virtualTotalShares = totalShares + SHARES_OFFSET; uint256 virtualTokenBalance = _tokenBalance() + BALANCE_OFFSET; @@ -266,7 +271,9 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * @return The amount of shares corresponding to the input `amountUnderlying` * @dev Implementation for these functions in particular may vary significantly for different strategies */ - function underlyingToShares(uint256 amountUnderlying) external view virtual returns (uint256) { + function underlyingToShares( + uint256 amountUnderlying + ) external view virtual returns (uint256) { return underlyingToSharesView(amountUnderlying); } @@ -274,7 +281,9 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * @notice convenience function for fetching the current underlying value of all of the `user`'s shares in * this strategy. In contrast to `userUnderlying`, this function guarantees no state modifications */ - function userUnderlyingView(address user) external view virtual returns (uint256) { + function userUnderlyingView( + address user + ) external view virtual returns (uint256) { return sharesToUnderlyingView(shares(user)); } @@ -282,7 +291,9 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * @notice convenience function for fetching the current underlying value of all of the `user`'s shares in * this strategy. In contrast to `userUnderlyingView`, this function **may** make state modifications */ - function userUnderlying(address user) external virtual returns (uint256) { + function userUnderlying( + address user + ) external virtual returns (uint256) { return sharesToUnderlying(shares(user)); } @@ -290,7 +301,9 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * @notice convenience function for fetching the current total shares of `user` in this strategy, by * querying the `strategyManager` contract */ - function shares(address user) public view virtual returns (uint256) { + function shares( + address user + ) public view virtual returns (uint256) { return strategyManager.stakerStrategyShares(user, IStrategy(address(this))); } diff --git a/src/contracts/strategies/StrategyBaseTVLLimits.sol b/src/contracts/strategies/StrategyBaseTVLLimits.sol index 251ef2fc9..33520b3db 100644 --- a/src/contracts/strategies/StrategyBaseTVLLimits.sol +++ b/src/contracts/strategies/StrategyBaseTVLLimits.sol @@ -24,7 +24,9 @@ contract StrategyBaseTVLLimits is StrategyBase { event MaxTotalDepositsUpdated(uint256 previousValue, uint256 newValue); // solhint-disable-next-line no-empty-blocks - constructor(IStrategyManager _strategyManager) StrategyBase(_strategyManager) {} + constructor( + IStrategyManager _strategyManager + ) StrategyBase(_strategyManager) {} function initialize( uint256 _maxPerDeposit, @@ -56,10 +58,7 @@ contract StrategyBaseTVLLimits is StrategyBase { function _setTVLLimits(uint256 newMaxPerDeposit, uint256 newMaxTotalDeposits) internal { emit MaxPerDepositUpdated(maxPerDeposit, newMaxPerDeposit); emit MaxTotalDepositsUpdated(maxTotalDeposits, newMaxTotalDeposits); - require( - newMaxPerDeposit <= newMaxTotalDeposits, - MaxPerDepositExceedsMax() - ); + require(newMaxPerDeposit <= newMaxTotalDeposits, MaxPerDepositExceedsMax()); maxPerDeposit = newMaxPerDeposit; maxTotalDeposits = newMaxTotalDeposits; } diff --git a/src/contracts/strategies/StrategyFactory.sol b/src/contracts/strategies/StrategyFactory.sol index 501199886..6486f1be1 100644 --- a/src/contracts/strategies/StrategyFactory.sol +++ b/src/contracts/strategies/StrategyFactory.sol @@ -21,7 +21,9 @@ contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable IStrategyManager public immutable strategyManager; /// @notice Since this contract is designed to be initializable, the constructor simply sets the immutable variables. - constructor(IStrategyManager _strategyManager) { + constructor( + IStrategyManager _strategyManager + ) { strategyManager = _strategyManager; _disableInitializers(); } @@ -43,16 +45,11 @@ contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable * $dev Immense caution is warranted for non-standard ERC20 tokens, particularly "reentrant" tokens * like those that conform to ERC777. */ - function deployNewStrategy(IERC20 token) - external - onlyWhenNotPaused(PAUSED_NEW_STRATEGIES) - returns (IStrategy newStrategy) - { + function deployNewStrategy( + IERC20 token + ) external onlyWhenNotPaused(PAUSED_NEW_STRATEGIES) returns (IStrategy newStrategy) { require(!isBlacklisted[token], BlacklistedToken()); - require( - deployedStrategies[token] == IStrategy(address(0)), - StrategyAlreadyExists() - ); + require(deployedStrategies[token] == IStrategy(address(0)), StrategyAlreadyExists()); IStrategy strategy = IStrategy( address( new BeaconProxy( @@ -74,7 +71,9 @@ contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable * @notice Owner-only function to prevent strategies from being created for given tokens. * @param tokens An array of token addresses to blacklist. */ - function blacklistTokens(IERC20[] calldata tokens) external onlyOwner { + function blacklistTokens( + IERC20[] calldata tokens + ) external onlyOwner { IStrategy[] memory strategiesToRemove = new IStrategy[](tokens.length); uint256 removeIdx = 0; @@ -123,7 +122,9 @@ contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable /** * @notice Owner-only function to pass through a call to `StrategyManager.removeStrategiesFromDepositWhitelist` */ - function removeStrategiesFromWhitelist(IStrategy[] calldata strategiesToRemoveFromWhitelist) external onlyOwner { + function removeStrategiesFromWhitelist( + IStrategy[] calldata strategiesToRemoveFromWhitelist + ) external onlyOwner { strategyManager.removeStrategiesFromDepositWhitelist(strategiesToRemoveFromWhitelist); } @@ -132,7 +133,9 @@ contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable emit StrategySetForToken(token, strategy); } - function _setStrategyBeacon(IBeacon _strategyBeacon) internal { + function _setStrategyBeacon( + IBeacon _strategyBeacon + ) internal { emit StrategyBeaconModified(strategyBeacon, _strategyBeacon); strategyBeacon = _strategyBeacon; } diff --git a/src/contracts/token/BackingEigen.sol b/src/contracts/token/BackingEigen.sol index b88c9db96..6cbe5db45 100644 --- a/src/contracts/token/BackingEigen.sol +++ b/src/contracts/token/BackingEigen.sol @@ -27,7 +27,9 @@ contract BackingEigen is OwnableUpgradeable, ERC20VotesUpgradeable { /// @notice event emitted when the EIGEN token is backed event Backed(); - constructor(IERC20 _EIGEN) { + constructor( + IERC20 _EIGEN + ) { EIGEN = _EIGEN; _disableInitializers(); } @@ -35,7 +37,9 @@ contract BackingEigen is OwnableUpgradeable, ERC20VotesUpgradeable { /** * @notice An initializer function that sets initial values for the contract's state variables. */ - function initialize(address initialOwner) public initializer { + function initialize( + address initialOwner + ) public initializer { __Ownable_init(); __ERC20_init("Backing Eigen", "bEIGEN"); _transferOwnership(initialOwner); diff --git a/src/contracts/token/Eigen.sol b/src/contracts/token/Eigen.sol index 0181f9710..c385608bf 100644 --- a/src/contracts/token/Eigen.sol +++ b/src/contracts/token/Eigen.sol @@ -32,7 +32,9 @@ contract Eigen is OwnableUpgradeable, ERC20VotesUpgradeable { /// @notice event emitted when the transfer restrictions disabled event TransferRestrictionsDisabled(); - constructor(IERC20 _bEIGEN) { + constructor( + IERC20 _bEIGEN + ) { bEIGEN = _bEIGEN; _disableInitializers(); } @@ -121,7 +123,9 @@ contract Eigen is OwnableUpgradeable, ERC20VotesUpgradeable { /** * @notice This function allows bEIGEN holders to wrap their tokens into Eigen */ - function wrap(uint256 amount) external { + function wrap( + uint256 amount + ) external { require(bEIGEN.transferFrom(msg.sender, address(this), amount), "Eigen.wrap: bEIGEN transfer failed"); _transfer(address(this), msg.sender, amount); } @@ -129,7 +133,9 @@ contract Eigen is OwnableUpgradeable, ERC20VotesUpgradeable { /** * @notice This function allows Eigen holders to unwrap their tokens into bEIGEN */ - function unwrap(uint256 amount) external { + function unwrap( + uint256 amount + ) external { _transfer(msg.sender, address(this), amount); require(bEIGEN.transfer(msg.sender, amount), "Eigen.unwrap: bEIGEN transfer failed"); } From ed2ad0a41df889521b5afc9686cd7bf202c4fec1 Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Thu, 12 Sep 2024 13:00:10 -0400 Subject: [PATCH 03/47] fix: ci and bindings --- .github/workflows/certora-prover.yml | 2 +- .github/workflows/coverage.yml | 23 ++++++++++--------- .../scripts/core/verifyDelegationManager.sh | 2 +- certora/scripts/core/verifyStrategyManager.sh | 2 +- .../libraries/verifyStructuredLinkedList.sh | 2 +- certora/scripts/permissions/verifyPausable.sh | 2 +- certora/scripts/pods/verifyEigenPod.sh | 2 +- certora/scripts/pods/verifyEigenPodManager.sh | 2 +- .../scripts/strategies/verifyStrategyBase.sh | 2 +- pkg/bindings/AVSDirectory/binding.go | 4 ++-- pkg/bindings/AVSDirectoryStorage/binding.go | 2 +- pkg/bindings/BackingEigen/binding.go | 2 +- pkg/bindings/BeaconChainProofs/binding.go | 4 ++-- pkg/bindings/BytesLib/binding.go | 4 ++-- pkg/bindings/DelegationManager/binding.go | 4 ++-- .../DelegationManagerStorage/binding.go | 2 +- pkg/bindings/EIP1271SignatureUtils/binding.go | 4 ++-- pkg/bindings/Eigen/binding.go | 2 +- pkg/bindings/EigenPod/binding.go | 4 ++-- pkg/bindings/EigenPodManager/binding.go | 4 ++-- .../EigenPodManagerStorage/binding.go | 2 +- pkg/bindings/EigenPodStorage/binding.go | 2 +- pkg/bindings/EigenStrategy/binding.go | 4 ++-- pkg/bindings/Endian/binding.go | 2 +- pkg/bindings/IAVSDirectory/binding.go | 2 +- pkg/bindings/IDelegationManager/binding.go | 2 +- pkg/bindings/IEigenPod/binding.go | 2 +- pkg/bindings/IEigenPodManager/binding.go | 2 +- pkg/bindings/IPausable/binding.go | 2 +- pkg/bindings/IPauserRegistry/binding.go | 2 +- pkg/bindings/IRewardsCoordinator/binding.go | 2 +- pkg/bindings/IStrategy/binding.go | 2 +- pkg/bindings/IStrategyFactory/binding.go | 2 +- pkg/bindings/IStrategyManager/binding.go | 2 +- pkg/bindings/Merkle/binding.go | 4 ++-- pkg/bindings/Pausable/binding.go | 4 ++-- pkg/bindings/PauserRegistry/binding.go | 4 ++-- pkg/bindings/RewardsCoordinator/binding.go | 4 ++-- .../RewardsCoordinatorStorage/binding.go | 2 +- pkg/bindings/StrategyBase/binding.go | 4 ++-- pkg/bindings/StrategyBaseTVLLimits/binding.go | 4 ++-- pkg/bindings/StrategyFactory/binding.go | 4 ++-- .../StrategyFactoryStorage/binding.go | 2 +- pkg/bindings/StrategyManager/binding.go | 4 ++-- .../StrategyManagerStorage/binding.go | 2 +- pkg/bindings/StructuredLinkedList/binding.go | 2 +- 46 files changed, 73 insertions(+), 72 deletions(-) diff --git a/.github/workflows/certora-prover.yml b/.github/workflows/certora-prover.yml index f8556b756..39a62830a 100644 --- a/.github/workflows/certora-prover.yml +++ b/.github/workflows/certora-prover.yml @@ -50,7 +50,7 @@ jobs: - name: Install solc run: | pip install solc-select - solc-select use 0.8.12 --always-install + solc-select use 0.8.27 --always-install - name: Verify rule ${{ matrix.params }} run: | bash ${{ matrix.params }} diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 6b57199f6..71f7eeb86 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -26,19 +26,20 @@ jobs: id: get_issue_number with: script: | - if (context.issue && context.issue.number) { - // Return issue number if present - return context.issue.number; + let issue_number; + // Attempt to find a pull request associated with the commit + const pullRequests = await github.rest.repos.listPullRequestsAssociatedWithCommit({ + commit_sha: context.sha, + owner: context.repo.owner, + repo: context.repo.repo, + }); + + if (pullRequests.data.length > 0) { + issue_number = pullRequests.data[0].number; } else { - // Otherwise return issue number from commit - return ( - await github.rest.repos.listPullRequestsAssociatedWithCommit({ - commit_sha: context.sha, - owner: context.repo.owner, - repo: context.repo.repo, - }) - ).data[0].number; + throw new Error('No associated issue or pull request found.'); } + return issue_number; result-encoding: string - name: Checkout code uses: actions/checkout@v2 diff --git a/certora/scripts/core/verifyDelegationManager.sh b/certora/scripts/core/verifyDelegationManager.sh index 678b5a37c..dfec2c904 100644 --- a/certora/scripts/core/verifyDelegationManager.sh +++ b/certora/scripts/core/verifyDelegationManager.sh @@ -3,7 +3,7 @@ then RULE="--rule $2" fi -solc-select use 0.8.12 +solc-select use 0.8.27 certoraRun certora/harnesses/DelegationManagerHarness.sol \ lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol lib/openzeppelin-contracts/contracts/mocks/ERC1271WalletMock.sol \ diff --git a/certora/scripts/core/verifyStrategyManager.sh b/certora/scripts/core/verifyStrategyManager.sh index 7f3b1c5d2..5695ab785 100644 --- a/certora/scripts/core/verifyStrategyManager.sh +++ b/certora/scripts/core/verifyStrategyManager.sh @@ -3,7 +3,7 @@ then RULE="--rule $2" fi -solc-select use 0.8.12 +solc-select use 0.8.27 certoraRun certora/harnesses/StrategyManagerHarness.sol \ lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol lib/openzeppelin-contracts/contracts/mocks/ERC1271WalletMock.sol \ diff --git a/certora/scripts/libraries/verifyStructuredLinkedList.sh b/certora/scripts/libraries/verifyStructuredLinkedList.sh index c03c593d4..25615e4e0 100644 --- a/certora/scripts/libraries/verifyStructuredLinkedList.sh +++ b/certora/scripts/libraries/verifyStructuredLinkedList.sh @@ -3,7 +3,7 @@ then RULE="--rule $2" fi -solc-select use 0.8.12 +solc-select use 0.8.27 certoraRun certora/harnesses/StructuredLinkedListHarness.sol \ --verify StructuredLinkedListHarness:certora/specs/libraries/StructuredLinkedList.spec \ diff --git a/certora/scripts/permissions/verifyPausable.sh b/certora/scripts/permissions/verifyPausable.sh index c9d23f965..29cc4c1ad 100644 --- a/certora/scripts/permissions/verifyPausable.sh +++ b/certora/scripts/permissions/verifyPausable.sh @@ -3,7 +3,7 @@ then RULE="--rule $2" fi -solc-select use 0.8.12 +solc-select use 0.8.27 certoraRun certora/harnesses/PausableHarness.sol \ src/contracts/permissions/PauserRegistry.sol \ diff --git a/certora/scripts/pods/verifyEigenPod.sh b/certora/scripts/pods/verifyEigenPod.sh index d4bc140a8..e4d7fedb8 100644 --- a/certora/scripts/pods/verifyEigenPod.sh +++ b/certora/scripts/pods/verifyEigenPod.sh @@ -3,7 +3,7 @@ then RULE="--rule $2" fi -# solc-select use 0.8.12 +# solc-select use 0.8.27 # certoraRun certora/harnesses/EigenPodHarness.sol \ # src/contracts/core/DelegationManager.sol src/contracts/pods/EigenPodManager.sol \ diff --git a/certora/scripts/pods/verifyEigenPodManager.sh b/certora/scripts/pods/verifyEigenPodManager.sh index 428f89ba3..9b4a62106 100644 --- a/certora/scripts/pods/verifyEigenPodManager.sh +++ b/certora/scripts/pods/verifyEigenPodManager.sh @@ -3,7 +3,7 @@ then RULE="--rule $2" fi -# solc-select use 0.8.12 +# solc-select use 0.8.27 # certoraRun certora/harnesses/EigenPodManagerHarness.sol \ # src/contracts/core/DelegationManager.sol src/contracts/pods/EigenPod.sol src/contracts/strategies/StrategyBase.sol src/contracts/core/StrategyManager.sol \ diff --git a/certora/scripts/strategies/verifyStrategyBase.sh b/certora/scripts/strategies/verifyStrategyBase.sh index 5c3d2683f..58514d0dc 100644 --- a/certora/scripts/strategies/verifyStrategyBase.sh +++ b/certora/scripts/strategies/verifyStrategyBase.sh @@ -3,7 +3,7 @@ then RULE="--rule $2" fi -solc-select use 0.8.12 +solc-select use 0.8.27 certoraRun src/contracts/strategies/StrategyBase.sol \ lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol \ diff --git a/pkg/bindings/AVSDirectory/binding.go b/pkg/bindings/AVSDirectory/binding.go index e91d51eb1..507bc07ca 100644 --- a/pkg/bindings/AVSDirectory/binding.go +++ b/pkg/bindings/AVSDirectory/binding.go @@ -38,8 +38,8 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryMetaData contains all meta data concerning the AVSDirectory contract. var AVSDirectoryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"enumIAVSDirectory.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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", - Bin: "0x60c06040523480156200001157600080fd5b5060405162001f7838038062001f78833981016040819052620000349162000118565b6001600160a01b0381166080526200004b62000056565b504660a0526200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a051611e01620001776000396000610ea801526000818161032401526109830152611e016000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b14610359578063f698da251461036c578063fabc1cbc1461037457600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a6101553660046118ab565b610387565b005b61015a61016a3660046118cf565b610443565b61015a61017d3660046118e8565b610582565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611929565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b610228610208366004611955565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906119a4565b61015a6106ac565b6101ea61024b3660046119cc565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a610773565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba366004611a5f565b610787565b6101a96102cd366004611b46565b610b1a565b61015a6102e03660046118ab565b610bd3565b61015a6102f3366004611b8c565b610d3c565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000000000000000000000000000000000000000000081565b61015a6103543660046118cf565b610d83565b61015a6103673660046118ab565b610e2e565b6101a9610ea4565b61015a6103823660046118cf565b610ee2565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fe9190611bfe565b6001600160a01b0316336001600160a01b0316146104375760405162461bcd60e51b815260040161042e90611c1b565b60405180910390fd5b6104408161103e565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561048b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104af9190611c65565b6104cb5760405162461bcd60e51b815260040161042e90611c87565b606654818116146105445760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105a25750600054600160ff909116105b806105bc5750303b1580156105bc575060005460ff166001145b61061f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161042e565b6000805460ff191660011790558015610642576000805461ff0019166101001790555b61064c8383611135565b61065461121f565b609755610660846112b6565b80156106a6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190611c65565b6107345760405162461bcd60e51b815260040161042e90611c87565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b61077b611308565b61078560006112b6565b565b606654600090600190811614156107dc5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b42826040015110156108445760405162461bcd60e51b815260206004820152603e6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161042e565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561087e5761087e61198e565b14156108e05760405162461bcd60e51b815260206004820152603f6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161042e565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156109645760405162461bcd60e51b81526020600482015260366024820152600080516020611dac8339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161042e565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611c65565b610a645760405162461bcd60e51b815260206004820152604d6024820152600080516020611dac83398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161042e565b6000610a7a843385602001518660400151610b1a565b9050610a8b84828560000151611362565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b0c91906119a4565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610b90610ea4565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b60665460009060019081161415610c285760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161042e565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610c6257610c6261198e565b14610cd55760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161042e565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610d3091906119a4565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610d77929190611ccf565b60405180910390a25050565b33600090815260996020908152604080832084845290915290205460ff1615610e085760405162461bcd60e51b815260206004820152603160248201527f4156534469726563746f72792e63616e63656c53616c743a2063616e6e6f742060448201527018d85b98d95b081cdc195b9d081cd85b1d607a1b606482015260840161042e565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b610e36611308565b6001600160a01b038116610e9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042e565b610440816112b6565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ed5575060975490565b610edd61121f565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190611bfe565b6001600160a01b0316336001600160a01b031614610f895760405162461bcd60e51b815260040161042e90611c1b565b6066541981196066541916146110075760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161042e565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610577565b6001600160a01b0381166110cc5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161042e565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561115657506001600160a01b03821615155b6111d85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161042e565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261121b8261103e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107855760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161042e565b6001600160a01b0383163b1561148157604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906113a29086908690600401611cfe565b602060405180830381865afa1580156113bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e39190611d5b565b6001600160e01b0319161461147c5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161042e565b505050565b826001600160a01b03166114958383611521565b6001600160a01b03161461147c5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161042e565b60008060006115308585611545565b9150915061153d816115b5565b509392505050565b60008082516041141561157c5760208301516040840151606085015160001a61157087828585611770565b945094505050506115ae565b8251604014156115a6576020830151604084015161159b86838361185d565b9350935050506115ae565b506000905060025b9250929050565b60008160048111156115c9576115c961198e565b14156115d25750565b60018160048111156115e6576115e661198e565b14156116345760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161042e565b60028160048111156116485761164861198e565b14156116965760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161042e565b60038160048111156116aa576116aa61198e565b14156117035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161042e565b60048160048111156117175761171761198e565b14156104405760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161042e565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117a75750600090506003611854565b8460ff16601b141580156117bf57508460ff16601c14155b156117d05750600090506004611854565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611824573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184d57600060019250925050611854565b9150600090505b94509492505050565b6000806001600160ff1b0383168161187a60ff86901c601b611d85565b905061188887828885611770565b935093505050935093915050565b6001600160a01b038116811461044057600080fd5b6000602082840312156118bd57600080fd5b81356118c881611896565b9392505050565b6000602082840312156118e157600080fd5b5035919050565b6000806000606084860312156118fd57600080fd5b833561190881611896565b9250602084013561191881611896565b929592945050506040919091013590565b6000806040838503121561193c57600080fd5b823561194781611896565b946020939093013593505050565b6000806040838503121561196857600080fd5b823561197381611896565b9150602083013561198381611896565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106119c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156119de57600080fd5b813560ff811681146118c857600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611a2857611a286119ef565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a5757611a576119ef565b604052919050565b60008060408385031215611a7257600080fd5b8235611a7d81611896565b915060208381013567ffffffffffffffff80821115611a9b57600080fd5b9085019060608288031215611aaf57600080fd5b611ab7611a05565b823582811115611ac657600080fd5b8301601f81018913611ad757600080fd5b803583811115611ae957611ae96119ef565b611afb601f8201601f19168701611a2e565b93508084528986828401011115611b1157600080fd5b808683018786013760008682860101525050818152838301358482015260408301356040820152809450505050509250929050565b60008060008060808587031215611b5c57600080fd5b8435611b6781611896565b93506020850135611b7781611896565b93969395505050506040820135916060013590565b60008060208385031215611b9f57600080fd5b823567ffffffffffffffff80821115611bb757600080fd5b818501915085601f830112611bcb57600080fd5b813581811115611bda57600080fd5b866020828501011115611bec57600080fd5b60209290920196919550909350505050565b600060208284031215611c1057600080fd5b81516118c881611896565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611c7757600080fd5b815180151581146118c857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015611d3257858101830151858201606001528201611d16565b81811115611d44576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215611d6d57600080fd5b81516001600160e01b0319811681146118c857600080fd5b60008219821115611da657634e487b7160e01b600052601160045260246000fd5b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f41a26469706673582212203078326ec29ef6e4c0629c3db8b9232b52ccd0d073d4926089bdbc0d9eef3c0f64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"enumIAVSDirectory.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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"InvalidAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", + Bin: "0x60c060405234801561001057600080fd5b50604051611a17380380611a1783398101604081905261002f9161010e565b6001600160a01b03811660805261004461004e565b504660a05261013e565b600054610100900460ff16156100ba5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010c576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561012057600080fd5b81516001600160a01b038116811461013757600080fd5b9392505050565b60805160a0516118ad61016a6000396000610bff015260008181610324015261085f01526118ad6000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b1461037a578063f698da251461038d578063fabc1cbc1461039557600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a610155366004611406565b6103a8565b005b61015a61016a36600461142a565b61045c565b61015a61017d366004611443565b610547565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611484565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b6102286102083660046114b0565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906114ff565b61015a610676565b6101ea61024b366004611527565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a61073e565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba3660046115ba565b610752565b6101a96102cd3660046116af565b61099d565b61015a6102e0366004611406565b610a56565b61015a6102f33660046116f5565b610b3e565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000000000000000000000000000000000000000000081565b61015a61035436600461142a565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b61015a610388366004611406565b610b85565b6101a9610bfb565b61015a6103a336600461142a565b610c38565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041f9190611769565b6001600160a01b0316336001600160a01b0316146104505760405163794821ff60e01b815260040160405180910390fd5b61045981610d40565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190611786565b6104e557604051631d77d47760e21b815260040160405180910390fd5b606654818116146105095760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105675750600054600160ff909116105b806105815750303b158015610581575060005460ff166001145b6105e95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561060c576000805461ff0019166101001790555b6106168383610dd0565b61061e610e55565b60975561062a84610eec565b8015610670576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e29190611786565b6106ff57604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610746610f3e565b6107506000610eec565b565b60665460009060019081160361077b5760405163840a48d560e01b815260040160405180910390fd5b42826040015110156107a057604051630819bdcd60e01b815260040160405180910390fd5b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156107da576107da6114e9565b036107f85760405163ccea9e6f60e01b815260040160405180910390fd5b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff161561084057604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca9190611786565b6108e7576040516325ec6c1f60e01b815260040160405180910390fd5b60006108fd84338560200151866040015161099d565b905061090e84828560000151610f98565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b419161098f91906114ff565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610a13610bfb565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b606654600090600190811603610a7f5760405163840a48d560e01b815260040160405180910390fd5b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610ab957610ab96114e9565b14610ad75760405163ccea9e6f60e01b815260040160405180910390fd5b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b3291906114ff565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610b799291906117a8565b60405180910390a25050565b610b8d610f3e565b6001600160a01b038116610bf25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105e0565b61045981610eec565b60007f00000000000000000000000000000000000000000000000000000000000000004603610c2b575060975490565b610c33610e55565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caf9190611769565b6001600160a01b0316336001600160a01b031614610ce05760405163794821ff60e01b815260040160405180910390fd5b606654198119606654191614610d095760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161053c565b6001600160a01b038116610d67576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b0316158015610df157506001600160a01b03821615155b610e0e576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610e5182610d40565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e0565b6001600160a01b0383163b1561104657604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90610fd890869086906004016117d7565b602060405180830381865afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611019919061182c565b6001600160e01b031916146110415760405163026aa43360e31b815260040160405180910390fd5b505050565b826001600160a01b031661105a8383611081565b6001600160a01b03161461104157604051636d20896160e11b815260040160405180910390fd5b600080600061109085856110a7565b9150915061109d81611115565b5090505b92915050565b60008082516041036110dd5760208301516040840151606085015160001a6110d1878285856112cb565b9450945050505061110e565b825160400361110657602083015160408401516110fb8683836113b8565b93509350505061110e565b506000905060025b9250929050565b6000816004811115611129576111296114e9565b036111315750565b6001816004811115611145576111456114e9565b036111925760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016105e0565b60028160048111156111a6576111a66114e9565b036111f35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016105e0565b6003816004811115611207576112076114e9565b0361125f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016105e0565b6004816004811115611273576112736114e9565b036104595760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016105e0565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561130257506000905060036113af565b8460ff16601b1415801561131a57508460ff16601c14155b1561132b57506000905060046113af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561137f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a8576000600192509250506113af565b9150600090505b94509492505050565b6000806001600160ff1b038316816113d560ff86901c601b611856565b90506113e3878288856112cb565b935093505050935093915050565b6001600160a01b038116811461045957600080fd5b60006020828403121561141857600080fd5b8135611423816113f1565b9392505050565b60006020828403121561143c57600080fd5b5035919050565b60008060006060848603121561145857600080fd5b8335611463816113f1565b92506020840135611473816113f1565b929592945050506040919091013590565b6000806040838503121561149757600080fd5b82356114a2816113f1565b946020939093013593505050565b600080604083850312156114c357600080fd5b82356114ce816113f1565b915060208301356114de816113f1565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061152157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561153957600080fd5b813560ff8116811461142357600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156115835761158361154a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156115b2576115b261154a565b604052919050565b600080604083850312156115cd57600080fd5b82356115d8816113f1565b9150602083013567ffffffffffffffff8111156115f457600080fd5b83016060818603121561160657600080fd5b61160e611560565b813567ffffffffffffffff81111561162557600080fd5b8201601f8101871361163657600080fd5b803567ffffffffffffffff8111156116505761165061154a565b611663601f8201601f1916602001611589565b81815288602083850101111561167857600080fd5b8160208401602083013760006020928201830152835283810135908301525060409182013591810191909152919491935090915050565b600080600080608085870312156116c557600080fd5b84356116d0816113f1565b935060208501356116e0816113f1565b93969395505050506040820135916060013590565b6000806020838503121561170857600080fd5b823567ffffffffffffffff81111561171f57600080fd5b8301601f8101851361173057600080fd5b803567ffffffffffffffff81111561174757600080fd5b85602082840101111561175957600080fd5b6020919091019590945092505050565b60006020828403121561177b57600080fd5b8151611423816113f1565b60006020828403121561179857600080fd5b8151801515811461142357600080fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b828152604060208201526000825180604084015260005b8181101561180b57602081860181015160608684010152016117ee565b506000606082850101526060601f19601f8301168401019150509392505050565b60006020828403121561183e57600080fd5b81516001600160e01b03198116811461142357600080fd5b808201808211156110a157634e487b7160e01b600052601160045260246000fdfea2646970667358221220ec5dda6065c56e8f281dcafe4a6a7573434268c5ff2f6b31caeff6628bc8fa5664736f6c634300081b0033", } // 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 2070a8e69..795a84873 100644 --- a/pkg/bindings/AVSDirectoryStorage/binding.go +++ b/pkg/bindings/AVSDirectoryStorage/binding.go @@ -38,7 +38,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryStorageMetaData contains all meta data concerning the AVSDirectoryStorage contract. var AVSDirectoryStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.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\":\"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\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"structISignatureUtils.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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.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\":\"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\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"structISignatureUtils.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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", } // AVSDirectoryStorageABI 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 7adf41315..14eef1436 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\":\"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\":\"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\":\"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\":\"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: "0x60a06040523480156200001157600080fd5b5060405162002b4438038062002b44833981016040819052620000349162000113565b6001600160a01b0381166080526200004b62000052565b5062000145565b600054610100900460ff1615620000bf5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161462000111576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012657600080fd5b81516001600160a01b03811681146200013e57600080fd5b9392505050565b6080516129c76200017d6000396000818161056f01528181610c5b01528181610c8601528181610cb10152610cd201526129c76000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806384b0196e11610125578063b8c25594116100ad578063dd62ed3e1161007c578063dd62ed3e146104ff578063eb415f4514610512578063f1127ed81461051a578063f2fde38b14610557578063fdc371ce1461056a57600080fd5b8063b8c25594146104b3578063c3cda520146104c6578063c4d66de8146104d9578063d505accf146104ec57600080fd5b806395d89b41116100f457806395d89b41146104685780639ab24eb0146104705780639aec4bae14610483578063a457c2d71461048d578063a9059cbb146104a057600080fd5b806384b0196e1461040a5780638da5cb5b146104255780638e539e8c1461043657806391ddadf41461044957600080fd5b80633a46b1a8116101a85780636fcfff45116101775780636fcfff451461037a57806370a08231146103a2578063715018a6146103cb57806378aa33ba146103d35780637ecebe00146103f757600080fd5b80633a46b1a8146102e65780634bf5d7e9146102f9578063587cde1e146103235780635c19a95c1461036757600080fd5b80631ffacdef116101ef5780631ffacdef1461029457806323b872dd146102a9578063313ce567146102bc5780633644e515146102cb57806339509351146102d357600080fd5b80630455e6941461022157806306fdde031461025a578063095ea7b31461026f57806318160ddd14610282575b600080fd5b61024561022f366004612548565b6101316020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610262610591565b60405161025191906125b0565b61024561027d3660046125c3565b610623565b6067545b604051908152602001610251565b6102a76102a23660046125ed565b61063b565b005b6102456102b7366004612629565b610651565b60405160128152602001610251565b610286610675565b6102456102e13660046125c3565b610684565b6102866102f43660046125c3565b6106a6565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b6020820152610262565b61034f610331366004612548565b6001600160a01b03908116600090815260fe60205260409020541690565b6040516001600160a01b039091168152602001610251565b6102a7610375366004612548565b610730565b61038d610388366004612548565b61073d565b60405163ffffffff9091168152602001610251565b6102866103b0366004612548565b6001600160a01b031660009081526065602052604090205490565b6102a7610765565b6102456103e1366004612548565b6101326020526000908152604090205460ff1681565b610286610405366004612548565b610779565b610412610797565b6040516102519796959493929190612665565b6033546001600160a01b031661034f565b6102866104443660046126fb565b610835565b61045161089d565b60405165ffffffffffff9091168152602001610251565b6102626108a8565b61028661047e366004612548565b6108b7565b6102866101305481565b61024561049b3660046125c3565b610939565b6102456104ae3660046125c3565b6109b4565b6102a76104c13660046125ed565b6109c2565b6102a76104d4366004612725565b6109d4565b6102a76104e7366004612548565b610b0a565b6102a76104fa36600461277d565b610dc9565b61028661050d3660046127e7565b610f2d565b6102a7610f58565b61052d61052836600461281a565b611028565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610251565b6102a7610565366004612548565b6110ac565b61034f7f000000000000000000000000000000000000000000000000000000000000000081565b6060606880546105a09061284f565b80601f01602080910402602001604051908101604052809291908181526020018280546105cc9061284f565b80156106195780601f106105ee57610100808354040283529160200191610619565b820191906000526020600020905b8154815290600101906020018083116105fc57829003601f168201915b5050505050905090565b600033610631818585611122565b5060019392505050565b610643611246565b61064d82826112a0565b5050565b60003361065f858285611301565b61066a85858561137b565b506001949350505050565b600061067f611537565b905090565b6000336106318185856106978383610f2d565b6106a1919061289a565b611122565b60006106b061089d565b65ffffffffffff1682106107075760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260ff602052604090206107299083611541565b9392505050565b61073a338261162a565b50565b6001600160a01b038116600090815260ff602052604081205461075f906116a4565b92915050565b61076d611246565b610777600061170d565b565b6001600160a01b038116600090815260cb602052604081205461075f565b6000606080600080600060606097546000801b1480156107b75750609854155b6107fb5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016106fe565b61080361175f565b61080b61176e565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061083f61089d565b65ffffffffffff1682106108915760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064016106fe565b61075f61010083611541565b600061067f4261177d565b6060606980546105a09061284f565b6001600160a01b038116600090815260ff60205260408120548015610926576001600160a01b038316600090815260ff6020526040902080546000198301908110610904576109046128b2565b60009182526020909120015464010000000090046001600160e01b0316610929565b60005b6001600160e01b03169392505050565b600033816109478286610f2d565b9050838110156109a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106fe565b61066a8286868403611122565b60003361063181858561137b565b6109ca611246565b61064d82826117e4565b83421115610a245760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016106fe565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a9e90610a969060a0016040516020818303038152906040528051906020012061183d565b85858561186a565b9050610aa981611892565b8614610af75760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016106fe565b610b01818861162a565b50505050505050565b600054610100900460ff1615808015610b2a5750600054600160ff909116105b80610b445750303b158015610b44575060005460ff166001145b610ba75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106fe565b6000805460ff191660011790558015610bca576000805461ff0019166101001790555b610bd26118ba565b610c1f6040518060400160405280600d81526020016c2130b1b5b4b7339022b4b3b2b760991b815250604051806040016040528060068152602001653122a4a3a2a760d11b8152506118e9565b610c288261170d565b610c4f604051806040016040528060068152602001653122a4a3a2a760d11b81525061191a565b60001961013055610c817f000000000000000000000000000000000000000000000000000000000000000060016112a0565b610cac7f000000000000000000000000000000000000000000000000000000000000000060016117e4565b610d577f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5291906128c8565b611964565b6040517fb7c23c1e2e36f298e9879a88ecfcd07e28fbb439bcfa9c78ca1363ca14370d2690600090a1801561064d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b83421115610e195760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106fe565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610e488c611892565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610ea38261183d565b90506000610eb38287878761186a565b9050896001600160a01b0316816001600160a01b031614610f165760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106fe565b610f218a8a8a611122565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b610f60611246565b6000196101305414610ff75760405162461bcd60e51b815260206004820152605460248201527f4261636b696e67456967656e2e64697361626c655472616e736665725265737460448201527f72696374696f6e733a207472616e73666572207265737472696374696f6e7320606482015273185c9948185b1c9958591e48191a5cd8589b195960621b608482015260a4016106fe565b60006101308190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b60408051808201909152600080825260208201526001600160a01b038316600090815260ff60205260409020805463ffffffff841690811061106c5761106c6128b2565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6110b4611246565b6001600160a01b0381166111195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106fe565b61073a8161170d565b6001600160a01b0383166111845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106fe565b6001600160a01b0382166111e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106fe565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6033546001600160a01b031633146107775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106fe565b6001600160a01b03821660008181526101316020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b600061130d8484610f2d565b9050600019811461137557818110156113685760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106fe565b6113758484848403611122565b50505050565b6001600160a01b0383166113df5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106fe565b6001600160a01b0382166114415760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106fe565b61144c8383836119ef565b6001600160a01b038316600090815260656020526040902054818110156114c45760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106fe565b6001600160a01b0380851660008181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115249086815260200190565b60405180910390a3611375848484611acd565b600061067f611aff565b81546000908181600581111561159b57600061155c84611b73565b61156690856128e1565b600088815260209020909150869082015463ffffffff16111561158b57809150611599565b61159681600161289a565b92505b505b808210156115e85760006115af8383611c58565b600088815260209020909150869082015463ffffffff1611156115d4578091506115e2565b6115df81600161289a565b92505b5061159b565b8015611614576000868152602090208101600019015464010000000090046001600160e01b0316611617565b60005b6001600160e01b03169695505050505050565b6001600160a01b03828116600081815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611375828483611c73565b600063ffffffff8211156117095760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016106fe565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060609980546105a09061284f565b6060609a80546105a09061284f565b600065ffffffffffff8211156117095760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b60648201526084016106fe565b6001600160a01b03821660008181526101326020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b91016112f5565b600061075f61184a611537565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600061187b87878787611db0565b9150915061188881611e74565b5095945050505050565b6001600160a01b038116600090815260cb602052604090208054600181018255905b50919050565b600054610100900460ff166118e15760405162461bcd60e51b81526004016106fe906128f8565b610777611fc2565b600054610100900460ff166119105760405162461bcd60e51b81526004016106fe906128f8565b61064d8282611ff2565b600054610100900460ff166119415760405162461bcd60e51b81526004016106fe906128f8565b61073a81604051806040016040528060018152602001603160f81b815250612040565b61196e828261209d565b6067546001600160e01b0310156119e05760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016106fe565b6113756101006121728361217e565b610130544211611ac8576001600160a01b0383166000908152610131602052604090205460ff1680611a3a57506001600160a01b0382166000908152610132602052604090205460ff165b80611a4c57506001600160a01b038316155b611ac85760405162461bcd60e51b815260206004820152604160248201527f4261636b696e67456967656e2e5f6265666f7265546f6b656e5472616e73666560448201527f723a2066726f6d206f7220746f206d7573742062652077686974656c697374656064820152601960fa1b608482015260a4016106fe565b505050565b6001600160a01b03838116600090815260fe6020526040808220548584168352912054611ac892918216911683611c73565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b2a6122f3565b611b3261234c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600081611b8257506000919050565b60006001611b8f8461237d565b901c6001901b90506001818481611ba857611ba8612943565b048201901c90506001818481611bc057611bc0612943565b048201901c90506001818481611bd857611bd8612943565b048201901c90506001818481611bf057611bf0612943565b048201901c90506001818481611c0857611c08612943565b048201901c90506001818481611c2057611c20612943565b048201901c90506001818481611c3857611c38612943565b048201901c905061072981828581611c5257611c52612943565b04612411565b6000611c676002848418612959565b6107299084841661289a565b816001600160a01b0316836001600160a01b031614158015611c955750600081115b15611ac8576001600160a01b03831615611d23576001600160a01b038316600090815260ff602052604081208190611cd0906124278561217e565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611d18929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611ac8576001600160a01b038216600090815260ff602052604081208190611d59906121728561217e565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611da1929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611de75750600090506003611e6b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611e3b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611e6457600060019250925050611e6b565b9150600090505b94509492505050565b6000816004811115611e8857611e8861297b565b1415611e915750565b6001816004811115611ea557611ea561297b565b1415611ef35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106fe565b6002816004811115611f0757611f0761297b565b1415611f555760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106fe565b6003816004811115611f6957611f6961297b565b141561073a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106fe565b600054610100900460ff16611fe95760405162461bcd60e51b81526004016106fe906128f8565b6107773361170d565b600054610100900460ff166120195760405162461bcd60e51b81526004016106fe906128f8565b815161202c90606890602085019061249c565b508051611ac890606990602084019061249c565b600054610100900460ff166120675760405162461bcd60e51b81526004016106fe906128f8565b815161207a90609990602085019061249c565b50805161208e90609a90602084019061249c565b50506000609781905560985550565b6001600160a01b0382166120f35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106fe565b6120ff600083836119ef565b8060676000828254612111919061289a565b90915550506001600160a01b0382166000818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361064d60008383611acd565b6000610729828461289a565b825460009081908181156121cb5760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b031660208201526121e0565b60408051808201909152600080825260208201525b905080602001516001600160e01b0316935061220084868863ffffffff16565b925060008211801561222a575061221561089d565b65ffffffffffff16816000015163ffffffff16145b1561226f5761223883612433565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff9092169190911790556122e9565b86604051806040016040528061229361228661089d565b65ffffffffffff166116a4565b63ffffffff1681526020016122a786612433565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6000806122fe61175f565b805190915015612315578051602090910120919050565b60975480156123245792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b60008061235761176e565b80519091501561236e578051602090910120919050565b60985480156123245792915050565b600080608083901c1561239257608092831c92015b604083901c156123a457604092831c92015b602083901c156123b657602092831c92015b601083901c156123c857601092831c92015b600883901c156123da57600892831c92015b600483901c156123ec57600492831c92015b600283901c156123fe57600292831c92015b600183901c1561075f5760010192915050565b60008183106124205781610729565b5090919050565b600061072982846128e1565b60006001600160e01b038211156117095760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016106fe565b8280546124a89061284f565b90600052602060002090601f0160209004810192826124ca5760008555612510565b82601f106124e357805160ff1916838001178555612510565b82800160010185558215612510579182015b828111156125105782518255916020019190600101906124f5565b506117099291505b808211156117095760008155600101612518565b80356001600160a01b038116811461254357600080fd5b919050565b60006020828403121561255a57600080fd5b6107298261252c565b6000815180845260005b818110156125895760208185018101518683018201520161256d565b8181111561259b576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006107296020830184612563565b600080604083850312156125d657600080fd5b6125df8361252c565b946020939093013593505050565b6000806040838503121561260057600080fd5b6126098361252c565b91506020830135801515811461261e57600080fd5b809150509250929050565b60008060006060848603121561263e57600080fd5b6126478461252c565b92506126556020850161252c565b9150604084013590509250925092565b60ff60f81b881681526000602060e08184015261268560e084018a612563565b8381036040850152612697818a612563565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156126e9578351835292840192918401916001016126cd565b50909c9b505050505050505050505050565b60006020828403121561270d57600080fd5b5035919050565b803560ff8116811461254357600080fd5b60008060008060008060c0878903121561273e57600080fd5b6127478761252c565b9550602087013594506040870135935061276360608801612714565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561279857600080fd5b6127a18861252c565b96506127af6020890161252c565b955060408801359450606088013593506127cb60808901612714565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156127fa57600080fd5b6128038361252c565b91506128116020840161252c565b90509250929050565b6000806040838503121561282d57600080fd5b6128368361252c565b9150602083013563ffffffff8116811461261e57600080fd5b600181811c9082168061286357607f821691505b602082108114156118b457634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156128ad576128ad612884565b500190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156128da57600080fd5b5051919050565b6000828210156128f3576128f3612884565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261297657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea26469706673582212208696d7fc75edc692b65d65df10ce07940ca4f7436f6a38a536db45f6904769aa64736f6c634300080c0033", + Bin: "0x60a060405234801561001057600080fd5b50604051612b9c380380612b9c83398101604081905261002f91610109565b6001600160a01b03811660805261004461004a565b50610139565b600054610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614610107576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011b57600080fd5b81516001600160a01b038116811461013257600080fd5b9392505050565b608051612a2c6101706000396000818161056f01528181610c5701528181610c8201528181610cad0152610cce0152612a2c6000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806384b0196e11610125578063b8c25594116100ad578063dd62ed3e1161007c578063dd62ed3e146104ff578063eb415f4514610512578063f1127ed81461051a578063f2fde38b14610557578063fdc371ce1461056a57600080fd5b8063b8c25594146104b3578063c3cda520146104c6578063c4d66de8146104d9578063d505accf146104ec57600080fd5b806395d89b41116100f457806395d89b41146104685780639ab24eb0146104705780639aec4bae14610483578063a457c2d71461048d578063a9059cbb146104a057600080fd5b806384b0196e1461040a5780638da5cb5b146104255780638e539e8c1461043657806391ddadf41461044957600080fd5b80633a46b1a8116101a85780636fcfff45116101775780636fcfff451461037a57806370a08231146103a2578063715018a6146103cb57806378aa33ba146103d35780637ecebe00146103f757600080fd5b80633a46b1a8146102e65780634bf5d7e9146102f9578063587cde1e146103235780635c19a95c1461036757600080fd5b80631ffacdef116101ef5780631ffacdef1461029457806323b872dd146102a9578063313ce567146102bc5780633644e515146102cb57806339509351146102d357600080fd5b80630455e6941461022157806306fdde031461025a578063095ea7b31461026f57806318160ddd14610282575b600080fd5b61024561022f366004612497565b6101316020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610262610591565b60405161025191906124f8565b61024561027d36600461250b565b610623565b6067545b604051908152602001610251565b6102a76102a2366004612535565b61063d565b005b6102456102b7366004612571565b610653565b60405160128152602001610251565b610286610677565b6102456102e136600461250b565b610686565b6102866102f436600461250b565b6106a8565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b6020820152610262565b61034f610331366004612497565b6001600160a01b03908116600090815260fe60205260409020541690565b6040516001600160a01b039091168152602001610251565b6102a7610375366004612497565b610732565b61038d610388366004612497565b61073f565b60405163ffffffff9091168152602001610251565b6102866103b0366004612497565b6001600160a01b031660009081526065602052604090205490565b6102a7610761565b6102456103e1366004612497565b6101326020526000908152604090205460ff1681565b610286610405366004612497565b610775565b610412610793565b60405161025197969594939291906125ae565b6033546001600160a01b031661034f565b610286610444366004612646565b610831565b610451610899565b60405165ffffffffffff9091168152602001610251565b6102626108a4565b61028661047e366004612497565b6108b3565b6102866101305481565b61024561049b36600461250b565b610935565b6102456104ae36600461250b565b6109b0565b6102a76104c1366004612535565b6109be565b6102a76104d4366004612670565b6109d0565b6102a76104e7366004612497565b610b06565b6102a76104fa3660046126c8565b610dc5565b61028661050d366004612733565b610f29565b6102a7610f54565b61052d610528366004612766565b611024565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610251565b6102a7610565366004612497565b6110a8565b61034f7f000000000000000000000000000000000000000000000000000000000000000081565b6060606880546105a09061279b565b80601f01602080910402602001604051908101604052809291908181526020018280546105cc9061279b565b80156106195780601f106105ee57610100808354040283529160200191610619565b820191906000526020600020905b8154815290600101906020018083116105fc57829003601f168201915b5050505050905090565b60003361063181858561111e565b60019150505b92915050565b610645611242565b61064f828261129c565b5050565b6000336106618582856112fd565b61066c858585611377565b506001949350505050565b6000610681611533565b905090565b6000336106318185856106998383610f29565b6106a391906127e5565b61111e565b60006106b2610899565b65ffffffffffff1682106107095760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260ff6020526040902061072b908361153d565b9392505050565b61073c3382611626565b50565b6001600160a01b038116600090815260ff6020526040812054610637906116a0565b610769611242565b6107736000611709565b565b6001600160a01b038116600090815260cb6020526040812054610637565b6000606080600080600060606097546000801b1480156107b35750609854155b6107f75760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610700565b6107ff61175b565b61080761176a565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061083b610899565b65ffffffffffff16821061088d5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610700565b6106376101008361153d565b600061068142611779565b6060606980546105a09061279b565b6001600160a01b038116600090815260ff60205260408120548015610922576001600160a01b038316600090815260ff60205260409020805460001983019081106109005761090061280e565b60009182526020909120015464010000000090046001600160e01b0316610925565b60005b6001600160e01b03169392505050565b600033816109438286610f29565b9050838110156109a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610700565b61066c828686840361111e565b600033610631818585611377565b6109c6611242565b61064f82826117e0565b83421115610a205760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610700565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610a9a90610a929060a00160405160208183030381529060405280519060200120611839565b858585611866565b9050610aa58161188e565b8614610af35760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610700565b610afd8188611626565b50505050505050565b600054610100900460ff1615808015610b265750600054600160ff909116105b80610b405750303b158015610b40575060005460ff166001145b610ba35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610700565b6000805460ff191660011790558015610bc6576000805461ff0019166101001790555b610bce6118b6565b610c1b6040518060400160405280600d81526020016c2130b1b5b4b7339022b4b3b2b760991b815250604051806040016040528060068152602001653122a4a3a2a760d11b8152506118e5565b610c2482611709565b610c4b604051806040016040528060068152602001653122a4a3a2a760d11b815250611916565b60001961013055610c7d7f0000000000000000000000000000000000000000000000000000000000000000600161129c565b610ca87f000000000000000000000000000000000000000000000000000000000000000060016117e0565b610d537f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e9190612824565b611960565b6040517fb7c23c1e2e36f298e9879a88ecfcd07e28fbb439bcfa9c78ca1363ca14370d2690600090a1801561064f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b83421115610e155760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610700565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610e448c61188e565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610e9f82611839565b90506000610eaf82878787611866565b9050896001600160a01b0316816001600160a01b031614610f125760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610700565b610f1d8a8a8a61111e565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b610f5c611242565b6000196101305414610ff35760405162461bcd60e51b815260206004820152605460248201527f4261636b696e67456967656e2e64697361626c655472616e736665725265737460448201527f72696374696f6e733a207472616e73666572207265737472696374696f6e7320606482015273185c9948185b1c9958591e48191a5cd8589b195960621b608482015260a401610700565b60006101308190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b60408051808201909152600080825260208201526001600160a01b038316600090815260ff60205260409020805463ffffffff84169081106110685761106861280e565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6110b0611242565b6001600160a01b0381166111155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610700565b61073c81611709565b6001600160a01b0383166111805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610700565b6001600160a01b0382166111e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610700565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6033546001600160a01b031633146107735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610700565b6001600160a01b03821660008181526101316020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b60006113098484610f29565b9050600019811461137157818110156113645760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610700565b611371848484840361111e565b50505050565b6001600160a01b0383166113db5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610700565b6001600160a01b03821661143d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610700565b6114488383836119eb565b6001600160a01b038316600090815260656020526040902054818110156114c05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610700565b6001600160a01b0380851660008181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115209086815260200190565b60405180910390a3611371848484611ac9565b6000610681611afb565b81546000908181600581111561159757600061155884611b6f565b611562908561283d565b600088815260209020909150869082015463ffffffff16111561158757809150611595565b6115928160016127e5565b92505b505b808210156115e45760006115ab8383611c57565b600088815260209020909150869082015463ffffffff1611156115d0578091506115de565b6115db8160016127e5565b92505b50611597565b8015611610576000868152602090208101600019015464010000000090046001600160e01b0316611613565b60005b6001600160e01b03169695505050505050565b6001600160a01b03828116600081815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611371828483611c72565b600063ffffffff8211156117055760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610700565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060609980546105a09061279b565b6060609a80546105a09061279b565b600065ffffffffffff8211156117055760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610700565b6001600160a01b03821660008181526101326020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b91016112f1565b6000610637611846611533565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600061187787878787611daf565b9150915061188481611e73565b5095945050505050565b6001600160a01b038116600090815260cb602052604090208054600181018255905b50919050565b600054610100900460ff166118dd5760405162461bcd60e51b815260040161070090612850565b610773611fbd565b600054610100900460ff1661190c5760405162461bcd60e51b815260040161070090612850565b61064f8282611fed565b600054610100900460ff1661193d5760405162461bcd60e51b815260040161070090612850565b61073c81604051806040016040528060018152602001603160f81b81525061202d565b61196a828261207c565b6067546001600160e01b0310156119dc5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610700565b6113716101006121518361215d565b610130544211611ac4576001600160a01b0383166000908152610131602052604090205460ff1680611a3657506001600160a01b0382166000908152610132602052604090205460ff165b80611a4857506001600160a01b038316155b611ac45760405162461bcd60e51b815260206004820152604160248201527f4261636b696e67456967656e2e5f6265666f7265546f6b656e5472616e73666560448201527f723a2066726f6d206f7220746f206d7573742062652077686974656c697374656064820152601960fa1b608482015260a401610700565b505050565b6001600160a01b03838116600090815260fe6020526040808220548584168352912054611ac492918216911683611c72565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b266122d2565b611b2e61232b565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600081600003611b8157506000919050565b60006001611b8e8461235c565b901c6001901b90506001818481611ba757611ba761289b565b048201901c90506001818481611bbf57611bbf61289b565b048201901c90506001818481611bd757611bd761289b565b048201901c90506001818481611bef57611bef61289b565b048201901c90506001818481611c0757611c0761289b565b048201901c90506001818481611c1f57611c1f61289b565b048201901c90506001818481611c3757611c3761289b565b048201901c905061072b81828581611c5157611c5161289b565b046123f0565b6000611c6660028484186128b1565b61072b908484166127e5565b816001600160a01b0316836001600160a01b031614158015611c945750600081115b15611ac4576001600160a01b03831615611d22576001600160a01b038316600090815260ff602052604081208190611ccf906124068561215d565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611d17929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611ac4576001600160a01b038216600090815260ff602052604081208190611d58906121518561215d565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611da0929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611de65750600090506003611e6a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611e3a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611e6357600060019250925050611e6a565b9150600090505b94509492505050565b6000816004811115611e8757611e876128d3565b03611e8f5750565b6001816004811115611ea357611ea36128d3565b03611ef05760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610700565b6002816004811115611f0457611f046128d3565b03611f515760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610700565b6003816004811115611f6557611f656128d3565b0361073c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610700565b600054610100900460ff16611fe45760405162461bcd60e51b815260040161070090612850565b61077333611709565b600054610100900460ff166120145760405162461bcd60e51b815260040161070090612850565b60686120208382612937565b506069611ac48282612937565b600054610100900460ff166120545760405162461bcd60e51b815260040161070090612850565b60996120608382612937565b50609a61206d8282612937565b50506000609781905560985550565b6001600160a01b0382166120d25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610700565b6120de600083836119eb565b80606760008282546120f091906127e5565b90915550506001600160a01b0382166000818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361064f60008383611ac9565b600061072b82846127e5565b825460009081908181156121aa5760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b031660208201526121bf565b60408051808201909152600080825260208201525b905080602001516001600160e01b031693506121df84868863ffffffff16565b925060008211801561220957506121f4610899565b65ffffffffffff16816000015163ffffffff16145b1561224e5761221783612412565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff9092169190911790556122c8565b866040518060400160405280612272612265610899565b65ffffffffffff166116a0565b63ffffffff16815260200161228686612412565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6000806122dd61175b565b8051909150156122f4578051602090910120919050565b60975480156123035792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b60008061233661176a565b80519091501561234d578051602090910120919050565b60985480156123035792915050565b600080608083901c1561237157608092831c92015b604083901c1561238357604092831c92015b602083901c1561239557602092831c92015b601083901c156123a757601092831c92015b600883901c156123b957600892831c92015b600483901c156123cb57600492831c92015b600283901c156123dd57600292831c92015b600183901c156106375760010192915050565b60008183106123ff578161072b565b5090919050565b600061072b828461283d565b60006001600160e01b038211156117055760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610700565b80356001600160a01b038116811461249257600080fd5b919050565b6000602082840312156124a957600080fd5b61072b8261247b565b6000815180845260005b818110156124d8576020818501810151868301820152016124bc565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061072b60208301846124b2565b6000806040838503121561251e57600080fd5b6125278361247b565b946020939093013593505050565b6000806040838503121561254857600080fd5b6125518361247b565b91506020830135801515811461256657600080fd5b809150509250929050565b60008060006060848603121561258657600080fd5b61258f8461247b565b925061259d6020850161247b565b929592945050506040919091013590565b60ff60f81b8816815260e0602082015260006125cd60e08301896124b2565b82810360408401526125df81896124b2565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015612635578351835260209384019390920191600101612617565b50909b9a5050505050505050505050565b60006020828403121561265857600080fd5b5035919050565b803560ff8116811461249257600080fd5b60008060008060008060c0878903121561268957600080fd5b6126928761247b565b955060208701359450604087013593506126ae6060880161265f565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a0312156126e357600080fd5b6126ec8861247b565b96506126fa6020890161247b565b955060408801359450606088013593506127166080890161265f565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561274657600080fd5b61274f8361247b565b915061275d6020840161247b565b90509250929050565b6000806040838503121561277957600080fd5b6127828361247b565b9150602083013563ffffffff8116811461256657600080fd5b600181811c908216806127af57607f821691505b6020821081036118b057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610637576106376127cf565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561283657600080fd5b5051919050565b81810381811115610637576106376127cf565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826128ce57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b601f821115611ac457806000526020600020601f840160051c810160208510156129105750805b601f840160051c820191505b81811015612930576000815560010161291c565b5050505050565b815167ffffffffffffffff811115612951576129516127f8565b6129658161295f845461279b565b846128e9565b6020601f82116001811461299957600083156129815750848201515b600019600385901b1c1916600184901b178455612930565b600084815260208120601f198516915b828110156129c957878501518255602094850194600190920191016129a9565b50848210156129e75786840151600019600387901b60f8161c191681555b50505050600190811b0190555056fea2646970667358221220a833c1bf43f8dd9aa913a34b3793922c1db07371891e22d7c57ff48ff95faea764736f6c634300081b0033", } // 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 2fc7439ef..26a0dc47e 100644 --- a/pkg/bindings/BeaconChainProofs/binding.go +++ b/pkg/bindings/BeaconChainProofs/binding.go @@ -31,8 +31,8 @@ var ( // BeaconChainProofsMetaData contains all meta data concerning the BeaconChainProofs contract. var BeaconChainProofsMetaData = &bind.MetaData{ - ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c00cb22743991a146de10677177d34d77104039d759b6119b391bd5a11f1770f64736f6c634300080c0033", + ABI: "[{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorFieldsLength\",\"inputs\":[]}]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220be084b9f9b1032781be7a2d76a8c94953b0684f5f0c9fcef94a547960fdd65e964736f6c634300081b0033", } // BeaconChainProofsABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/BytesLib/binding.go b/pkg/bindings/BytesLib/binding.go index b54665bad..b33bcba35 100644 --- a/pkg/bindings/BytesLib/binding.go +++ b/pkg/bindings/BytesLib/binding.go @@ -31,8 +31,8 @@ var ( // BytesLibMetaData contains all meta data concerning the BytesLib contract. var BytesLibMetaData = &bind.MetaData{ - ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122052491940b4b732c4bc716d1afbe1eaf5e1c77ff3a35e025bac5ca61a239df65964736f6c634300080c0033", + ABI: "[{\"type\":\"error\",\"name\":\"OutOfBounds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Overflow\",\"inputs\":[]}]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205ea0bc58325986fdf7cfd187032954143e205626010fae5ce1c4e48de8d70f2164736f6c634300081b0033", } // BytesLibABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/DelegationManager/binding.go b/pkg/bindings/DelegationManager/binding.go index cf241371c..e0db457b5 100644 --- a/pkg/bindings/DelegationManager/binding.go +++ b/pkg/bindings/DelegationManager/binding.go @@ -62,8 +62,8 @@ type ISignatureUtilsSignatureWithExpiry 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\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162005c4638038062005c46833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051615a1d6200022960003960006126a00152600081816105b10152818161102e015281816113aa01528181611c23015281816129f901528181613eac0152614398015260006107620152600081816104f901528181610ffc0152818161137801528181611cb701528181612ac601528181612c4901528181613fd2015261443e0152615a1d6000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a61035536600461484e565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a23660046148b4565b6109ce565b6103ba6103b536600461484e565b610a90565b604051610364919061490f565b6103da6103d53660046149ac565b610df9565b005b6103da6103ea3660046149ff565b610f3e565b6103da6103fd366004614a23565b610ff1565b6103da610410366004614a64565b6110a8565b6103da610423366004614a7d565b6111e7565b61035a6104363660046149ff565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614a23565b6111fb565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614ae8565b611229565b6103da6104bc366004614a23565b61136d565b61035a6104cf3660046149ff565b609b6020526000908152604090205481565b6103da6104ef366004614b8f565b61141d565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b6105413660046149ff565b6001600160a01b039081166000908152609960205260409020600101541690565b6105756105703660046149ff565b61155a565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da61157a565b61035a6105f3366004614e8c565b611641565b610575610606366004614ec8565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614ef9565b611671565b6103da610644366004614a64565b61170c565b61051b6106573660046149ff565b609a602052600090815260409020546001600160a01b031681565b6105756106803660046149ff565b61171d565b6103da611757565b61035a61069b366004614f88565b609860209081526000928352604080842090915290825290205481565b6103da6106c6366004615069565b61176b565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd3660046150f9565b611997565b6040516103649190615183565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da610738366004615196565b611a71565b61035a61074b3660046149ff565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004614a64565b609e6020526000908152604090205460ff1681565b6105756107b53660046151cb565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec3660046149ff565b60a16020526000908152604090205481565b61086e61080c3660046149ff565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b23660046151f7565b611b43565b61035a62034bc081565b6108d46108cf3660046149ff565b611bfc565b604051610364929190615278565b6103ba6108f03660046149ff565b611fb4565b6103da61090336600461529d565b612478565b6103da6109163660046152f5565b612595565b6103da6109293660046149ff565b612626565b61035a61269c565b6103da610944366004614a64565b6126da565b609d54600090815b838110156109c657600060a1600087878581811061097157610971615311565b905060200201602081019061098691906149ff565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b506109bf8161533d565b9050610951565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a4c61269c565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ac55760405162461bcd60e51b8152600401610abc90615358565b60405180910390fd5b6000836001600160401b03811115610adf57610adf614c31565b604051908082528060200260200182016040528015610b08578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610dee57868682818110610b4357610b43615311565b9050602002810190610b55919061538f565b610b639060208101906153af565b9050878783818110610b7757610b77615311565b9050602002810190610b89919061538f565b610b9390806153af565b905014610c085760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610abc565b33878783818110610c1b57610c1b615311565b9050602002810190610c2d919061538f565b610c3e9060608101906040016149ff565b6001600160a01b031614610cba5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610abc565b610dbf3383898985818110610cd157610cd1615311565b9050602002810190610ce3919061538f565b610cf49060608101906040016149ff565b8a8a86818110610d0657610d06615311565b9050602002810190610d18919061538f565b610d2290806153af565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d6857610d68615311565b9050602002810190610d7a919061538f565b610d889060208101906153af565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061283692505050565b838281518110610dd157610dd1615311565b602090810291909101015280610de68161533d565b915050610b29565b509095945050505050565b610e023361155a565b15610e885760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610abc565b610e923384612df6565b604080518082019091526060815260006020820152610eb43380836000612fe9565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610eed91906153f8565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f3092919061544a565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615479565b6001600160a01b0316336001600160a01b031614610fe55760405162461bcd60e51b8152600401610abc90615496565b610fee8161327f565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110505750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61106c5760405162461bcd60e51b8152600401610abc906154e0565b6110758361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a181858585613376565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611114919061553d565b6111305760405162461bcd60e51b8152600401610abc9061555a565b606654818116146111a95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6111ef6133f1565b6110a18484848461344b565b6001600160a01b0383166000908152609b602052604081205461122085828686611b43565b95945050505050565b600054610100900460ff16158080156112495750600054600160ff909116105b806112635750303b158015611263575060005460ff166001145b6112c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610abc565b6000805460ff1916600117905580156112e9576000805461ff0019166101001790555b6112f38888613671565b6112fb61375b565b609755611307896137f2565b61131086613844565b61131c8585858561344b565b8015611362576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113cc5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6113e85760405162461bcd60e51b8152600401610abc906154e0565b6113f18361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a18185858561393e565b606654600290600490811614156114465760405162461bcd60e51b8152600401610abc90615358565b600260c95414156114995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c95560005b88811015611549576115398a8a838181106114be576114be615311565b90506020028101906114d091906155a2565b8989848181106114e2576114e2615311565b90506020028101906114f491906153af565b89898681811061150657611506615311565b9050602002013588888781811061151f5761151f615311565b905060200201602081019061153491906155b8565b6139b9565b6115428161533d565b90506114a1565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e6919061553d565b6116025760405162461bcd60e51b8152600401610abc9061555a565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116549190615649565b604051602081830303815290604052805190602001209050919050565b6066546002906004908116141561169a5760405162461bcd60e51b8152600401610abc90615358565b600260c95414156116ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c9556116ff86868686866139b9565b5050600160c95550505050565b6117146133f1565b610fee81613844565b60006001600160a01b0382161580159061175157506001600160a01b038083166000818152609a6020526040902054909116145b92915050565b61175f6133f1565b61176960006137f2565b565b42836020015110156117ef5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610abc565b6117f88561155a565b156118815760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610abc565b61188a8461171d565b6119165760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610abc565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119528783888860200151611b43565b6001600160a01b0388166000908152609b60205260409020600184019055855190915061198290889083906141a3565b61198e87878686612fe9565b50505050505050565b6060600082516001600160401b038111156119b4576119b4614c31565b6040519080825280602002602001820160405280156119dd578160200160208202803683370190505b50905060005b83518110156109c6576001600160a01b03851660009081526098602052604081208551909190869084908110611a1b57611a1b615311565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a5657611a56615311565b6020908102919091010152611a6a8161533d565b90506119e3565b611a7a3361171d565b611afc5760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610abc565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611b3792919061544a565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611bb961269c565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c90919061565c565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015611d00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d2891908101906156d0565b9150915060008313611d3f57909590945092505050565b606080835160001415611df9576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611db457611db4615311565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611de857611de8615311565b602002602001018181525050611fa7565b8351611e0690600161578a565b6001600160401b03811115611e1d57611e1d614c31565b604051908082528060200260200182016040528015611e46578160200160208202803683370190505b50915081516001600160401b03811115611e6257611e62614c31565b604051908082528060200260200182016040528015611e8b578160200160208202803683370190505b50905060005b8451811015611f2557848181518110611eac57611eac615311565b6020026020010151838281518110611ec657611ec6615311565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611ef857611ef8615311565b6020026020010151828281518110611f1257611f12615311565b6020908102919091010152600101611e91565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611f4a91906157a2565b81518110611f5a57611f5a615311565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611f8a91906157a2565b81518110611f9a57611f9a615311565b6020026020010181815250505b9097909650945050505050565b60665460609060019060029081161415611fe05760405162461bcd60e51b8152600401610abc90615358565b611fe98361155a565b6120695760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610abc565b6120728361171d565b156120e55760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610abc565b6001600160a01b0383166121615760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610abc565b6001600160a01b038084166000818152609a6020526040902054909116903314806121945750336001600160a01b038216145b806121bb57506001600160a01b038181166000908152609960205260409020600101541633145b61222d5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610abc565b60008061223986611bfc565b9092509050336001600160a01b0387161461228f57826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b0319169055815161231157604080516000815260208101909152945061246f565b81516001600160401b0381111561232a5761232a614c31565b604051908082528060200260200182016040528015612353578160200160208202803683370190505b50945060005b825181101561246d576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106123b9576123b9615311565b6020026020010151826000815181106123d4576123d4615311565b60200260200101906001600160a01b031690816001600160a01b03168152505083838151811061240657612406615311565b60200260200101518160008151811061242157612421615311565b60200260200101818152505061243a89878b8585612836565b88848151811061244c5761244c615311565b602002602001018181525050505080806124659061533d565b915050612359565b505b50505050919050565b6124813361155a565b156124ff5760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610abc565b6125088361171d565b6125895760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610abc565b6110a333848484612fe9565b61259e3361171d565b61261c5760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610abc565b610fee3382612df6565b61262e6133f1565b6001600160a01b0381166126935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abc565b610fee816137f2565b60007f00000000000000000000000000000000000000000000000000000000000000004614156126cd575060975490565b6126d561375b565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561272d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127519190615479565b6001600160a01b0316336001600160a01b0316146127815760405162461bcd60e51b8152600401610abc90615496565b6066541981196066541916146127ff5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016111dc565b60006001600160a01b0386166128cd5760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610abc565b82516129575760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610abc565b60005b8351811015612d04576001600160a01b038616156129b0576129b0868886848151811061298957612989615311565b60200260200101518685815181106129a3576129a3615311565b6020026020010151613376565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129e0576129e0615311565b60200260200101516001600160a01b03161415612aa9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb8988858481518110612a3957612a39615311565b60200260200101516040518363ffffffff1660e01b8152600401612a729291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b50505050612cfc565b846001600160a01b0316876001600160a01b03161480612b7b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d858381518110612b0557612b05615311565b60200260200101516040518263ffffffff1660e01b8152600401612b3891906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b79919061553d565b155b612c475760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610abc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612c8957612c89615311565b6020026020010151868581518110612ca357612ca3615311565b60200260200101516040518463ffffffff1660e01b8152600401612cc9939291906157b9565b600060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050505b60010161295a565b506001600160a01b0386166000908152609f60205260408120805491829190612d2c8361533d565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d9482611641565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612de290839085906157dd565b60405180910390a198975050505050505050565b6213c680612e0a60608301604084016157f6565b63ffffffff161115612ebf5760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610abc565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612efb90606084019084016157f6565b63ffffffff161015612f915760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610abc565b6001600160a01b03821660009081526099602052604090208190612fb58282615833565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611b379084906153f8565b606654600090600190811614156130125760405162461bcd60e51b8152600401610abc90615358565b6001600160a01b038085166000908152609960205260409020600101541680158015906130485750336001600160a01b03821614155b801561305d5750336001600160a01b03861614155b156131ca5742846020015110156130dc5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156131765760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516131b79088908890859088906109ce565b90506131c8828287600001516141a3565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061322988611bfc565b9150915060005b825181101561136257613277888a85848151811061325057613250615311565b602002602001015185858151811061326a5761326a615311565b602002602001015161393e565b600101613230565b6001600160a01b03811661330d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610abc565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038085166000908152609860209081526040808320938616835292905290812080548392906133ad9084906157a2565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f30939291906157b9565b6033546001600160a01b031633146117695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abc565b8281146134d35760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610abc565b8260005b818110156136695760008686838181106134f3576134f3615311565b905060200201602081019061350891906149ff565b6001600160a01b038116600090815260a1602052604081205491925086868581811061353657613536615311565b90506020020135905062034bc08111156135fa5760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610abc565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806136629061533d565b90506134d7565b505050505050565b6065546001600160a01b031615801561369257506001600160a01b03821615155b6137145760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26137578261327f565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc08111156138fd5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610abc565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061397590849061578a565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f30939291906157b9565b60006139c76105f387615896565b6000818152609e602052604090205490915060ff16613a485760405162461bcd60e51b815260206004820152604360248201526000805160206159c883398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610abc565b609d544390613a5d60a0890160808a016157f6565b63ffffffff16613a6d919061578a565b1115613af55760405162461bcd60e51b815260206004820152605f60248201526000805160206159c883398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610abc565b613b0560608701604088016149ff565b6001600160a01b0316336001600160a01b031614613b925760405162461bcd60e51b815260206004820152605060248201526000805160206159c883398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610abc565b8115613c1457613ba560a08701876153af565b85149050613c145760405162461bcd60e51b815260206004820152604260248201526000805160206159c883398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610abc565b6000818152609e60205260409020805460ff191690558115613d795760005b613c4060a08801886153af565b9050811015613d73574360a16000613c5b60a08b018b6153af565b85818110613c6b57613c6b615311565b9050602002016020810190613c8091906149ff565b6001600160a01b03168152602081019190915260400160002054613caa60a08a0160808b016157f6565b63ffffffff16613cba919061578a565b1115613cd85760405162461bcd60e51b8152600401610abc906158a2565b613d6b613ce860208901896149ff565b33613cf660a08b018b6153af565b85818110613d0657613d06615311565b9050602002016020810190613d1b91906149ff565b613d2860c08c018c6153af565b86818110613d3857613d38615311565b905060200201358a8a87818110613d5157613d51615311565b9050602002016020810190613d6691906149ff565b61435d565b600101613c33565b50614168565b336000908152609a60205260408120546001600160a01b0316905b613da160a08901896153af565b9050811015614165574360a16000613dbc60a08c018c6153af565b85818110613dcc57613dcc615311565b9050602002016020810190613de191906149ff565b6001600160a01b03168152602081019190915260400160002054613e0b60a08b0160808c016157f6565b63ffffffff16613e1b919061578a565b1115613e395760405162461bcd60e51b8152600401610abc906158a2565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613e5b60a08a018a6153af565b83818110613e6b57613e6b615311565b9050602002016020810190613e8091906149ff565b6001600160a01b03161415613fd0576000613e9e60208a018a6149ff565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c83613edf60c08e018e6153af565b87818110613eef57613eef615311565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f67919061565c565b6001600160a01b038084166000908152609a6020526040902054919250168015613fc857613fc88184613f9d60a08f018f6153af565b88818110613fad57613fad615311565b9050602002016020810190613fc291906149ff565b8561393e565b50505061415d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061401257614012615311565b905060200201602081019061402791906149ff565b61403460a08d018d6153af565b8681811061404457614044615311565b905060200201602081019061405991906149ff565b61406660c08e018e6153af565b8781811061407657614076615311565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156140d657600080fd5b505af11580156140ea573d6000803e3d6000fd5b505050506001600160a01b0382161561415d5761415d823361410f60a08c018c6153af565b8581811061411f5761411f615311565b905060200201602081019061413491906149ff565b61414160c08d018d6153af565b8681811061415157614151615311565b9050602002013561393e565b600101613d94565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b156142bd57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906141e3908690869060040161592a565b602060405180830381865afa158015614200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142249190615987565b6001600160e01b031916146110a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610abc565b826001600160a01b03166142d1838361449d565b6001600160a01b0316146110a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610abc565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156144085760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b1300906143d1908890889087906004016157b9565b600060405180830381600087803b1580156143eb57600080fd5b505af11580156143ff573d6000803e3d6000fd5b50505050614496565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b15801561448257600080fd5b505af1158015611362573d6000803e3d6000fd5b5050505050565b60008060006144ac85856144b9565b915091506109c681614529565b6000808251604114156144f05760208301516040840151606085015160001a6144e4878285856146e4565b94509450505050614522565b82516040141561451a576020830151604084015161450f8683836147d1565b935093505050614522565b506000905060025b9250929050565b600081600481111561453d5761453d6159b1565b14156145465750565b600181600481111561455a5761455a6159b1565b14156145a85760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610abc565b60028160048111156145bc576145bc6159b1565b141561460a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610abc565b600381600481111561461e5761461e6159b1565b14156146775760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610abc565b600481600481111561468b5761468b6159b1565b1415610fee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610abc565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561471b57506000905060036147c8565b8460ff16601b1415801561473357508460ff16601c14155b1561474457506000905060046147c8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614798573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147c1576000600192509250506147c8565b9150600090505b94509492505050565b6000806001600160ff1b038316816147ee60ff86901c601b61578a565b90506147fc878288856146e4565b935093505050935093915050565b60008083601f84011261481c57600080fd5b5081356001600160401b0381111561483357600080fd5b6020830191508360208260051b850101111561452257600080fd5b6000806020838503121561486157600080fd5b82356001600160401b0381111561487757600080fd5b6148838582860161480a565b90969095509350505050565b6001600160a01b0381168114610fee57600080fd5b80356148af8161488f565b919050565b600080600080600060a086880312156148cc57600080fd5b85356148d78161488f565b945060208601356148e78161488f565b935060408601356148f78161488f565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b818110156149475783518352928401929184019160010161492b565b50909695505050505050565b60006060828403121561496557600080fd5b50919050565b60008083601f84011261497d57600080fd5b5081356001600160401b0381111561499457600080fd5b60208301915083602082850101111561452257600080fd5b6000806000608084860312156149c157600080fd5b6149cb8585614953565b925060608401356001600160401b038111156149e657600080fd5b6149f28682870161496b565b9497909650939450505050565b600060208284031215614a1157600080fd5b8135614a1c8161488f565b9392505050565b600080600060608486031215614a3857600080fd5b8335614a438161488f565b92506020840135614a538161488f565b929592945050506040919091013590565b600060208284031215614a7657600080fd5b5035919050565b60008060008060408587031215614a9357600080fd5b84356001600160401b0380821115614aaa57600080fd5b614ab68883890161480a565b90965094506020870135915080821115614acf57600080fd5b50614adc8782880161480a565b95989497509550505050565b60008060008060008060008060c0898b031215614b0457600080fd5b8835614b0f8161488f565b97506020890135614b1f8161488f565b9650604089013595506060890135945060808901356001600160401b0380821115614b4957600080fd5b614b558c838d0161480a565b909650945060a08b0135915080821115614b6e57600080fd5b50614b7b8b828c0161480a565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614bab57600080fd5b88356001600160401b0380821115614bc257600080fd5b614bce8c838d0161480a565b909a50985060208b0135915080821115614be757600080fd5b614bf38c838d0161480a565b909850965060408b0135915080821115614c0c57600080fd5b614c188c838d0161480a565b909650945060608b0135915080821115614b6e57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614c6957614c69614c31565b60405290565b604080519081016001600160401b0381118282101715614c6957614c69614c31565b604051601f8201601f191681016001600160401b0381118282101715614cb957614cb9614c31565b604052919050565b63ffffffff81168114610fee57600080fd5b80356148af81614cc1565b60006001600160401b03821115614cf757614cf7614c31565b5060051b60200190565b600082601f830112614d1257600080fd5b81356020614d27614d2283614cde565b614c91565b82815260059290921b84018101918181019086841115614d4657600080fd5b8286015b84811015614d6a578035614d5d8161488f565b8352918301918301614d4a565b509695505050505050565b600082601f830112614d8657600080fd5b81356020614d96614d2283614cde565b82815260059290921b84018101918181019086841115614db557600080fd5b8286015b84811015614d6a5780358352918301918301614db9565b600060e08284031215614de257600080fd5b614dea614c47565b9050614df5826148a4565b8152614e03602083016148a4565b6020820152614e14604083016148a4565b604082015260608201356060820152614e2f60808301614cd3565b608082015260a08201356001600160401b0380821115614e4e57600080fd5b614e5a85838601614d01565b60a084015260c0840135915080821115614e7357600080fd5b50614e8084828501614d75565b60c08301525092915050565b600060208284031215614e9e57600080fd5b81356001600160401b03811115614eb457600080fd5b614ec084828501614dd0565b949350505050565b600060208284031215614eda57600080fd5b813560ff81168114614a1c57600080fd5b8015158114610fee57600080fd5b600080600080600060808688031215614f1157600080fd5b85356001600160401b0380821115614f2857600080fd5b9087019060e0828a031215614f3c57600080fd5b90955060208701359080821115614f5257600080fd5b50614f5f8882890161480a565b909550935050604086013591506060860135614f7a81614eeb565b809150509295509295909350565b60008060408385031215614f9b57600080fd5b8235614fa68161488f565b91506020830135614fb68161488f565b809150509250929050565b600060408284031215614fd357600080fd5b614fdb614c6f565b905081356001600160401b0380821115614ff457600080fd5b818401915084601f83011261500857600080fd5b813560208282111561501c5761501c614c31565b61502e601f8301601f19168201614c91565b9250818352868183860101111561504457600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561508157600080fd5b853561508c8161488f565b9450602086013561509c8161488f565b935060408601356001600160401b03808211156150b857600080fd5b6150c489838a01614fc1565b945060608801359150808211156150da57600080fd5b506150e788828901614fc1565b95989497509295608001359392505050565b6000806040838503121561510c57600080fd5b82356151178161488f565b915060208301356001600160401b0381111561513257600080fd5b61513e85828601614d01565b9150509250929050565b600081518084526020808501945080840160005b838110156151785781518752958201959082019060010161515c565b509495945050505050565b602081526000614a1c6020830184615148565b600080602083850312156151a957600080fd5b82356001600160401b038111156151bf57600080fd5b6148838582860161496b565b600080604083850312156151de57600080fd5b82356151e98161488f565b946020939093013593505050565b6000806000806080858703121561520d57600080fd5b84356152188161488f565b935060208501359250604085013561522f8161488f565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156151785781516001600160a01b031687529582019590820190600101615253565b60408152600061528b604083018561523f565b82810360208401526112208185615148565b6000806000606084860312156152b257600080fd5b83356152bd8161488f565b925060208401356001600160401b038111156152d857600080fd5b6152e486828701614fc1565b925050604084013590509250925092565b60006060828403121561530757600080fd5b614a1c8383614953565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561535157615351615327565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e198336030181126153a557600080fd5b9190910192915050565b6000808335601e198436030181126153c657600080fd5b8301803591506001600160401b038211156153e057600080fd5b6020019150600581901b360382131561452257600080fd5b6060810182356154078161488f565b6001600160a01b0390811683526020840135906154238261488f565b166020830152604083013561543781614cc1565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561548b57600080fd5b8151614a1c8161488f565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561554f57600080fd5b8151614a1c81614eeb565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de198336030181126153a557600080fd5b6000602082840312156155ca57600080fd5b8135614a1c81614eeb565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261563060e085018261523f565b905060c083015184820360c08601526112208282615148565b602081526000614a1c60208301846155d5565b60006020828403121561566e57600080fd5b5051919050565b600082601f83011261568657600080fd5b81516020615696614d2283614cde565b82815260059290921b840181019181810190868411156156b557600080fd5b8286015b84811015614d6a57805183529183019183016156b9565b600080604083850312156156e357600080fd5b82516001600160401b03808211156156fa57600080fd5b818501915085601f83011261570e57600080fd5b8151602061571e614d2283614cde565b82815260059290921b8401810191818101908984111561573d57600080fd5b948201945b838610156157645785516157558161488f565b82529482019490820190615742565b9188015191965090935050508082111561577d57600080fd5b5061513e85828601615675565b6000821982111561579d5761579d615327565b500190565b6000828210156157b4576157b4615327565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000614ec060408301846155d5565b60006020828403121561580857600080fd5b8135614a1c81614cc1565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561583e8161488f565b6158488183615813565b5060018101602083013561585b8161488f565b6158658183615813565b50604083013561587481614cc1565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006117513683614dd0565b6020808252606e908201526000805160206159c883398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b8181101561595e57858101830151858201606001528201615942565b81811115615970576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561599957600080fd5b81516001600160e01b031981168114614a1c57600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a264697066735822122046f59d0774fea296e76e107662bfe5a0f076e0013aabe21beb6ded4a9b0f61a864736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"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\":\"StakerOptOutWindowBlocksCannotDecrease\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotStaker\",\"inputs\":[]}]", + Bin: "0x61010060405234801561001157600080fd5b50604051614fd0380380614fd083398101604081905261003091610135565b6001600160a01b0380841660805280821660c052821660a05261005161005d565b50504660e05250610182565b600054610100900460ff16156100c95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013257600080fd5b50565b60008060006060848603121561014a57600080fd5b83516101558161011d565b60208501519093506101668161011d565b60408501519092506101778161011d565b809150509250925092565b60805160a05160c05160e051614dba61021660003960006120e50152600081816105b101528181610f0401528181611232015281816118fa01528181612312015281816134cb01526138e1015260006107620152600081816104f901528181610ed2015281816112000152818161198e015281816123df015281816124b3015281816135f101526139870152614dba6000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a610355366004613d90565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a2366004613df6565b6109c8565b6103ba6103b5366004613d90565b610a8a565b6040516103649190613e51565b6103da6103d5366004613ee2565b610d36565b005b6103da6103ea366004613f35565b610e13565b6103da6103fd366004613f59565b610ec7565b6103da610410366004613f9a565b610f7f565b6103da610423366004613fb3565b61106a565b61035a610436366004613f35565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004613f59565b61107e565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614022565b6110ac565b6103da6104bc366004613f59565b6111f5565b61035a6104cf366004613f35565b609b6020526000908152604090205481565b6103da6104ef3660046140cd565b6112a6565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b610541366004613f35565b6001600160a01b039081166000908152609960205260409020600101541690565b610575610570366004613f35565b6113da565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da6113fa565b61035a6105f33660046143e4565b6114c2565b610575610606366004614420565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614451565b6114f2565b6103da610644366004613f9a565b61158c565b61051b610657366004613f35565b609a602052600090815260409020546001600160a01b031681565b610575610680366004613f35565b61159d565b6103da6115d4565b61035a61069b3660046144e1565b609860209081526000928352604080842090915290825290205481565b6103da6106c63660046145c5565b6115e8565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd366004614659565b6116db565b60405161036491906146e4565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da6107383660046146f7565b6117ad565b61035a61074b366004613f35565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004613f9a565b609e6020526000908152604090205460ff1681565b6105756107b536600461472c565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec366004613f35565b60a16020526000908152604090205481565b61086e61080c366004613f35565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b2366004614758565b61181a565b61035a62034bc081565b6108d46108cf366004613f35565b6118d3565b6040516103649291906147db565b6103ba6108f0366004613f35565b611c8a565b6103da610903366004614800565b611fe2565b6103da610916366004614859565b61203b565b6103da610929366004613f35565b61206b565b61035a6120e1565b6103da610944366004613f9a565b61211e565b609d54600090815b838110156109be57600060a1600087878581811061097157610971614875565b90506020020160208101906109869190613f35565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b50600101610951565b5090505b92915050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a466120e1565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b606654606090600190600290811603610ab65760405163840a48d560e01b815260040160405180910390fd5b6000836001600160401b03811115610ad057610ad0614180565b604051908082528060200260200182016040528015610af9578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610d2b57868682818110610b3457610b34614875565b9050602002810190610b46919061488b565b610b549060208101906148ab565b9050878783818110610b6857610b68614875565b9050602002810190610b7a919061488b565b610b8490806148ab565b905014610ba4576040516343714afd60e01b815260040160405180910390fd5b33878783818110610bb757610bb7614875565b9050602002810190610bc9919061488b565b610bda906060810190604001613f35565b6001600160a01b031614610c01576040516330c4716960e21b815260040160405180910390fd5b610d063383898985818110610c1857610c18614875565b9050602002810190610c2a919061488b565b610c3b906060810190604001613f35565b8a8a86818110610c4d57610c4d614875565b9050602002810190610c5f919061488b565b610c6990806148ab565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610caf57610caf614875565b9050602002810190610cc1919061488b565b610ccf9060208101906148ab565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061222692505050565b838281518110610d1857610d18614875565b6020908102919091010152600101610b1a565b509095945050505050565b610d3f336113da565b15610d5d57604051633bf2b50360e11b815260040160405180910390fd5b610d673384612660565b604080518082019091526060815260006020820152610d893380836000612853565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610dc291906148f4565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610e0592919061494b565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a919061497a565b6001600160a01b0316336001600160a01b031614610ebb5760405163794821ff60e01b815260040160405180910390fd5b610ec481612a3f565b50565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610f265750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610f435760405163045206a560e21b815260040160405180910390fd5b610f4c836113da565b15610f7a576001600160a01b038084166000908152609a602052604090205416610f7881858585612acf565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190614997565b61100857604051631d77d47760e21b815260040160405180910390fd5b6066548181161461102c5760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b611072612b4a565b610f7884848484612ba4565b6001600160a01b0383166000908152609b60205260408120546110a38582868661181a565b95945050505050565b600054610100900460ff16158080156110cc5750600054600160ff909116105b806110e65750303b1580156110e6575060005460ff166001145b61114e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015611171576000805461ff0019166101001790555b61117b8888612dc4565b611183612e49565b60975561118f89612ee0565b61119886612f32565b6111a485858585612ba4565b80156111ea576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112545750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6112715760405163045206a560e21b815260040160405180910390fd5b61127a836113da565b15610f7a576001600160a01b038084166000908152609a602052604090205416610f788185858561302c565b6066546002906004908116036112cf5760405163840a48d560e01b815260040160405180910390fd5b600260c954036113215760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611145565b600260c95560005b888110156113c9576113c18a8a8381811061134657611346614875565b905060200281019061135891906149b4565b89898481811061136a5761136a614875565b905060200281019061137c91906148ab565b89898681811061138e5761138e614875565b905060200201358888878181106113a7576113a7614875565b90506020020160208101906113bc91906149ca565b6130a7565b600101611329565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190614997565b61148357604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016114d59190614a66565b604051602081830303815290604052805190602001209050919050565b60665460029060049081160361151b5760405163840a48d560e01b815260040160405180910390fd5b600260c9540361156d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611145565b600260c95561157f86868686866130a7565b5050600160c95550505050565b611594612b4a565b610ec481612f32565b60006001600160a01b038216158015906109c25750506001600160a01b039081166000818152609a60205260409020549091161490565b6115dc612b4a565b6115e66000612ee0565b565b428360200151101561160d57604051630819bdcd60e01b815260040160405180910390fd5b611616856113da565b1561163457604051633bf2b50360e11b815260040160405180910390fd5b61163d8461159d565b61165a576040516325ec6c1f60e01b815260040160405180910390fd5b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611696878388886020015161181a565b6001600160a01b0388166000908152609b6020526040902060018401905585519091506116c690889083906137c2565b6116d287878686612853565b50505050505050565b6060600082516001600160401b038111156116f8576116f8614180565b604051908082528060200260200182016040528015611721578160200160208202803683370190505b50905060005b83518110156109be576001600160a01b0385166000908152609860205260408120855190919086908490811061175f5761175f614875565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061179a5761179a614875565b6020908102919091010152600101611727565b6117b63361159d565b6117d3576040516325ec6c1f60e01b815260040160405180910390fd5b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090838360405161180e92919061494b565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c09092019092528051910120600090816118906120e1565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119679190614a79565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa1580156119d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119ff9190810190614af0565b9150915060008313611a1657909590945092505050565b6060808351600003611acf576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611a8a57611a8a614875565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611abe57611abe614875565b602002602001018181525050611c7d565b8351611adc906001614bc7565b6001600160401b03811115611af357611af3614180565b604051908082528060200260200182016040528015611b1c578160200160208202803683370190505b50915081516001600160401b03811115611b3857611b38614180565b604051908082528060200260200182016040528015611b61578160200160208202803683370190505b50905060005b8451811015611bfb57848181518110611b8257611b82614875565b6020026020010151838281518110611b9c57611b9c614875565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611bce57611bce614875565b6020026020010151828281518110611be857611be8614875565b6020908102919091010152600101611b67565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611c209190614bda565b81518110611c3057611c30614875565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611c609190614bda565b81518110611c7057611c70614875565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811603611cb65760405163840a48d560e01b815260040160405180910390fd5b611cbf836113da565b611cdc5760405163a5c7c44560e01b815260040160405180910390fd5b611ce58361159d565b15611d03576040516311ca333560e31b815260040160405180910390fd5b6001600160a01b038316611d2a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b038084166000818152609a602052604090205490911690331480611d5d5750336001600160a01b038216145b80611d8457506001600160a01b038181166000908152609960205260409020600101541633145b611da157604051631e499a2360e11b815260040160405180910390fd5b600080611dad866118d3565b9092509050336001600160a01b03871614611e0357826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040812080546001600160a01b031916905582519003611e87576040805160008152602081019091529450611fd9565b81516001600160401b03811115611ea057611ea0614180565b604051908082528060200260200182016040528015611ec9578160200160208202803683370190505b50945060005b8251811015611fd757604080516001808252818301909252600091602080830190803683375050604080516001808252818301909252929350600092915060208083019080368337019050509050848381518110611f2f57611f2f614875565b602002602001015182600081518110611f4a57611f4a614875565b60200260200101906001600160a01b031690816001600160a01b031681525050838381518110611f7c57611f7c614875565b602002602001015181600081518110611f9757611f97614875565b602002602001018181525050611fb089878b8585612226565b888481518110611fc257611fc2614875565b60209081029190910101525050600101611ecf565b505b50505050919050565b611feb336113da565b1561200957604051633bf2b50360e11b815260040160405180910390fd5b6120128361159d565b61202f576040516325ec6c1f60e01b815260040160405180910390fd5b610f7a33848484612853565b6120443361159d565b612061576040516325ec6c1f60e01b815260040160405180910390fd5b610ec43382612660565b612073612b4a565b6001600160a01b0381166120d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611145565b610ec481612ee0565b60007f00000000000000000000000000000000000000000000000000000000000000004603612111575060975490565b612119612e49565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612195919061497a565b6001600160a01b0316336001600160a01b0316146121c65760405163794821ff60e01b815260040160405180910390fd5b6066541981196066541916146121ef5760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161105f565b60006001600160a01b03861661224f576040516339b190bb60e11b815260040160405180910390fd5b82516000036122715760405163796cc52560e01b815260040160405180910390fd5b60005b835181101561256e576001600160a01b038616156122ca576122ca86888684815181106122a3576122a3614875565b60200260200101518685815181106122bd576122bd614875565b6020026020010151612acf565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106122fa576122fa614875565b60200260200101516001600160a01b0316036123c2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb898885848151811061235257612352614875565b60200260200101516040518363ffffffff1660e01b815260040161238b9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b1580156123a557600080fd5b505af11580156123b9573d6000803e3d6000fd5b50505050612566565b846001600160a01b0316876001600160a01b0316148061249457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d85838151811061241e5761241e614875565b60200260200101516040518263ffffffff1660e01b815260040161245191906001600160a01b0391909116815260200190565b602060405180830381865afa15801561246e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124929190614997565b155b6124b1576040516330c4716960e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e5888684815181106124f3576124f3614875565b602002602001015186858151811061250d5761250d614875565b60200260200101516040518463ffffffff1660e01b815260040161253393929190614bed565b600060405180830381600087803b15801561254d57600080fd5b505af1158015612561573d6000803e3d6000fd5b505050505b600101612274565b506001600160a01b0386166000908152609f6020526040812080549182919061259683614c11565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff16815260200186815260200185815250905060006125fe826114c2565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f99061264c9083908590614c2a565b60405180910390a198975050505050505050565b6213c6806126746060830160408401614c43565b63ffffffff1611156127295760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401611145565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff16906127659060608401908401614c43565b63ffffffff1610156127fb5760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401611145565b6001600160a01b0382166000908152609960205260409020819061281f8282614c80565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac9061180e9084906148f4565b60665460009060019081160361287c5760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b038085166000908152609960205260409020600101541680158015906128b25750336001600160a01b03821614155b80156128c75750336001600160a01b03861614155b1561298a5742846020015110156128f157604051630819bdcd60e01b815260040160405180910390fd5b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff161561293657604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516129779088908890859088906109c8565b9050612988828287600001516137c2565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806129e9886118d3565b9150915060005b82518110156111ea57612a37888a858481518110612a1057612a10614875565b6020026020010151858581518110612a2a57612a2a614875565b602002602001015161302c565b6001016129f0565b6001600160a01b038116612a66576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290612b06908490614bda565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610e0593929190614bed565b6033546001600160a01b031633146115e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611145565b828114612c2c5760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401611145565b8260005b81811015612dbc576000868683818110612c4c57612c4c614875565b9050602002016020810190612c619190613f35565b6001600160a01b038116600090815260a16020526040812054919250868685818110612c8f57612c8f614875565b90506020020135905062034bc0811115612d535760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401611145565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806001019050612c30565b505050505050565b6065546001600160a01b0316158015612de557506001600160a01b03821615155b612e02576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2612e4582612a3f565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc0811115612feb5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401611145565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613063908490614bc7565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610e0593929190614bed565b60006130b56105f387614ce3565b6000818152609e602052604090205490915060ff166130e7576040516387c9d21960e01b815260040160405180910390fd5b609d5443906130fc60a0890160808a01614c43565b63ffffffff1661310c9190614bc7565b111561312b576040516378f67ae160e11b815260040160405180910390fd5b61313b6060870160408801613f35565b6001600160a01b0316336001600160a01b03161461316c576040516316110d3560e21b815260040160405180910390fd5b81156131a05761317f60a08701876148ab565b851490506131a0576040516343714afd60e01b815260040160405180910390fd5b6000818152609e60205260409020805460ff1916905581156133065760005b6131cc60a08801886148ab565b9050811015613300574360a160006131e760a08b018b6148ab565b858181106131f7576131f7614875565b905060200201602081019061320c9190613f35565b6001600160a01b0316815260208101919091526040016000205461323660a08a0160808b01614c43565b63ffffffff166132469190614bc7565b1115613265576040516378f67ae160e11b815260040160405180910390fd5b6132f86132756020890189613f35565b3361328360a08b018b6148ab565b8581811061329357613293614875565b90506020020160208101906132a89190613f35565b6132b560c08c018c6148ab565b868181106132c5576132c5614875565b905060200201358a8a878181106132de576132de614875565b90506020020160208101906132f39190613f35565b6138a6565b6001016131bf565b50613787565b336000908152609a60205260408120546001600160a01b0316905b61332e60a08901896148ab565b9050811015613784574360a1600061334960a08c018c6148ab565b8581811061335957613359614875565b905060200201602081019061336e9190613f35565b6001600160a01b0316815260208101919091526040016000205461339860a08b0160808c01614c43565b63ffffffff166133a89190614bc7565b11156134595760405162461bcd60e51b815260206004820152606e60248201527f44656c65676174696f6e4d616e616765722e5f636f6d706c657465517565756560448201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360648201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260848201526d207468697320737472617465677960901b60a482015260c401611145565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061347b60a08a018a6148ab565b8381811061348b5761348b614875565b90506020020160208101906134a09190613f35565b6001600160a01b0316036135ef5760006134bd60208a018a613f35565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c836134fe60c08e018e6148ab565b8781811061350e5761350e614875565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135869190614a79565b6001600160a01b038084166000908152609a60205260409020549192501680156135e7576135e781846135bc60a08f018f6148ab565b888181106135cc576135cc614875565b90506020020160208101906135e19190613f35565b8561302c565b50505061377c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061363157613631614875565b90506020020160208101906136469190613f35565b61365360a08d018d6148ab565b8681811061366357613663614875565b90506020020160208101906136789190613f35565b61368560c08e018e6148ab565b8781811061369557613695614875565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156136f557600080fd5b505af1158015613709573d6000803e3d6000fd5b505050506001600160a01b0382161561377c5761377c823361372e60a08c018c6148ab565b8581811061373e5761373e614875565b90506020020160208101906137539190613f35565b61376060c08d018d6148ab565b8681811061377057613770614875565b9050602002013561302c565b600101613321565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b1561386b57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906138029086908690600401614cef565b602060405180830381865afa15801561381f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138439190614d44565b6001600160e01b03191614610f7a5760405163026aa43360e31b815260040160405180910390fd5b826001600160a01b031661387f83836139e6565b6001600160a01b031614610f7a57604051636d20896160e11b815260040160405180910390fd5b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b038416016139515760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b13009061391a90889088908790600401614bed565b600060405180830381600087803b15801561393457600080fd5b505af1158015613948573d6000803e3d6000fd5b505050506139df565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b1580156139cb57600080fd5b505af11580156111ea573d6000803e3d6000fd5b5050505050565b60008060006139f58585613a02565b915091506109be81613a70565b6000808251604103613a385760208301516040840151606085015160001a613a2c87828585613c26565b94509450505050613a69565b8251604003613a615760208301516040840151613a56868383613d13565b935093505050613a69565b506000905060025b9250929050565b6000816004811115613a8457613a84614d6e565b03613a8c5750565b6001816004811115613aa057613aa0614d6e565b03613aed5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611145565b6002816004811115613b0157613b01614d6e565b03613b4e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611145565b6003816004811115613b6257613b62614d6e565b03613bba5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611145565b6004816004811115613bce57613bce614d6e565b03610ec45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401611145565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613c5d5750600090506003613d0a565b8460ff16601b14158015613c7557508460ff16601c14155b15613c865750600090506004613d0a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613cda573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613d0357600060019250925050613d0a565b9150600090505b94509492505050565b6000806001600160ff1b03831681613d3060ff86901c601b614bc7565b9050613d3e87828885613c26565b935093505050935093915050565b60008083601f840112613d5e57600080fd5b5081356001600160401b03811115613d7557600080fd5b6020830191508360208260051b8501011115613a6957600080fd5b60008060208385031215613da357600080fd5b82356001600160401b03811115613db957600080fd5b613dc585828601613d4c565b90969095509350505050565b6001600160a01b0381168114610ec457600080fd5b8035613df181613dd1565b919050565b600080600080600060a08688031215613e0e57600080fd5b8535613e1981613dd1565b94506020860135613e2981613dd1565b93506040860135613e3981613dd1565b94979396509394606081013594506080013592915050565b602080825282518282018190526000918401906040840190835b81811015610d2b578351835260209384019390920191600101613e6b565b600060608284031215613e9b57600080fd5b50919050565b60008083601f840112613eb357600080fd5b5081356001600160401b03811115613eca57600080fd5b602083019150836020828501011115613a6957600080fd5b600080600060808486031215613ef757600080fd5b613f018585613e89565b925060608401356001600160401b03811115613f1c57600080fd5b613f2886828701613ea1565b9497909650939450505050565b600060208284031215613f4757600080fd5b8135613f5281613dd1565b9392505050565b600080600060608486031215613f6e57600080fd5b8335613f7981613dd1565b92506020840135613f8981613dd1565b929592945050506040919091013590565b600060208284031215613fac57600080fd5b5035919050565b60008060008060408587031215613fc957600080fd5b84356001600160401b03811115613fdf57600080fd5b613feb87828801613d4c565b90955093505060208501356001600160401b0381111561400a57600080fd5b61401687828801613d4c565b95989497509550505050565b60008060008060008060008060c0898b03121561403e57600080fd5b883561404981613dd1565b9750602089013561405981613dd1565b9650604089013595506060890135945060808901356001600160401b0381111561408257600080fd5b61408e8b828c01613d4c565b90955093505060a08901356001600160401b038111156140ad57600080fd5b6140b98b828c01613d4c565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b0312156140e957600080fd5b88356001600160401b038111156140ff57600080fd5b61410b8b828c01613d4c565b90995097505060208901356001600160401b0381111561412a57600080fd5b6141368b828c01613d4c565b90975095505060408901356001600160401b0381111561415557600080fd5b6141618b828c01613d4c565b90955093505060608901356001600160401b038111156140ad57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b03811182821017156141b8576141b8614180565b60405290565b604080519081016001600160401b03811182821017156141b8576141b8614180565b604051601f8201601f191681016001600160401b038111828210171561420857614208614180565b604052919050565b63ffffffff81168114610ec457600080fd5b8035613df181614210565b60006001600160401b0382111561424657614246614180565b5060051b60200190565b600082601f83011261426157600080fd5b813561427461426f8261422d565b6141e0565b8082825260208201915060208360051b86010192508583111561429657600080fd5b602085015b838110156142bc5780356142ae81613dd1565b83526020928301920161429b565b5095945050505050565b600082601f8301126142d757600080fd5b81356142e561426f8261422d565b8082825260208201915060208360051b86010192508583111561430757600080fd5b602085015b838110156142bc57803583526020928301920161430c565b600060e0828403121561433657600080fd5b61433e614196565b905061434982613de6565b815261435760208301613de6565b602082015261436860408301613de6565b60408201526060828101359082015261438360808301614222565b608082015260a08201356001600160401b038111156143a157600080fd5b6143ad84828501614250565b60a08301525060c08201356001600160401b038111156143cc57600080fd5b6143d8848285016142c6565b60c08301525092915050565b6000602082840312156143f657600080fd5b81356001600160401b0381111561440c57600080fd5b61441884828501614324565b949350505050565b60006020828403121561443257600080fd5b813560ff81168114613f5257600080fd5b8015158114610ec457600080fd5b60008060008060006080868803121561446957600080fd5b85356001600160401b0381111561447f57600080fd5b860160e0818903121561449157600080fd5b945060208601356001600160401b038111156144ac57600080fd5b6144b888828901613d4c565b9095509350506040860135915060608601356144d381614443565b809150509295509295909350565b600080604083850312156144f457600080fd5b82356144ff81613dd1565b9150602083013561450f81613dd1565b809150509250929050565b60006040828403121561452c57600080fd5b6145346141be565b905081356001600160401b0381111561454c57600080fd5b8201601f8101841361455d57600080fd5b80356001600160401b0381111561457657614576614180565b614589601f8201601f19166020016141e0565b81815285602083850101111561459e57600080fd5b81602084016020830137600060209282018301528352928301359282019290925292915050565b600080600080600060a086880312156145dd57600080fd5b85356145e881613dd1565b945060208601356145f881613dd1565b935060408601356001600160401b0381111561461357600080fd5b61461f8882890161451a565b93505060608601356001600160401b0381111561463b57600080fd5b6146478882890161451a565b95989497509295608001359392505050565b6000806040838503121561466c57600080fd5b823561467781613dd1565b915060208301356001600160401b0381111561469257600080fd5b61469e85828601614250565b9150509250929050565b600081518084526020840193506020830160005b828110156146da5781518652602095860195909101906001016146bc565b5093949350505050565b602081526000613f5260208301846146a8565b6000806020838503121561470a57600080fd5b82356001600160401b0381111561472057600080fd5b613dc585828601613ea1565b6000806040838503121561473f57600080fd5b823561474a81613dd1565b946020939093013593505050565b6000806000806080858703121561476e57600080fd5b843561477981613dd1565b935060208501359250604085013561479081613dd1565b9396929550929360600135925050565b600081518084526020840193506020830160005b828110156146da5781516001600160a01b03168652602095860195909101906001016147b4565b6040815260006147ee60408301856147a0565b82810360208401526110a381856146a8565b60008060006060848603121561481557600080fd5b833561482081613dd1565b925060208401356001600160401b0381111561483b57600080fd5b6148478682870161451a565b93969395505050506040919091013590565b60006060828403121561486b57600080fd5b613f528383613e89565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126148a157600080fd5b9190910192915050565b6000808335601e198436030181126148c257600080fd5b8301803591506001600160401b038211156148dc57600080fd5b6020019150600581901b3603821315613a6957600080fd5b60608101823561490381613dd1565b6001600160a01b03168252602083013561491c81613dd1565b6001600160a01b03166020830152604083013561493881614210565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561498c57600080fd5b8151613f5281613dd1565b6000602082840312156149a957600080fd5b8151613f5281614443565b6000823560de198336030181126148a157600080fd5b6000602082840312156149dc57600080fd5b8135613f5281614443565b80516001600160a01b0390811683526020808301518216908401526040808301519091169083015260608082015190830152608080820151600091614a339085018263ffffffff169052565b5060a082015160e060a0850152614a4d60e08501826147a0565b905060c083015184820360c08601526110a382826146a8565b602081526000613f5260208301846149e7565b600060208284031215614a8b57600080fd5b5051919050565b600082601f830112614aa357600080fd5b8151614ab161426f8261422d565b8082825260208201915060208360051b860101925085831115614ad357600080fd5b602085015b838110156142bc578051835260209283019201614ad8565b60008060408385031215614b0357600080fd5b82516001600160401b03811115614b1957600080fd5b8301601f81018513614b2a57600080fd5b8051614b3861426f8261422d565b8082825260208201915060208360051b850101925087831115614b5a57600080fd5b6020840193505b82841015614b85578351614b7481613dd1565b825260209384019390910190614b61565b8095505050505060208301516001600160401b03811115614ba557600080fd5b61469e85828601614a92565b634e487b7160e01b600052601160045260246000fd5b808201808211156109c2576109c2614bb1565b818103818111156109c2576109c2614bb1565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060018201614c2357614c23614bb1565b5060010190565b82815260406020820152600061441860408301846149e7565b600060208284031215614c5557600080fd5b8135613f5281614210565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135614c8b81613dd1565b614c958183614c60565b50600181016020830135614ca881613dd1565b614cb28183614c60565b506040830135614cc181614210565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006109c23683614324565b828152604060208201526000825180604084015260005b81811015614d235760208186018101516060868401015201614d06565b506000606082850101526060601f19601f8301168401019150509392505050565b600060208284031215614d5657600080fd5b81516001600160e01b031981168114613f5257600080fd5b634e487b7160e01b600052602160045260246000fdfea26469706673582212201dd04025af6000406356d526b571e26e33ee1c6c1126fe4e303d250f965df9b864736f6c634300081b0033", } // 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 3930e4310..f6fb6b9dc 100644 --- a/pkg/bindings/DelegationManagerStorage/binding.go +++ b/pkg/bindings/DelegationManagerStorage/binding.go @@ -62,7 +62,7 @@ type ISignatureUtilsSignatureWithExpiry 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\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"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\":\"StakerOptOutWindowBlocksCannotDecrease\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotStaker\",\"inputs\":[]}]", } // DelegationManagerStorageABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EIP1271SignatureUtils/binding.go b/pkg/bindings/EIP1271SignatureUtils/binding.go index d5903bc37..d931a2b72 100644 --- a/pkg/bindings/EIP1271SignatureUtils/binding.go +++ b/pkg/bindings/EIP1271SignatureUtils/binding.go @@ -31,8 +31,8 @@ var ( // EIP1271SignatureUtilsMetaData contains all meta data concerning the EIP1271SignatureUtils contract. var EIP1271SignatureUtilsMetaData = &bind.MetaData{ - ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209832fdd04d36d0bbe78b7b9457ca6759978d3e81a33602cb69f518c735ee384664736f6c634300080c0033", + ABI: "[{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"inputs\":[]}]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122086f0e45761e8a933effdbcd0e9023709b61ae6a3fa6d56225e4ca34aba053bdb64736f6c634300081b0033", } // EIP1271SignatureUtilsABI 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 419305571..b20c0ea5e 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\"}],\"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\":\"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\":\"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: "0x60a06040523480156200001157600080fd5b506040516200342538038062003425833981016040819052620000349162000113565b6001600160a01b0381166080526200004b62000052565b5062000145565b600054610100900460ff1615620000bf5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161462000111576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012657600080fd5b81516001600160a01b03811681146200013e57600080fd5b9392505050565b6080516132b66200016f6000396000818161034801528181611475015261156401526132b66000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c806381b9716111610146578063a9059cbb116100c3578063dd62ed3e11610087578063dd62ed3e146105c5578063de0e9a3e146105d8578063ea598cb0146105eb578063eb415f45146105fe578063f1127ed814610606578063f2fde38b1461064357600080fd5b8063a9059cbb14610566578063aad41a4114610579578063b8c255941461058c578063c3cda5201461059f578063d505accf146105b257600080fd5b806395d89b411161010a57806395d89b411461051b5780639ab24eb0146105235780639aec4bae14610536578063a457c2d714610540578063a7d1195d1461055357600080fd5b806381b971611461049c57806384b0196e146104bd5780638da5cb5b146104d85780638e539e8c146104e957806391ddadf4146104fc57600080fd5b80633a46b1a8116101df5780635c19a95c116101a35780635c19a95c146103f95780636fcfff451461040c57806370a0823114610434578063715018a61461045d57806378aa33ba146104655780637ecebe001461048957600080fd5b80633a46b1a8146103305780633f4da4c6146103435780634bf5d7e91461038257806353957125146103ac578063587cde1e146103cd57600080fd5b80631ffacdef116102265780631ffacdef146102e057806323b872dd146102f3578063313ce567146103065780633644e51514610315578063395093511461031d57600080fd5b80630455e6941461026357806306fdde031461029c578063095ea7b3146102b15780631249c58b146102c457806318160ddd146102ce575b600080fd5b610287610271366004612b8a565b6101336020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102a4610656565b6040516102939190612bf2565b6102876102bf366004612c05565b6106e8565b6102cc610700565b005b6067545b604051908152602001610293565b6102cc6102ee366004612c3d565b61084b565b610287610301366004612c74565b6108b4565b60405160128152602001610293565b6102d26108d8565b61028761032b366004612c05565b6108e7565b6102d261033e366004612c05565b610909565b61036a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610293565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b60208201526102a4565b6102d26103ba366004612b8a565b6101306020526000908152604090205481565b61036a6103db366004612b8a565b6001600160a01b03908116600090815260fe60205260409020541690565b6102cc610407366004612b8a565b61098e565b61041f61041a366004612b8a565b61099b565b60405163ffffffff9091168152602001610293565b6102d2610442366004612b8a565b6001600160a01b031660009081526065602052604090205490565b6102cc6109c3565b610287610473366004612b8a565b6101346020526000908152604090205460ff1681565b6102d2610497366004612b8a565b6109d7565b6102d26104aa366004612b8a565b6101316020526000908152604090205481565b6104c56109f5565b6040516102939796959493929190612cb0565b6033546001600160a01b031661036a565b6102d26104f7366004612d46565b610a93565b610504610afb565b60405165ffffffffffff9091168152602001610293565b6102a4610b06565b6102d2610531366004612b8a565b610b15565b6102d26101325481565b61028761054e366004612c05565b610b97565b6102cc610561366004612e35565b610c12565b610287610574366004612c05565b61103f565b6102cc610587366004612f78565b61104d565b6102cc61059a366004612c3d565b611128565b6102cc6105ad366004612ff5565b611189565b6102cc6105c036600461304d565b6112bf565b6102d26105d33660046130b7565b611423565b6102cc6105e6366004612d46565b61144e565b6102cc6105f9366004612d46565b611542565b6102cc61163b565b6106196106143660046130ea565b611704565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610293565b6102cc610651366004612b8a565b611788565b6060606880546106659061311f565b80601f01602080910402602001604051908101604052809291908181526020018280546106919061311f565b80156106de5780601f106106b3576101008083540402835291602001916106de565b820191906000526020600020905b8154815290600101906020018083116106c157829003601f168201915b5050505050905090565b6000336106f68185856117fe565b5060019392505050565b336000908152610131602052604090205461077a5760405162461bcd60e51b815260206004820152602f60248201527f456967656e2e6d696e743a206d73672e73656e64657220686173206e6f206d6960448201526e6e74696e6720616c6c6f77616e636560881b60648201526084015b60405180910390fd5b336000908152610130602052604090205442116107f35760405162461bcd60e51b815260206004820152603160248201527f456967656e2e6d696e743a206d73672e73656e646572206973206e6f7420616c6044820152701b1bddd959081d1bc81b5a5b9d081e595d607a1b6064820152608401610771565b336000818152610131602052604081208054919055906108139082611922565b60405181815233907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859060200160405180910390a250565b6108536119b3565b6001600160a01b03821660008181526101336020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b6000336108c2858285611a0d565b6108cd858585611a81565b506001949350505050565b60006108e2611c3d565b905090565b6000336106f68185856108fa8383611423565b610904919061316a565b6117fe565b6000610913610afb565b65ffffffffffff1682106109655760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610771565b6001600160a01b038316600090815260ff602052604090206109879083611c47565b9392505050565b6109983382611d30565b50565b6001600160a01b038116600090815260ff60205260408120546109bd90611daa565b92915050565b6109cb6119b3565b6109d56000611e13565b565b6001600160a01b038116600090815260cb60205260408120546109bd565b6000606080600080600060606097546000801b148015610a155750609854155b610a595760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610771565b610a61611e65565b610a69611e74565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000610a9d610afb565b65ffffffffffff168210610aef5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610771565b6109bd61010083611c47565b60006108e242611e83565b6060606980546106659061311f565b6001600160a01b038116600090815260ff60205260408120548015610b84576001600160a01b038316600090815260ff6020526040902080546000198301908110610b6257610b62613182565b60009182526020909120015464010000000090046001600160e01b0316610b87565b60005b6001600160e01b03169392505050565b60003381610ba58286611423565b905083811015610c055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610771565b6108cd82868684036117fe565b600054610100900460ff1615808015610c325750600054600160ff909116105b80610c4c5750303b158015610c4c575060005460ff166001145b610caf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610771565b6000805460ff191660011790558015610cd2576000805461ff0019166101001790555b610cda611eea565b610d1e6040518060400160405280600581526020016422b4b3b2b760d91b8152506040518060400160405280600581526020016422a4a3a2a760d91b815250611f19565b610d2785611e13565b610d4d6040518060400160405280600581526020016422a4a3a2a760d91b815250611f4e565b8251845114610dd45760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74696e67416c6c6f77616e636573206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610771565b8151845114610e5b5760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74416c6c6f776564416674657273206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610771565b60005b8451811015610fea57838181518110610e7957610e79613182565b60200260200101516101316000878481518110610e9857610e98613182565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550828181518110610ed657610ed6613182565b60200260200101516101306000878481518110610ef557610ef5613182565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555060016101336000878481518110610f3a57610f3a613182565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550848181518110610f8b57610f8b613182565b60200260200101516001600160a01b03167fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed28436222716001604051610fd0911515815260200190565b60405180910390a280610fe281613198565b915050610e5e565b50600019610132558015611038576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6000336106f6818585611a81565b8281146110c25760405162461bcd60e51b815260206004820152603e60248201527f456967656e2e6d756c746973656e643a2072656365697665727320616e64206160448201527f6d6f756e7473206d757374206265207468652073616d65206c656e67746800006064820152608401610771565b60005b8381101561103857611116338686848181106110e3576110e3613182565b90506020020160208101906110f89190612b8a565b85858581811061110a5761110a613182565b90506020020135611a81565b8061112081613198565b9150506110c5565b6111306119b3565b6001600160a01b03821660008181526101346020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b91016108a8565b834211156111d95760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610771565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906112539061124b9060a00160405160208183030381529060405280519060200120611f98565b858585611fc5565b905061125e81611fed565b86146112ac5760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610771565b6112b68188611d30565b50505050505050565b8342111561130f5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610771565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861133e8c611fed565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061139982611f98565b905060006113a982878787611fc5565b9050896001600160a01b0316816001600160a01b03161461140c5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610771565b6114178a8a8a6117fe565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b611459333083611a81565b60405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea91906131b3565b6109985760405162461bcd60e51b8152602060048201526024808201527f456967656e2e756e777261703a2062454947454e207472616e736665722066616044820152631a5b195960e21b6064820152608401610771565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156115b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d991906131b3565b6116305760405162461bcd60e51b815260206004820152602260248201527f456967656e2e777261703a2062454947454e207472616e73666572206661696c604482015261195960f21b6064820152608401610771565b610998303383611a81565b6116436119b3565b60001961013254146116d35760405162461bcd60e51b815260206004820152604d60248201527f456967656e2e64697361626c655472616e736665725265737472696374696f6e60448201527f733a207472616e73666572207265737472696374696f6e732061726520616c7260648201526c1958591e48191a5cd8589b1959609a1b608482015260a401610771565b60006101328190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b60408051808201909152600080825260208201526001600160a01b038316600090815260ff60205260409020805463ffffffff841690811061174857611748613182565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6117906119b3565b6001600160a01b0381166117f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610771565b61099881611e13565b6001600160a01b0383166118605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610771565b6001600160a01b0382166118c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610771565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61192c8282612015565b6067546001600160e01b03101561199e5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610771565b6119ad6101006120ea836120f6565b50505050565b6033546001600160a01b031633146109d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610771565b6000611a198484611423565b905060001981146119ad5781811015611a745760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610771565b6119ad84848484036117fe565b6001600160a01b038316611ae55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610771565b6001600160a01b038216611b475760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610771565b611b5283838361226b565b6001600160a01b03831660009081526065602052604090205481811015611bca5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610771565b6001600160a01b0380851660008181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c2a9086815260200190565b60405180910390a36119ad848484612365565b60006108e2612397565b815460009081816005811115611ca1576000611c628461240b565b611c6c90856131d0565b600088815260209020909150869082015463ffffffff161115611c9157809150611c9f565b611c9c81600161316a565b92505b505b80821015611cee576000611cb583836124f0565b600088815260209020909150869082015463ffffffff161115611cda57809150611ce8565b611ce581600161316a565b92505b50611ca1565b8015611d1a576000868152602090208101600019015464010000000090046001600160e01b0316611d1d565b60005b6001600160e01b03169695505050505050565b6001600160a01b03828116600081815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46119ad82848361250b565b600063ffffffff821115611e0f5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610771565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060609980546106659061311f565b6060609a80546106659061311f565b600065ffffffffffff821115611e0f5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610771565b600054610100900460ff16611f115760405162461bcd60e51b8152600401610771906131e7565b6109d5612648565b600054610100900460ff16611f405760405162461bcd60e51b8152600401610771906131e7565b611f4a8282612678565b5050565b600054610100900460ff16611f755760405162461bcd60e51b8152600401610771906131e7565b61099881604051806040016040528060018152602001603160f81b8152506126c6565b60006109bd611fa5611c3d565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000611fd687878787612723565b91509150611fe3816127e7565b5095945050505050565b6001600160a01b038116600090815260cb602052604090208054600181018255905b50919050565b6001600160a01b03821661206b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610771565b6120776000838361226b565b8060676000828254612089919061316a565b90915550506001600160a01b0382166000818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611f4a60008383612365565b6000610987828461316a565b825460009081908181156121435760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152612158565b60408051808201909152600080825260208201525b905080602001516001600160e01b0316935061217884868863ffffffff16565b92506000821180156121a2575061218d610afb565b65ffffffffffff16816000015163ffffffff16145b156121e7576121b083612935565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff909216919091179055612261565b86604051806040016040528061220b6121fe610afb565b65ffffffffffff16611daa565b63ffffffff16815260200161221f86612935565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b610132544211612360576001600160a01b038316158061229357506001600160a01b03831630145b806122a657506001600160a01b03821630145b806122ca57506001600160a01b0383166000908152610133602052604090205460ff165b806122ee57506001600160a01b0382166000908152610134602052604090205460ff165b6123605760405162461bcd60e51b815260206004820152603a60248201527f456967656e2e5f6265666f7265546f6b656e5472616e736665723a2066726f6d60448201527f206f7220746f206d7573742062652077686974656c69737465640000000000006064820152608401610771565b505050565b6001600160a01b03838116600090815260fe60205260408082205485841683529120546123609291821691168361250b565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6123c261299e565b6123ca6129f7565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008161241a57506000919050565b6000600161242784612a28565b901c6001901b9050600181848161244057612440613232565b048201901c9050600181848161245857612458613232565b048201901c9050600181848161247057612470613232565b048201901c9050600181848161248857612488613232565b048201901c905060018184816124a0576124a0613232565b048201901c905060018184816124b8576124b8613232565b048201901c905060018184816124d0576124d0613232565b048201901c9050610987818285816124ea576124ea613232565b04612abc565b60006124ff6002848418613248565b6109879084841661316a565b816001600160a01b0316836001600160a01b03161415801561252d5750600081115b15612360576001600160a01b038316156125bb576001600160a01b038316600090815260ff60205260408120819061256890612ad2856120f6565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516125b0929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615612360576001600160a01b038216600090815260ff6020526040812081906125f1906120ea856120f6565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612639929190918252602082015260400190565b60405180910390a25050505050565b600054610100900460ff1661266f5760405162461bcd60e51b8152600401610771906131e7565b6109d533611e13565b600054610100900460ff1661269f5760405162461bcd60e51b8152600401610771906131e7565b81516126b2906068906020850190612ade565b508051612360906069906020840190612ade565b600054610100900460ff166126ed5760405162461bcd60e51b8152600401610771906131e7565b8151612700906099906020850190612ade565b50805161271490609a906020840190612ade565b50506000609781905560985550565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561275a57506000905060036127de565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156127ae573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127d7576000600192509250506127de565b9150600090505b94509492505050565b60008160048111156127fb576127fb61326a565b14156128045750565b60018160048111156128185761281861326a565b14156128665760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610771565b600281600481111561287a5761287a61326a565b14156128c85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610771565b60038160048111156128dc576128dc61326a565b14156109985760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610771565b60006001600160e01b03821115611e0f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610771565b6000806129a9611e65565b8051909150156129c0578051602090910120919050565b60975480156129cf5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080612a02611e74565b805190915015612a19578051602090910120919050565b60985480156129cf5792915050565b600080608083901c15612a3d57608092831c92015b604083901c15612a4f57604092831c92015b602083901c15612a6157602092831c92015b601083901c15612a7357601092831c92015b600883901c15612a8557600892831c92015b600483901c15612a9757600492831c92015b600283901c15612aa957600292831c92015b600183901c156109bd5760010192915050565b6000818310612acb5781610987565b5090919050565b600061098782846131d0565b828054612aea9061311f565b90600052602060002090601f016020900481019282612b0c5760008555612b52565b82601f10612b2557805160ff1916838001178555612b52565b82800160010185558215612b52579182015b82811115612b52578251825591602001919060010190612b37565b50611e0f9291505b80821115611e0f5760008155600101612b5a565b80356001600160a01b0381168114612b8557600080fd5b919050565b600060208284031215612b9c57600080fd5b61098782612b6e565b6000815180845260005b81811015612bcb57602081850181015186830182015201612baf565b81811115612bdd576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006109876020830184612ba5565b60008060408385031215612c1857600080fd5b612c2183612b6e565b946020939093013593505050565b801515811461099857600080fd5b60008060408385031215612c5057600080fd5b612c5983612b6e565b91506020830135612c6981612c2f565b809150509250929050565b600080600060608486031215612c8957600080fd5b612c9284612b6e565b9250612ca060208501612b6e565b9150604084013590509250925092565b60ff60f81b881681526000602060e081840152612cd060e084018a612ba5565b8381036040850152612ce2818a612ba5565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015612d3457835183529284019291840191600101612d18565b50909c9b505050505050505050505050565b600060208284031215612d5857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612d9e57612d9e612d5f565b604052919050565b600067ffffffffffffffff821115612dc057612dc0612d5f565b5060051b60200190565b600082601f830112612ddb57600080fd5b81356020612df0612deb83612da6565b612d75565b82815260059290921b84018101918181019086841115612e0f57600080fd5b8286015b84811015612e2a5780358352918301918301612e13565b509695505050505050565b60008060008060808587031215612e4b57600080fd5b612e5485612b6e565b935060208086013567ffffffffffffffff80821115612e7257600080fd5b818801915088601f830112612e8657600080fd5b8135612e94612deb82612da6565b81815260059190911b8301840190848101908b831115612eb357600080fd5b938501935b82851015612ed857612ec985612b6e565b82529385019390850190612eb8565b975050506040880135925080831115612ef057600080fd5b612efc89848a01612dca565b94506060880135925080831115612f1257600080fd5b5050612f2087828801612dca565b91505092959194509250565b60008083601f840112612f3e57600080fd5b50813567ffffffffffffffff811115612f5657600080fd5b6020830191508360208260051b8501011115612f7157600080fd5b9250929050565b60008060008060408587031215612f8e57600080fd5b843567ffffffffffffffff80821115612fa657600080fd5b612fb288838901612f2c565b90965094506020870135915080821115612fcb57600080fd5b50612fd887828801612f2c565b95989497509550505050565b803560ff81168114612b8557600080fd5b60008060008060008060c0878903121561300e57600080fd5b61301787612b6e565b9550602087013594506040870135935061303360608801612fe4565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561306857600080fd5b61307188612b6e565b965061307f60208901612b6e565b9550604088013594506060880135935061309b60808901612fe4565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156130ca57600080fd5b6130d383612b6e565b91506130e160208401612b6e565b90509250929050565b600080604083850312156130fd57600080fd5b61310683612b6e565b9150602083013563ffffffff81168114612c6957600080fd5b600181811c9082168061313357607f821691505b6020821081141561200f57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561317d5761317d613154565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156131ac576131ac613154565b5060010190565b6000602082840312156131c557600080fd5b815161098781612c2f565b6000828210156131e2576131e2613154565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261326557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220e4ee2d6f1ea92311c558c0a9f0569a6bf43ef4fd4d69cf13ea69ec8c5e2bf86a64736f6c634300080c0033", + Bin: "0x60a060405234801561001057600080fd5b5060405161343c38038061343c83398101604081905261002f91610109565b6001600160a01b03811660805261004461004a565b50610139565b600054610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614610107576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011b57600080fd5b81516001600160a01b038116811461013257600080fd5b9392505050565b6080516132da610162600039600081816103480152818161145d015261154c01526132da6000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c806381b9716111610146578063a9059cbb116100c3578063dd62ed3e11610087578063dd62ed3e146105c5578063de0e9a3e146105d8578063ea598cb0146105eb578063eb415f45146105fe578063f1127ed814610606578063f2fde38b1461064357600080fd5b8063a9059cbb14610566578063aad41a4114610579578063b8c255941461058c578063c3cda5201461059f578063d505accf146105b257600080fd5b806395d89b411161010a57806395d89b411461051b5780639ab24eb0146105235780639aec4bae14610536578063a457c2d714610540578063a7d1195d1461055357600080fd5b806381b971611461049c57806384b0196e146104bd5780638da5cb5b146104d85780638e539e8c146104e957806391ddadf4146104fc57600080fd5b80633a46b1a8116101df5780635c19a95c116101a35780635c19a95c146103f95780636fcfff451461040c57806370a0823114610434578063715018a61461045d57806378aa33ba146104655780637ecebe001461048957600080fd5b80633a46b1a8146103305780633f4da4c6146103435780634bf5d7e91461038257806353957125146103ac578063587cde1e146103cd57600080fd5b80631ffacdef116102265780631ffacdef146102e057806323b872dd146102f3578063313ce567146103065780633644e51514610315578063395093511461031d57600080fd5b80630455e6941461026357806306fdde031461029c578063095ea7b3146102b15780631249c58b146102c457806318160ddd146102ce575b600080fd5b610287610271366004612ac5565b6101336020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102a4610656565b6040516102939190612b26565b6102876102bf366004612b39565b6106e8565b6102cc610702565b005b6067545b604051908152602001610293565b6102cc6102ee366004612b71565b61084d565b610287610301366004612ba8565b6108b6565b60405160128152602001610293565b6102d26108da565b61028761032b366004612b39565b6108e9565b6102d261033e366004612b39565b61090b565b61036a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610293565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b60208201526102a4565b6102d26103ba366004612ac5565b6101306020526000908152604090205481565b61036a6103db366004612ac5565b6001600160a01b03908116600090815260fe60205260409020541690565b6102cc610407366004612ac5565b610990565b61041f61041a366004612ac5565b61099d565b60405163ffffffff9091168152602001610293565b6102d2610442366004612ac5565b6001600160a01b031660009081526065602052604090205490565b6102cc6109bf565b610287610473366004612ac5565b6101346020526000908152604090205460ff1681565b6102d2610497366004612ac5565b6109d3565b6102d26104aa366004612ac5565b6101316020526000908152604090205481565b6104c56109f1565b6040516102939796959493929190612be5565b6033546001600160a01b031661036a565b6102d26104f7366004612c7d565b610a8f565b610504610af7565b60405165ffffffffffff9091168152602001610293565b6102a4610b02565b6102d2610531366004612ac5565b610b11565b6102d26101325481565b61028761054e366004612b39565b610b93565b6102cc610561366004612d64565b610c0e565b610287610574366004612b39565b611031565b6102cc610587366004612eb5565b61103f565b6102cc61059a366004612b71565b611110565b6102cc6105ad366004612f37565b611171565b6102cc6105c0366004612f8f565b6112a7565b6102d26105d3366004612ffa565b61140b565b6102cc6105e6366004612c7d565b611436565b6102cc6105f9366004612c7d565b61152a565b6102cc611623565b61061961061436600461302d565b6116ec565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610293565b6102cc610651366004612ac5565b611770565b60606068805461066590613062565b80601f016020809104026020016040519081016040528092919081815260200182805461069190613062565b80156106de5780601f106106b3576101008083540402835291602001916106de565b820191906000526020600020905b8154815290600101906020018083116106c157829003601f168201915b5050505050905090565b6000336106f68185856117e6565b60019150505b92915050565b336000908152610131602052604090205461077c5760405162461bcd60e51b815260206004820152602f60248201527f456967656e2e6d696e743a206d73672e73656e64657220686173206e6f206d6960448201526e6e74696e6720616c6c6f77616e636560881b60648201526084015b60405180910390fd5b336000908152610130602052604090205442116107f55760405162461bcd60e51b815260206004820152603160248201527f456967656e2e6d696e743a206d73672e73656e646572206973206e6f7420616c6044820152701b1bddd959081d1bc81b5a5b9d081e595d607a1b6064820152608401610773565b33600081815261013160205260408120805491905590610815908261190a565b60405181815233907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859060200160405180910390a250565b61085561199b565b6001600160a01b03821660008181526101336020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b6000336108c48582856119f5565b6108cf858585611a69565b506001949350505050565b60006108e4611c25565b905090565b6000336106f68185856108fc838361140b565b61090691906130ac565b6117e6565b6000610915610af7565b65ffffffffffff1682106109675760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610773565b6001600160a01b038316600090815260ff602052604090206109899083611c2f565b9392505050565b61099a3382611d18565b50565b6001600160a01b038116600090815260ff60205260408120546106fc90611d92565b6109c761199b565b6109d16000611dfb565b565b6001600160a01b038116600090815260cb60205260408120546106fc565b6000606080600080600060606097546000801b148015610a115750609854155b610a555760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610773565b610a5d611e4d565b610a65611e5c565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000610a99610af7565b65ffffffffffff168210610aeb5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610773565b6106fc61010083611c2f565b60006108e442611e6b565b60606069805461066590613062565b6001600160a01b038116600090815260ff60205260408120548015610b80576001600160a01b038316600090815260ff6020526040902080546000198301908110610b5e57610b5e6130bf565b60009182526020909120015464010000000090046001600160e01b0316610b83565b60005b6001600160e01b03169392505050565b60003381610ba1828661140b565b905083811015610c015760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610773565b6108cf82868684036117e6565b600054610100900460ff1615808015610c2e5750600054600160ff909116105b80610c485750303b158015610c48575060005460ff166001145b610cab5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610773565b6000805460ff191660011790558015610cce576000805461ff0019166101001790555b610cd6611ed2565b610d1a6040518060400160405280600581526020016422b4b3b2b760d91b8152506040518060400160405280600581526020016422a4a3a2a760d91b815250611f01565b610d2385611dfb565b610d496040518060400160405280600581526020016422a4a3a2a760d91b815250611f36565b8251845114610dd05760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74696e67416c6c6f77616e636573206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610773565b8151845114610e575760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74416c6c6f776564416674657273206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610773565b60005b8451811015610fdc57838181518110610e7557610e756130bf565b60200260200101516101316000878481518110610e9457610e946130bf565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550828181518110610ed257610ed26130bf565b60200260200101516101306000878481518110610ef157610ef16130bf565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555060016101336000878481518110610f3657610f366130bf565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550848181518110610f8757610f876130bf565b60200260200101516001600160a01b03167fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed28436222716001604051610fcc911515815260200190565b60405180910390a2600101610e5a565b5060001961013255801561102a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6000336106f6818585611a69565b8281146110b45760405162461bcd60e51b815260206004820152603e60248201527f456967656e2e6d756c746973656e643a2072656365697665727320616e64206160448201527f6d6f756e7473206d757374206265207468652073616d65206c656e67746800006064820152608401610773565b60005b8381101561102a57611108338686848181106110d5576110d56130bf565b90506020020160208101906110ea9190612ac5565b8585858181106110fc576110fc6130bf565b90506020020135611a69565b6001016110b7565b61111861199b565b6001600160a01b03821660008181526101346020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b91016108aa565b834211156111c15760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610773565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061123b906112339060a00160405160208183030381529060405280519060200120611f80565b858585611fad565b905061124681611fd5565b86146112945760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610773565b61129e8188611d18565b50505050505050565b834211156112f75760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610773565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886113268c611fd5565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061138182611f80565b9050600061139182878787611fad565b9050896001600160a01b0316816001600160a01b0316146113f45760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610773565b6113ff8a8a8a6117e6565b50505050505050505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b611441333083611a69565b60405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156114ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d291906130d5565b61099a5760405162461bcd60e51b8152602060048201526024808201527f456967656e2e756e777261703a2062454947454e207472616e736665722066616044820152631a5b195960e21b6064820152608401610773565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af115801561159d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c191906130d5565b6116185760405162461bcd60e51b815260206004820152602260248201527f456967656e2e777261703a2062454947454e207472616e73666572206661696c604482015261195960f21b6064820152608401610773565b61099a303383611a69565b61162b61199b565b60001961013254146116bb5760405162461bcd60e51b815260206004820152604d60248201527f456967656e2e64697361626c655472616e736665725265737472696374696f6e60448201527f733a207472616e73666572207265737472696374696f6e732061726520616c7260648201526c1958591e48191a5cd8589b1959609a1b608482015260a401610773565b60006101328190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b60408051808201909152600080825260208201526001600160a01b038316600090815260ff60205260409020805463ffffffff8416908110611730576117306130bf565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b61177861199b565b6001600160a01b0381166117dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610773565b61099a81611dfb565b6001600160a01b0383166118485760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610773565b6001600160a01b0382166118a95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610773565b6001600160a01b0383811660008181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6119148282611ffd565b6067546001600160e01b0310156119865760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610773565b6119956101006120d2836120de565b50505050565b6033546001600160a01b031633146109d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610773565b6000611a01848461140b565b905060001981146119955781811015611a5c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610773565b61199584848484036117e6565b6001600160a01b038316611acd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610773565b6001600160a01b038216611b2f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610773565b611b3a838383612253565b6001600160a01b03831660009081526065602052604090205481811015611bb25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610773565b6001600160a01b0380851660008181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c129086815260200190565b60405180910390a361199584848461234d565b60006108e461237f565b815460009081816005811115611c89576000611c4a846123f3565b611c5490856130f2565b600088815260209020909150869082015463ffffffff161115611c7957809150611c87565b611c848160016130ac565b92505b505b80821015611cd6576000611c9d83836124db565b600088815260209020909150869082015463ffffffff161115611cc257809150611cd0565b611ccd8160016130ac565b92505b50611c89565b8015611d02576000868152602090208101600019015464010000000090046001600160e01b0316611d05565b60005b6001600160e01b03169695505050505050565b6001600160a01b03828116600081815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46119958284836124f6565b600063ffffffff821115611df75760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610773565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606099805461066590613062565b6060609a805461066590613062565b600065ffffffffffff821115611df75760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610773565b600054610100900460ff16611ef95760405162461bcd60e51b815260040161077390613105565b6109d1612633565b600054610100900460ff16611f285760405162461bcd60e51b815260040161077390613105565b611f328282612663565b5050565b600054610100900460ff16611f5d5760405162461bcd60e51b815260040161077390613105565b61099a81604051806040016040528060018152602001603160f81b8152506126a3565b60006106fc611f8d611c25565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000611fbe878787876126f2565b91509150611fcb816127b6565b5095945050505050565b6001600160a01b038116600090815260cb602052604090208054600181018255905b50919050565b6001600160a01b0382166120535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610773565b61205f60008383612253565b806067600082825461207191906130ac565b90915550506001600160a01b0382166000818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611f326000838361234d565b600061098982846130ac565b8254600090819081811561212b5760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152612140565b60408051808201909152600080825260208201525b905080602001516001600160e01b0316935061216084868863ffffffff16565b925060008211801561218a5750612175610af7565b65ffffffffffff16816000015163ffffffff16145b156121cf5761219883612900565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff909216919091179055612249565b8660405180604001604052806121f36121e6610af7565b65ffffffffffff16611d92565b63ffffffff16815260200161220786612900565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b610132544211612348576001600160a01b038316158061227b57506001600160a01b03831630145b8061228e57506001600160a01b03821630145b806122b257506001600160a01b0383166000908152610133602052604090205460ff165b806122d657506001600160a01b0382166000908152610134602052604090205460ff165b6123485760405162461bcd60e51b815260206004820152603a60248201527f456967656e2e5f6265666f7265546f6b656e5472616e736665723a2066726f6d60448201527f206f7220746f206d7573742062652077686974656c69737465640000000000006064820152608401610773565b505050565b6001600160a01b03838116600090815260fe6020526040808220548584168352912054612348929182169116836124f6565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6123aa612969565b6123b26129c2565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008160000361240557506000919050565b60006001612412846129f3565b901c6001901b9050600181848161242b5761242b613150565b048201901c9050600181848161244357612443613150565b048201901c9050600181848161245b5761245b613150565b048201901c9050600181848161247357612473613150565b048201901c9050600181848161248b5761248b613150565b048201901c905060018184816124a3576124a3613150565b048201901c905060018184816124bb576124bb613150565b048201901c9050610989818285816124d5576124d5613150565b04612a87565b60006124ea6002848418613166565b610989908484166130ac565b816001600160a01b0316836001600160a01b0316141580156125185750600081115b15612348576001600160a01b038316156125a6576001600160a01b038316600090815260ff60205260408120819061255390612a9d856120de565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161259b929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615612348576001600160a01b038216600090815260ff6020526040812081906125dc906120d2856120de565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612624929190918252602082015260400190565b60405180910390a25050505050565b600054610100900460ff1661265a5760405162461bcd60e51b815260040161077390613105565b6109d133611dfb565b600054610100900460ff1661268a5760405162461bcd60e51b815260040161077390613105565b606861269683826131cf565b50606961234882826131cf565b600054610100900460ff166126ca5760405162461bcd60e51b815260040161077390613105565b60996126d683826131cf565b50609a6126e382826131cf565b50506000609781905560985550565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561272957506000905060036127ad565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561277d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166127a6576000600192509250506127ad565b9150600090505b94509492505050565b60008160048111156127ca576127ca61328e565b036127d25750565b60018160048111156127e6576127e661328e565b036128335760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610773565b60028160048111156128475761284761328e565b036128945760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610773565b60038160048111156128a8576128a861328e565b0361099a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610773565b60006001600160e01b03821115611df75760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610773565b600080612974611e4d565b80519091501561298b578051602090910120919050565b609754801561299a5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b6000806129cd611e5c565b8051909150156129e4578051602090910120919050565b609854801561299a5792915050565b600080608083901c15612a0857608092831c92015b604083901c15612a1a57604092831c92015b602083901c15612a2c57602092831c92015b601083901c15612a3e57601092831c92015b600883901c15612a5057600892831c92015b600483901c15612a6257600492831c92015b600283901c15612a7457600292831c92015b600183901c156106fc5760010192915050565b6000818310612a965781610989565b5090919050565b600061098982846130f2565b80356001600160a01b0381168114612ac057600080fd5b919050565b600060208284031215612ad757600080fd5b61098982612aa9565b6000815180845260005b81811015612b0657602081850181015186830182015201612aea565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109896020830184612ae0565b60008060408385031215612b4c57600080fd5b612b5583612aa9565b946020939093013593505050565b801515811461099a57600080fd5b60008060408385031215612b8457600080fd5b612b8d83612aa9565b91506020830135612b9d81612b63565b809150509250929050565b600080600060608486031215612bbd57600080fd5b612bc684612aa9565b9250612bd460208501612aa9565b929592945050506040919091013590565b60ff60f81b8816815260e060208201526000612c0460e0830189612ae0565b8281036040840152612c168189612ae0565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015612c6c578351835260209384019390920191600101612c4e565b50909b9a5050505050505050505050565b600060208284031215612c8f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612cd557612cd5612c96565b604052919050565b600067ffffffffffffffff821115612cf757612cf7612c96565b5060051b60200190565b600082601f830112612d1257600080fd5b8135612d25612d2082612cdd565b612cac565b8082825260208201915060208360051b860101925085831115612d4757600080fd5b602085015b83811015611fcb578035835260209283019201612d4c565b60008060008060808587031215612d7a57600080fd5b612d8385612aa9565b9350602085013567ffffffffffffffff811115612d9f57600080fd5b8501601f81018713612db057600080fd5b8035612dbe612d2082612cdd565b8082825260208201915060208360051b850101925089831115612de057600080fd5b6020840193505b82841015612e0957612df884612aa9565b825260209384019390910190612de7565b9550505050604085013567ffffffffffffffff811115612e2857600080fd5b612e3487828801612d01565b925050606085013567ffffffffffffffff811115612e5157600080fd5b612e5d87828801612d01565b91505092959194509250565b60008083601f840112612e7b57600080fd5b50813567ffffffffffffffff811115612e9357600080fd5b6020830191508360208260051b8501011115612eae57600080fd5b9250929050565b60008060008060408587031215612ecb57600080fd5b843567ffffffffffffffff811115612ee257600080fd5b612eee87828801612e69565b909550935050602085013567ffffffffffffffff811115612f0e57600080fd5b612f1a87828801612e69565b95989497509550505050565b803560ff81168114612ac057600080fd5b60008060008060008060c08789031215612f5057600080fd5b612f5987612aa9565b95506020870135945060408701359350612f7560608801612f26565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a031215612faa57600080fd5b612fb388612aa9565b9650612fc160208901612aa9565b95506040880135945060608801359350612fdd60808901612f26565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561300d57600080fd5b61301683612aa9565b915061302460208401612aa9565b90509250929050565b6000806040838503121561304057600080fd5b61304983612aa9565b9150602083013563ffffffff81168114612b9d57600080fd5b600181811c9082168061307657607f821691505b602082108103611ff757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106fc576106fc613096565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156130e757600080fd5b815161098981612b63565b818103818111156106fc576106fc613096565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261318357634e487b7160e01b600052601260045260246000fd5b500490565b601f82111561234857806000526020600020601f840160051c810160208510156131af5750805b601f840160051c820191505b8181101561102a57600081556001016131bb565b815167ffffffffffffffff8111156131e9576131e9612c96565b6131fd816131f78454613062565b84613188565b6020601f82116001811461323157600083156132195750848201515b600019600385901b1c1916600184901b17845561102a565b600084815260208120601f198516915b828110156132615787850151825560209485019460019092019101613241565b508482101561327f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220274d065de74f05d6c17e8d4ff5e09b91368cdffa3896ad11c7c347223e2ebe7b64736f6c634300081b0033", } // 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 7016ff63f..ec4c5afff 100644 --- a/pkg/bindings/EigenPod/binding.go +++ b/pkg/bindings/EigenPod/binding.go @@ -72,8 +72,8 @@ type IEigenPodValidatorInfo 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\":\"_GENESIS_TIME\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"GENESIS_TIME\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false}]", - Bin: "0x60e06040523480156200001157600080fd5b5060405162004ad038038062004ad0833981016040819052620000349162000142565b6001600160a01b03808416608052821660a0526001600160401b03811660c0526200005e62000067565b505050620001a1565b600054610100900460ff1615620000d45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000127576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013f57600080fd5b50565b6000806000606084860312156200015857600080fd5b8351620001658162000129565b6020850151909350620001788162000129565b60408501519092506001600160401b03811681146200019657600080fd5b809150509250925092565b60805160a05160c0516148b26200021e60003960006105ff0152600081816102bd0152818161063a015281816106ec01528181610abf01528181610d6c015281816110f40152818161119c0152818161143c015281816118db01528181611a8401526131250152600081816104b8015261126701526148b26000f3fe60806040526004361061016a5760003560e01c80636fcd0e53116100d1578063c49074421161008a578063dda3346c11610064578063dda3346c1461058d578063ee94d67c146105ad578063f074ba62146105cd578063f2882461146105ed57600080fd5b8063c49074421461052d578063c4d66de81461054d578063d06d55871461056d57600080fd5b80636fcd0e53146104425780637439841f1461046f57806374cdd798146104a657806388676cad146104da5780639b4e4634146104fa578063b522538a1461050d57600080fd5b80634665bcda116101235780634665bcda146102ab57806347d28372146102df57806352396a591461039f57806358753357146103d557806358eaee79146103f55780636c0d2d5a1461042257600080fd5b8063039157d2146101a95780630b18ff66146101cb5780632340e8d3146102085780633474aa161461022c5780633f65cf191461026457806342ecff2a1461028457600080fd5b366101a4576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101b557600080fd5b506101c96101c4366004613b66565b610621565b005b3480156101d757600080fd5b506033546101eb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561021457600080fd5b5061021e60395481565b6040519081526020016101ff565b34801561023857600080fd5b5060345461024c906001600160401b031681565b6040516001600160401b0390911681526020016101ff565b34801561027057600080fd5b506101c961027f366004613c24565b610a67565b34801561029057600080fd5b50603a5461024c90600160401b90046001600160401b031681565b3480156102b757600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102eb57600080fd5b5061035b6040805160808101825260008082526020820181905291810182905260608101919091525060408051608081018252603c548152603d5462ffffff811660208301526001600160401b03630100000082041692820192909252600160581b909104600f0b606082015290565b6040516101ff91908151815260208083015162ffffff16908201526040808301516001600160401b031690820152606091820151600f0b9181019190915260800190565b3480156103ab57600080fd5b5061024c6103ba366004613cf2565b603b602052600090815260409020546001600160401b031681565b3480156103e157600080fd5b50603e546101eb906001600160a01b031681565b34801561040157600080fd5b50610415610410366004613d4e565b610dd6565b6040516101ff9190613dc7565b34801561042e57600080fd5b5061021e61043d366004613cf2565b610e3b565b34801561044e57600080fd5b5061046261045d366004613dd5565b610fef565b6040516101ff9190613dee565b34801561047b57600080fd5b5061041561048a366004613dd5565b600090815260366020526040902054600160c01b900460ff1690565b3480156104b257600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e657600080fd5b506101c96104f5366004613e44565b61109c565b6101c9610508366004613e61565b611191565b34801561051957600080fd5b50610462610528366004613d4e565b61133e565b34801561053957600080fd5b506101c9610548366004613ef4565b611431565b34801561055957600080fd5b506101c9610568366004613f20565b61166e565b34801561057957600080fd5b506101c9610588366004613f20565b611805565b34801561059957600080fd5b506101c96105a8366004614011565b611898565b3480156105b957600080fd5b50603a5461024c906001600160401b031681565b3480156105d957600080fd5b506101c96105e83660046140e2565b611a6b565b3480156105f957600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad919061414a565b156106d35760405162461bcd60e51b81526004016106ca90614167565b60405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561073b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075f919061414a565b1561077c5760405162461bcd60e51b81526004016106ca90614167565b60006107c261078b85806141c4565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611ebe92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561083157610831613d8f565b600281111561084257610842613d8f565b81525050905080604001516001600160401b0316876001600160401b0316116108d5576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f642e7665726966795374616c6542616c616e63653a2070726f60448201527f6f66206973206f6c646572207468616e206c61737420636865636b706f696e7460648201526084016106ca565b6001816060015160028111156108ed576108ed613d8f565b146109575760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e7665726966795374616c6542616c616e63653a2076616c604482015273696461746f72206973206e6f742061637469766560601b60648201526084016106ca565b61099b61096486806141c4565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611ee292505050565b610a1f5760405162461bcd60e51b815260206004820152604960248201527f456967656e506f642e7665726966795374616c6542616c616e63653a2076616c60448201527f696461746f72206d75737420626520736c617368656420746f206265206d61726064820152686b6564207374616c6560b81b608482015260a4016106ca565b610a31610a2b88610e3b565b87611f0c565b610a548635610a4087806141c4565b610a4d60208a018a61420d565b8651612067565b610a5e600061227e565b50505050505050565b6033546001600160a01b0316331480610a8a5750603e546001600160a01b031633145b610aa65760405162461bcd60e51b81526004016106ca90614253565b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b32919061414a565b15610b4f5760405162461bcd60e51b81526004016106ca90614167565b8584148015610b5d57508382145b610bed5760405162461bcd60e51b815260206004820152605560248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a2076616c696461746f72496e646963657320616e642070726f6f666064820152740e640daeae6e840c4ca40e6c2daca40d8cadccee8d605b1b608482015260a4016106ca565b603a546001600160401b03600160401b9091048116908a1611610c8d5760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f642e7665726966795769746864726177616c43726564656e7460448201527f69616c733a207370656369666965642074696d657374616d7020697320746f6f60648201526b0819985c881a5b881c185cdd60a21b608482015260a4016106ca565b610c9f610c998a610e3b565b89611f0c565b6000805b87811015610d4257610d248a358a8a84818110610cc257610cc26142c7565b9050602002016020810190610cd791906142dd565b898985818110610ce957610ce96142c7565b9050602002810190610cfb919061420d565b898987818110610d0d57610d0d6142c7565b9050602002810190610d1f91906141c4565b612514565b610d2e908361431a565b915080610d3a81614332565b915050610ca3565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b158015610db257600080fd5b505af1158015610dc6573d6000803e3d6000fd5b5050505050505050505050505050565b600080610e1884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612afa92505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b6000610e4a611fff600c61434d565b610e5d6001600160401b0384164261436c565b10610ec65760405162461bcd60e51b815260206004820152603360248201527f456967656e506f642e676574506172656e74426c6f636b526f6f743a2074696d604482015272657374616d70206f7574206f662072616e676560681b60648201526084016106ca565b604080516001600160401b03841660208201526000918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f1981840301815290829052610f0e916143b3565b600060405180830381855afa9150503d8060008114610f49576040519150601f19603f3d011682016040523d82523d6000602084013e610f4e565b606091505b5091509150818015610f61575060008151115b610fd35760405162461bcd60e51b815260206004820152603860248201527f456967656e506f642e676574506172656e74426c6f636b526f6f743a20696e7660448201527f616c696420626c6f636b20726f6f742072657475726e6564000000000000000060648201526084016106ca565b80806020019051810190610fe791906143cf565b949350505050565b6110176040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff16600281111561108257611082613d8f565b600281111561109357611093613d8f565b90525092915050565b6033546001600160a01b03163314806110bf5750603e546001600160a01b031633145b6110db5760405162461bcd60e51b81526004016106ca90614253565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611143573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611167919061414a565b156111845760405162461bcd60e51b81526004016106ca90614167565b61118d8261227e565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111d95760405162461bcd60e51b81526004016106ca906143e8565b346801bc16d674ec800000146112655760405162461bcd60e51b8152602060048201526044602482018190527f456967656e506f642e7374616b653a206d75737420696e697469616c6c792073908201527f74616b6520666f7220616e792076616c696461746f72207769746820333220656064820152633a3432b960e11b608482015260a4016106ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec80000087876112a8612bf4565b8888886040518863ffffffff1660e01b81526004016112cc9695949392919061448e565b6000604051808303818588803b1580156112e557600080fd5b505af11580156112f9573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e23858560405161132f9291906144dd565b60405180910390a15050505050565b6113666040805160808101825260008082526020820181905291810182905290606082015290565b603660006113a985858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612afa92505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561141657611416613d8f565b600281111561142757611427613d8f565b9052509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114795760405162461bcd60e51b81526004016106ca906143e8565b611487633b9aca0082614507565b156115115760405162461bcd60e51b815260206004820152604e60248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74576569206d75737420626520612077686f60648201526d1b194811ddd95a48185b5bdd5b9d60921b608482015260a4016106ca565b6000611521633b9aca008361451b565b6034549091506001600160401b0390811690821611156115da5760405162461bcd60e51b815260206004820152606260248201527f456967656e506f642e776974686472617752657374616b6564426561636f6e4360448201527f6861696e4554483a20616d6f756e74477765692065786365656473207769746860648201527f6472617761626c6552657374616b6564457865637574696f6e4c617965724777608482015261656960f01b60a482015260c4016106ca565b603480548291906000906115f89084906001600160401b031661452f565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161165791815260200190565b60405180910390a26116698383612c39565b505050565b600054610100900460ff161580801561168e5750600054600160ff909116105b806116a85750303b1580156116a8575060005460ff166001145b61170b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106ca565b6000805460ff19166001179055801561172e576000805461ff0019166101001790555b6001600160a01b0382166117a15760405162461bcd60e51b815260206004820152603460248201527f456967656e506f642e696e697469616c697a653a20706f644f776e65722063616044820152736e6e6f74206265207a65726f206164647265737360601b60648201526084016106ca565b603380546001600160a01b0319166001600160a01b038416179055801561118d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b0316331461182f5760405162461bcd60e51b81526004016106ca90614557565b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146118c25760405162461bcd60e51b81526004016106ca90614557565b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e919061414a565b1561196b5760405162461bcd60e51b81526004016106ca90614167565b82518451146119f65760405162461bcd60e51b815260206004820152604b60248201527f456967656e506f642e7265636f766572546f6b656e733a20746f6b656e4c697360448201527f7420616e6420616d6f756e7473546f5769746864726177206d7573742062652060648201526a0e6c2daca40d8cadccee8d60ab1b608482015260a4016106ca565b60005b8451811015611a6457611a5283858381518110611a1857611a186142c7565b6020026020010151878481518110611a3257611a326142c7565b60200260200101516001600160a01b0316612d529092919063ffffffff16565b80611a5c81614332565b9150506119f9565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af7919061414a565b15611b145760405162461bcd60e51b81526004016106ca90614167565b603a54600160401b90046001600160401b031680611bc05760405162461bcd60e51b815260206004820152605860248201527f456967656e506f642e766572696679436865636b706f696e7450726f6f66733a60448201527f206d75737420686176652061637469766520636865636b706f696e7420746f2060648201527f706572666f726d20636865636b706f696e742070726f6f660000000000000000608482015260a4016106ca565b60408051608081018252603c54808252603d5462ffffff811660208401526001600160401b03630100000082041693830193909352600160581b909204600f0b606082015290611c109087612da4565b6000805b85811015611e645736878783818110611c2f57611c2f6142c7565b9050602002810190611c41919061459f565b80356000908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611cb257611cb2613d8f565b6002811115611cc357611cc3613d8f565b9052509050600181606001516002811115611ce057611ce0613d8f565b14611cec575050611e52565b856001600160401b031681604001516001600160401b031610611d10575050611e52565b600080611d2083898e3587612f20565b602089018051929450909250611d35826145b5565b62ffffff16905250606087018051839190611d519083906145d4565b600f0b905250611d618187614623565b84356000908152603660209081526040918290208651815492880151938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060870151939950869390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b836002811115611e0657611e06613d8f565b021790555050835160405164ffffffffff90911691506001600160401b038a16907fa91c59033c3423e18b54d0acecebb4972f9ea95aedf5f4cae3b677b02eaf3a3f90600090a3505050505b80611e5c81614332565b915050611c14565b506001600160401b038084166000908152603b6020526040812080548493919291611e9191859116614623565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550610a5e82613042565b600081600081518110611ed357611ed36142c7565b60200260200101519050919050565b600081600381518110611ef757611ef76142c7565b60200260200101516000801b14159050919050565b611f186003602061434d565b611f25602083018361420d565b905014611f9a5760405162461bcd60e51b815260206004820152603d60248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f743a2050726f6f662068617320696e636f7272656374206c656e67746800000060648201526084016106ca565b611fea611faa602083018361420d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086925050843590506003613249565b61118d5760405162461bcd60e51b815260206004820152604260248201527f426561636f6e436861696e50726f6f66732e7665726966795374617465526f6f60448201527f743a20496e76616c696420737461746520726f6f74206d65726b6c652070726f60648201526137b360f11b608482015260a4016106ca565b600884146120e25760405162461bcd60e51b815260206004820152604e602482015260008051602061485d83398151915260448201527f724669656c64733a2056616c696461746f72206669656c64732068617320696e60648201526d0c6dee4e4cac6e840d8cadccee8d60931b608482015260a4016106ca565b60056120f06028600161431a565b6120fa919061431a565b61210590602061434d565b82146121735760405162461bcd60e51b8152602060048201526043602482015260008051602061485d83398151915260448201527f724669656c64733a2050726f6f662068617320696e636f7272656374206c656e6064820152620cee8d60eb1b608482015260a4016106ca565b60006121b186868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061326192505050565b9050600064ffffffffff83166121c96028600161431a565b600b901b17905061221485858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250869150859050613249565b6122745760405162461bcd60e51b815260206004820152603d602482015260008051602061485d83398151915260448201527f724669656c64733a20496e76616c6964206d65726b6c652070726f6f6600000060648201526084016106ca565b5050505050505050565b603a54600160401b90046001600160401b03161561231f5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f642e5f7374617274436865636b706f696e743a206d7573742060448201527f66696e6973682070726576696f757320636865636b706f696e74206265666f72606482015271329039ba30b93a34b7339030b737ba3432b960711b608482015260a4016106ca565b603a54426001600160401b03908116911614156123a45760405162461bcd60e51b815260206004820152603f60248201527f456967656e506f642e5f7374617274436865636b706f696e743a2063616e6e6f60448201527f7420636865636b706f696e7420747769636520696e206f6e6520626c6f636b0060648201526084016106ca565b6034546000906001600160401b03166123c1633b9aca004761451b565b6123cb919061452f565b90508180156123e157506001600160401b038116155b156124545760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f642e5f7374617274436865636b706f696e743a206e6f20626160448201527f6c616e636520617661696c61626c6520746f20636865636b706f696e7400000060648201526084016106ca565b6000604051806080016040528061246a42610e3b565b815260200160395462ffffff168152602001836001600160401b031681526020016000600f0b815250905042603a60086101000a8154816001600160401b0302191690836001600160401b031602179055506124c581613042565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b600080612553848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611ebe92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156125c2576125c2613d8f565b60028111156125d3576125d3613d8f565b90525090506000816060015160028111156125f0576125f0613d8f565b146126815760405162461bcd60e51b8152602060048201526061602482015260008051602061483d83398151915260448201527f7469616c733a2076616c696461746f72206d75737420626520696e616374697660648201527f6520746f2070726f7665207769746864726177616c2063726564656e7469616c6084820152607360f81b60a482015260c4016106ca565b6001600160401b0380166126c786868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061350e92505050565b6001600160401b031614156127505760405162461bcd60e51b8152602060048201526055602482015260008051602061483d83398151915260448201527f7469616c733a2076616c696461746f72206d75737420626520696e207468652060648201527470726f63657373206f662061637469766174696e6760581b608482015260a4016106ca565b6001600160401b03801661279686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061353392505050565b6001600160401b03161461280e5760405162461bcd60e51b81526020600482015260446024820181905260008051602061483d833981519152908201527f7469616c733a2076616c696461746f72206d757374206e6f742062652065786960648201526374696e6760e01b608482015260a4016106ca565b612816612bf4565b61281f9061464e565b61285b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061354b92505050565b146128ca5760405162461bcd60e51b8152602060048201526045602482015260008051602061483d83398151915260448201527f7469616c733a2070726f6f66206973206e6f7420666f72207468697320456967606482015264195b941bd960da1b608482015260a4016106ca565b600061290886868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061356092505050565b90506129188a87878b8b8e612067565b6039805490600061292883614332565b9091555050603a54600090600160401b90046001600160401b03161561296057603a54600160401b90046001600160401b031661296d565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190526000858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b836002811115612a4357612a43613d8f565b02179055505060405164ffffffffff8c1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a16040805164ffffffffff8c1681526001600160401b03838116602083015284168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a1612aeb633b9aca006001600160401b03841661434d565b9b9a5050505050505050505050565b60008151603014612b835760405162461bcd60e51b815260206004820152604760248201527f456967656e506f642e5f63616c63756c61746556616c696461746f725075626b60448201527f657948617368206d75737420626520612034382d6279746520424c53207075626064820152666c6963206b657960c81b608482015260a4016106ca565b604051600290612b9a908490600090602001614672565b60408051601f1981840301815290829052612bb4916143b3565b602060405180830381855afa158015612bd1573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610e3591906143cf565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b80471015612c895760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106ca565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612cd6576040519150601f19603f3d011682016040523d82523d6000602084013e612cdb565b606091505b50509050806116695760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106ca565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611669908490613578565b612db06005600361431a565b612dbb90602061434d565b612dc8602083018361420d565b905014612e4b5760405162461bcd60e51b8152602060048201526044602482018190527f426561636f6e436861696e50726f6f66732e76657269667942616c616e636543908201527f6f6e7461696e65723a2050726f6f662068617320696e636f7272656374206c656064820152630dccee8d60e31b608482015260a4016106ca565b606c612e9c612e5d602084018461420d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250508535905084613249565b6116695760405162461bcd60e51b815260206004820152604960248201527f426561636f6e436861696e50726f6f66732e76657269667942616c616e63654360448201527f6f6e7461696e65723a20696e76616c69642062616c616e636520636f6e7461696064820152683732b910383937b7b360b91b608482015260a4016106ca565b83516020850151600091829182612f3887848861364a565b9050816001600160401b0316816001600160401b031614612fb257612f5d81836137c1565b6040805164ffffffffff861681526001600160401b038b8116602083015284168183015290519196507f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df919081900360600190a15b6001600160401b0380821660208b0181905290891660408b01526130365760398054906000612fe0836146a1565b9091555050600260608a0152612ff5856146b8565b93508264ffffffffff16886001600160401b03167f2a02361ffa66cf2c2da4682c2355a6adcaa9f6c227b6e6563e68480f9587626a60405160405180910390a35b50505094509492505050565b602081015162ffffff166131c9576000633b9aca00826060015183604001516001600160401b031661307491906145d4565b600f0b61308191906146df565b60408301516034805492935090916000906130a69084906001600160401b0316614623565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b81049092166001600160801b0319909216919091179055506000603c55603d80546001600160d81b031916905560335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b15801561316b57600080fd5b505af115801561317f573d6000803e3d6000fd5b5050603a546040518481526001600160401b0390911692507f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e44915060200160405180910390a25050565b8051603c556020810151603d8054604084015160608501516fffffffffffffffffffffffffffffffff16600160581b026fffffffffffffffffffffffffffffffff60581b196001600160401b039092166301000000026affffffffffffffffffffff1990931662ffffff9095169490941791909117169190911790555b50565b6000836132578685856137d9565b1495945050505050565b60008060028351613272919061451b565b90506000816001600160401b0381111561328e5761328e613f3d565b6040519080825280602002602001820160405280156132b7578160200160208202803683370190505b50905060005b828110156133be576002856132d2838361434d565b815181106132e2576132e26142c7565b6020026020010151868360026132f8919061434d565b61330390600161431a565b81518110613313576133136142c7565b6020026020010151604051602001613335929190918252602082015260400190565b60408051601f198184030181529082905261334f916143b3565b602060405180830381855afa15801561336c573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061338f91906143cf565b8282815181106133a1576133a16142c7565b6020908102919091010152806133b681614332565b9150506132bd565b506133ca60028361451b565b91505b81156134ea5760005b828110156134d7576002826133eb838361434d565b815181106133fb576133fb6142c7565b602002602001015183836002613411919061434d565b61341c90600161431a565b8151811061342c5761342c6142c7565b602002602001015160405160200161344e929190918252602082015260400190565b60408051601f1981840301815290829052613468916143b3565b602060405180830381855afa158015613485573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906134a891906143cf565b8282815181106134ba576134ba6142c7565b6020908102919091010152806134cf81614332565b9150506133d6565b506134e360028361451b565b91506133cd565b806000815181106134fd576134fd6142c7565b602002602001015192505050919050565b6000610e3582600581518110613526576135266142c7565b6020026020010151613925565b6000610e3582600681518110613526576135266142c7565b600081600181518110611ed357611ed36142c7565b6000610e3582600281518110613526576135266142c7565b60006135cd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661398c9092919063ffffffff16565b80519091501561166957808060200190518101906135eb919061414a565b6116695760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106ca565b60006136586026600161431a565b61366390602061434d565b613670604084018461420d565b9050146136e15760405162461bcd60e51b81526020600482015260446024820181905260008051602061485d833981519152908201527f7242616c616e63653a2050726f6f662068617320696e636f7272656374206c656064820152630dccee8d60e31b608482015260a4016106ca565b60006136ee600485614764565b64ffffffffff169050613748613707604085018561420d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508992505050602086013584613249565b6137a85760405162461bcd60e51b815260206004820152603e602482015260008051602061485d83398151915260448201527f7242616c616e63653a20496e76616c6964206d65726b6c652070726f6f66000060648201526084016106ca565b6137b683602001358561399b565b9150505b9392505050565b60006137ba6001600160401b03808416908516614788565b600083516000141580156137f85750602084516137f69190614507565b155b6138875760405162461bcd60e51b815260206004820152605460248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f665368613260448201527f35363a2070726f6f66206c656e6774682073686f756c642062652061206e6f6e60648201527316bd32b9379036bab63a34b836329037b310199960611b608482015260a4016106ca565b604080516020808201909252848152905b8551811161391b576138ab600285614507565b6138de578151600052808601516020526020826040600060026107d05a03fa6138d357600080fd5b600284049350613909565b8086015160005281516020526020826040600060026107d05a03fa61390257600080fd5b6002840493505b61391460208261431a565b9050613898565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6060610fe784846000856139c8565b6000806139a96004846147d8565b6139b49060406147fc565b64ffffffffff169050610fe784821b613925565b606082471015613a295760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106ca565b6001600160a01b0385163b613a805760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106ca565b600080866001600160a01b03168587604051613a9c91906143b3565b60006040518083038185875af1925050503d8060008114613ad9576040519150601f19603f3d011682016040523d82523d6000602084013e613ade565b606091505b5091509150613aee828286613af9565b979650505050505050565b60608315613b085750816137ba565b825115613b185782518084602001fd5b8160405162461bcd60e51b81526004016106ca9190614829565b80356001600160401b0381168114613b4957600080fd5b919050565b600060408284031215613b6057600080fd5b50919050565b600080600060608486031215613b7b57600080fd5b613b8484613b32565b925060208401356001600160401b0380821115613ba057600080fd5b613bac87838801613b4e565b93506040860135915080821115613bc257600080fd5b50613bcf86828701613b4e565b9150509250925092565b60008083601f840112613beb57600080fd5b5081356001600160401b03811115613c0257600080fd5b6020830191508360208260051b8501011115613c1d57600080fd5b9250929050565b60008060008060008060008060a0898b031215613c4057600080fd5b613c4989613b32565b975060208901356001600160401b0380821115613c6557600080fd5b613c718c838d01613b4e565b985060408b0135915080821115613c8757600080fd5b613c938c838d01613bd9565b909850965060608b0135915080821115613cac57600080fd5b613cb88c838d01613bd9565b909650945060808b0135915080821115613cd157600080fd5b50613cde8b828c01613bd9565b999c989b5096995094979396929594505050565b600060208284031215613d0457600080fd5b6137ba82613b32565b60008083601f840112613d1f57600080fd5b5081356001600160401b03811115613d3657600080fd5b602083019150836020828501011115613c1d57600080fd5b60008060208385031215613d6157600080fd5b82356001600160401b03811115613d7757600080fd5b613d8385828601613d0d565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b60038110613dc357634e487b7160e01b600052602160045260246000fd5b9052565b60208101610e358284613da5565b600060208284031215613de757600080fd5b5035919050565b60006080820190506001600160401b03808451168352806020850151166020840152806040850151166040840152506060830151613e2f6060840182613da5565b5092915050565b801515811461324657600080fd5b600060208284031215613e5657600080fd5b81356137ba81613e36565b600080600080600060608688031215613e7957600080fd5b85356001600160401b0380821115613e9057600080fd5b613e9c89838a01613d0d565b90975095506020880135915080821115613eb557600080fd5b50613ec288828901613d0d565b96999598509660400135949350505050565b6001600160a01b038116811461324657600080fd5b8035613b4981613ed4565b60008060408385031215613f0757600080fd5b8235613f1281613ed4565b946020939093013593505050565b600060208284031215613f3257600080fd5b81356137ba81613ed4565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613f7b57613f7b613f3d565b604052919050565b60006001600160401b03821115613f9c57613f9c613f3d565b5060051b60200190565b600082601f830112613fb757600080fd5b81356020613fcc613fc783613f83565b613f53565b82815260059290921b84018101918181019086841115613feb57600080fd5b8286015b848110156140065780358352918301918301613fef565b509695505050505050565b60008060006060848603121561402657600080fd5b83356001600160401b038082111561403d57600080fd5b818601915086601f83011261405157600080fd5b81356020614061613fc783613f83565b82815260059290921b8401810191818101908a84111561408057600080fd5b948201945b838610156140a757853561409881613ed4565b82529482019490820190614085565b975050870135925050808211156140bd57600080fd5b506140ca86828701613fa6565b9250506140d960408501613ee9565b90509250925092565b6000806000604084860312156140f757600080fd5b83356001600160401b038082111561410e57600080fd5b61411a87838801613b4e565b9450602086013591508082111561413057600080fd5b5061413d86828701613bd9565b9497909650939450505050565b60006020828403121561415c57600080fd5b81516137ba81613e36565b6020808252603e908201527f456967656e506f642e6f6e6c795768656e4e6f745061757365643a20696e646560408201527f782069732070617573656420696e20456967656e506f644d616e616765720000606082015260800190565b6000808335601e198436030181126141db57600080fd5b8301803591506001600160401b038211156141f557600080fd5b6020019150600581901b3603821315613c1d57600080fd5b6000808335601e1984360301811261422457600080fd5b8301803591506001600160401b0382111561423e57600080fd5b602001915036819003821315613c1d57600080fd5b6020808252604e908201527f456967656e506f642e6f6e6c794f776e65724f7250726f6f665375626d69747460408201527f65723a2063616c6c6572206973206e6f7420706f64206f776e6572206f72207060608201526d3937b7b31039bab136b4ba3a32b960911b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156142ef57600080fd5b813564ffffffffff811681146137ba57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561432d5761432d614304565b500190565b600060001982141561434657614346614304565b5060010190565b600081600019048311821515161561436757614367614304565b500290565b60008282101561437e5761437e614304565b500390565b60005b8381101561439e578181015183820152602001614386565b838111156143ad576000848401525b50505050565b600082516143c5818460208701614383565b9190910192915050565b6000602082840312156143e157600080fd5b5051919050565b60208082526031908201527f456967656e506f642e6f6e6c79456967656e506f644d616e616765723a206e6f6040820152703a1032b4b3b2b72837b226b0b730b3b2b960791b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000815180845261447a816020860160208601614383565b601f01601f19169290920160200192915050565b6080815260006144a260808301888a614439565b82810360208401526144b48188614462565b905082810360408401526144c9818688614439565b915050826060830152979650505050505050565b602081526000610fe7602083018486614439565b634e487b7160e01b600052601260045260246000fd5b600082614516576145166144f1565b500690565b60008261452a5761452a6144f1565b500490565b60006001600160401b038381169083168181101561454f5761454f614304565b039392505050565b60208082526028908201527f456967656e506f642e6f6e6c79456967656e506f644f776e65723a206e6f74206040820152673837b227bbb732b960c11b606082015260800190565b60008235605e198336030181126143c557600080fd5b600062ffffff8216806145ca576145ca614304565b6000190192915050565b600081600f0b83600f0b600082128260016001607f1b03038213811516156145fe576145fe614304565b8260016001607f1b031903821281161561461a5761461a614304565b50019392505050565b60006001600160401b0380831681851680830382111561464557614645614304565b01949350505050565b80516020808301519190811015613b605760001960209190910360031b1b16919050565b60008351614684818460208801614383565b6001600160801b0319939093169190920190815260100192915050565b6000816146b0576146b0614304565b506000190190565b600081600f0b60016001607f1b03198114156146d6576146d6614304565b60000392915050565b60006001600160ff1b038184138284138082168684048611161561470557614705614304565b600160ff1b600087128281168783058912161561472457614724614304565b6000871292508782058712848416161561474057614740614304565b8785058712818416161561475657614756614304565b505050929093029392505050565b600064ffffffffff8084168061477c5761477c6144f1565b92169190910492915050565b600081600f0b83600f0b600081128160016001607f1b0319018312811516156147b3576147b3614304565b8160016001607f1b030183138116156147ce576147ce614304565b5090039392505050565b600064ffffffffff808416806147f0576147f06144f1565b92169190910692915050565b600064ffffffffff8083168185168183048111821515161561482057614820614304565b02949350505050565b6020815260006137ba602083018461446256fe456967656e506f642e5f7665726966795769746864726177616c43726564656e426561636f6e436861696e50726f6f66732e76657269667956616c696461746fa2646970667358221220721ae261e7ea8172633ca39b5c47509345abd9d23c9a1d07374863ca537d102264736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_GENESIS_TIME\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"GENESIS_TIME\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsWithdrawableRestakedExecutionLayerGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountMustBeMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncompletePreviousCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBlockRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorFieldsLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoints\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofLengthNotMultipleOf32\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofOlderThanLastCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExiting\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNoPendingActivation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawCredentialsNotForEigenPod\",\"inputs\":[]}]", + Bin: "0x60e060405234801561001057600080fd5b50604051613ce3380380613ce383398101604081905261002f91610137565b6001600160a01b03808416608052821660a0526001600160401b03811660c05261005761005f565b505050610190565b600054610100900460ff16156100cb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013457600080fd5b50565b60008060006060848603121561014c57600080fd5b83516101578161011f565b60208501519093506101688161011f565b60408501519092506001600160401b038116811461018557600080fd5b809150509250925092565b60805160a05160c051613ad761020c60003960006105ff0152600081816102bd0152818161063a015281816106e4015281816109af01528181610b7601528181610e5f01528181610f0801528181611146015281816114af015281816115e601526126a90152600081816104b80152610f710152613ad76000f3fe60806040526004361061016a5760003560e01c80636fcd0e53116100d1578063c49074421161008a578063dda3346c11610064578063dda3346c1461058d578063ee94d67c146105ad578063f074ba62146105cd578063f2882461146105ed57600080fd5b8063c49074421461052d578063c4d66de81461054d578063d06d55871461056d57600080fd5b80636fcd0e53146104425780637439841f1461046f57806374cdd798146104a657806388676cad146104da5780639b4e4634146104fa578063b522538a1461050d57600080fd5b80634665bcda116101235780634665bcda146102ab57806347d28372146102df57806352396a591461039f57806358753357146103d557806358eaee79146103f55780636c0d2d5a1461042257600080fd5b8063039157d2146101a95780630b18ff66146101cb5780632340e8d3146102085780633474aa161461022c5780633f65cf191461026457806342ecff2a1461028457600080fd5b366101a4576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101b557600080fd5b506101c96101c4366004612fd3565b610621565b005b3480156101d757600080fd5b506033546101eb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561021457600080fd5b5061021e60395481565b6040519081526020016101ff565b34801561023857600080fd5b5060345461024c906001600160401b031681565b6040516001600160401b0390911681526020016101ff565b34801561027057600080fd5b506101c961027f366004613095565b610956565b34801561029057600080fd5b50603a5461024c90600160401b90046001600160401b031681565b3480156102b757600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102eb57600080fd5b5061035b6040805160808101825260008082526020820181905291810182905260608101919091525060408051608081018252603c548152603d5462ffffff811660208301526001600160401b03630100000082041692820192909252600160581b909104600f0b606082015290565b6040516101ff91908151815260208083015162ffffff16908201526040808301516001600160401b031690820152606091820151600f0b9181019190915260800190565b3480156103ab57600080fd5b5061024c6103ba366004613173565b603b602052600090815260409020546001600160401b031681565b3480156103e157600080fd5b50603e546101eb906001600160a01b031681565b34801561040157600080fd5b506104156104103660046131cf565b610be0565b6040516101ff9190613248565b34801561042e57600080fd5b5061021e61043d366004613173565b610c45565b34801561044e57600080fd5b5061046261045d366004613256565b610d59565b6040516101ff919061326f565b34801561047b57600080fd5b5061041561048a366004613256565b600090815260366020526040902054600160c01b900460ff1690565b3480156104b257600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e657600080fd5b506101c96104f53660046132d1565b610e06565b6101c96105083660046132ee565b610efd565b34801561051957600080fd5b506104626105283660046131cf565b611048565b34801561053957600080fd5b506101c9610548366004613385565b61113b565b34801561055957600080fd5b506101c96105683660046133b1565b611287565b34801561057957600080fd5b506101c96105883660046133b1565b6113d7565b34801561059957600080fd5b506101c96105a83660046134a4565b61146b565b3480156105b957600080fd5b50603a5461024c906001600160401b031681565b3480156105d957600080fd5b506101c96105e836600461357d565b6115cd565b3480156105f957600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad91906135e9565b156106cb5760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610733573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075791906135e9565b156107755760405163840a48d560e01b815260040160405180910390fd5b60006107bb6107848580613606565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061199f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561082a5761082a613210565b600281111561083b5761083b613210565b81525050905080604001516001600160401b0316876001600160401b03161161087757604051630767e73160e41b815260040160405180910390fd5b60018160600151600281111561088f5761088f613210565b146108ad576040516353670afb60e11b815260040160405180910390fd5b6108f16108ba8680613606565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506119c392505050565b61090e576040516321b6a8f960e11b815260040160405180910390fd5b61092061091a88610c45565b876119ed565b610943863561092f8780613606565b61093c60208a018a61364f565b8651611a93565b61094d6000611bbe565b50505050505050565b6033546001600160a01b03163314806109795750603e546001600160a01b031633145b6109965760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2291906135e9565b15610a405760405163840a48d560e01b815260040160405180910390fd5b8584148015610a4e57508382145b610a6b576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610aa1576040516337e07ffd60e01b815260040160405180910390fd5b610ab3610aad8a610c45565b896119ed565b6000805b87811015610b4c57610b388a358a8a84818110610ad657610ad6613695565b9050602002016020810190610aeb91906136ab565b898985818110610afd57610afd613695565b9050602002810190610b0f919061364f565b898987818110610b2157610b21613695565b9050602002810190610b339190613606565b611d38565b610b4290836136e8565b9150600101610ab7565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b158015610bbc57600080fd5b505af1158015610bd0573d6000803e3d6000fd5b5050505050505050505050505050565b600080610c2284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121a792505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b6000610c54611fff600c6136fb565b610c676001600160401b03841642613712565b10610c8557604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201526000918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f1981840301815290829052610ccd91613749565b600060405180830381855afa9150503d8060008114610d08576040519150601f19603f3d011682016040523d82523d6000602084013e610d0d565b606091505b5091509150818015610d20575060008151115b610d3d5760405163e01c3f9560e01b815260040160405180910390fd5b80806020019051810190610d519190613765565b949350505050565b610d816040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610dec57610dec613210565b6002811115610dfd57610dfd613210565b90525092915050565b6033546001600160a01b0316331480610e295750603e546001600160a01b031633145b610e465760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed291906135e9565b15610ef05760405163840a48d560e01b815260040160405180910390fd5b610ef982611bbe565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f4657604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec80000014610f6f5760405163049696b360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787610fb261223c565b8888886040518863ffffffff1660e01b8152600401610fd6969594939291906137d3565b6000604051808303818588803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051611039929190613822565b60405180910390a15050505050565b6110706040805160808101825260008082526020820181905291810182905290606082015290565b603660006110b385858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121a792505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561112057611120613210565b600281111561113157611131613210565b9052509392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461118457604051633213a66160e21b815260040160405180910390fd5b611192633b9aca008261384c565b156111b0576040516321ddeb1760e21b815260040160405180910390fd5b60006111c0633b9aca0083613860565b6034549091506001600160401b0390811690821611156111f35760405163786be08d60e01b815260040160405180910390fd5b603480548291906000906112119084906001600160401b0316613874565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161127091815260200190565b60405180910390a26112828383612281565b505050565b600054610100900460ff16158080156112a75750600054600160ff909116105b806112c15750303b1580156112c1575060005460ff166001145b6113295760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561134c576000805461ff0019166101001790555b6001600160a01b038216611373576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0384161790558015610ef9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b031633146114025760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146114965760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156114fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152291906135e9565b156115405760405163840a48d560e01b815260040160405180910390fd5b8251845114611562576040516343714afd60e01b815260040160405180910390fd5b60005b84518110156115c6576115be8385838151811061158457611584613695565b602002602001015187848151811061159e5761159e613695565b60200260200101516001600160a01b031661239a9092919063ffffffff16565b600101611565565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165991906135e9565b156116775760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b031660008190036116ab57604051620e680d60e11b815260040160405180910390fd5b60408051608081018252603c54808252603d5462ffffff811660208401526001600160401b03630100000082041693830193909352600160581b909204600f0b6060820152906116fb90876123ec565b6000805b85811015611945573687878381811061171a5761171a613695565b905060200281019061172c9190613893565b80356000908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561179d5761179d613210565b60028111156117ae576117ae613210565b90525090506001816060015160028111156117cb576117cb613210565b146117d757505061193d565b856001600160401b031681604001516001600160401b0316106117fb57505061193d565b60008061180b83898e358761249e565b602089018051929450909250611820826138a9565b62ffffff1690525060608701805183919061183c9083906138c8565b600f0b90525061184c81876138f5565b84356000908152603660209081526040918290208651815492880151938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060870151939950869390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156118f1576118f1613210565b021790555050835160405164ffffffffff90911691506001600160401b038a16907fa91c59033c3423e18b54d0acecebb4972f9ea95aedf5f4cae3b677b02eaf3a3f90600090a3505050505b6001016116ff565b506001600160401b038084166000908152603b6020526040812080548493919291611972918591166138f5565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061094d826125c3565b6000816000815181106119b4576119b4613695565b60200260200101519050919050565b6000816003815181106119d8576119d8613695565b60200260200101516000801b14159050919050565b6119f9600360206136fb565b611a06602083018361364f565b905014611a26576040516313717da960e21b815260040160405180910390fd5b611a76611a36602083018361364f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250508435905060036127cd565b610ef9576040516309bde33960e01b815260040160405180910390fd5b60088414611ab45760405163200591bd60e01b815260040160405180910390fd5b6005611ac2602860016136e8565b611acc91906136e8565b611ad79060206136fb565b8214611af6576040516313717da960e21b815260040160405180910390fd5b6000611b348686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127e592505050565b9050600064ffffffffff8316611b4c602860016136e8565b600b901b179050611b9785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508691508590506127cd565b611bb4576040516309bde33960e01b815260040160405180910390fd5b5050505050505050565b603a54600160401b90046001600160401b031615611bef57604051630e2d94e160e31b815260040160405180910390fd5b603a546001600160401b03428116911603611c1d576040516367db5b8b60e01b815260040160405180910390fd5b6034546000906001600160401b0316611c3a633b9aca0047613860565b611c449190613874565b9050818015611c5a57506001600160401b038116155b15611c78576040516332dea95960e21b815260040160405180910390fd5b60006040518060800160405280611c8e42610c45565b815260200160395462ffffff168152602001836001600160401b031681526020016000600f0b815250905042603a60086101000a8154816001600160401b0302191690836001600160401b03160217905550611ce9816125c3565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b600080611d7784848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061199f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611de657611de6613210565b6002811115611df757611df7613210565b9052509050600081606001516002811115611e1457611e14613210565b14611e32576040516343f8f5e960e01b815260040160405180910390fd5b6001600160401b038016611e78868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7e92505050565b6001600160401b031603611e9f5760405163ab42cfd960e01b815260040160405180910390fd5b6001600160401b038016611ee5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612aa392505050565b6001600160401b031614611f0c5760405163b64ec9a760e01b815260040160405180910390fd5b611f1461223c565b611f1d90613914565b611f59868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612abb92505050565b14611f7757604051632230566760e11b815260040160405180910390fd5b6000611fb5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612ad092505050565b9050611fc58a87878b8b8e611a93565b60398054906000611fd583613938565b9091555050603a54600090600160401b90046001600160401b03161561200d57603a54600160401b90046001600160401b031661201a565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190526000858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156120f0576120f0613210565b02179055505060405164ffffffffff8c1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a16040805164ffffffffff8c1681526001600160401b03838116602083015284168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a1612198633b9aca006001600160401b0384166136fb565b9b9a5050505050505050505050565b600081516030146121cb576040516350b541b960e11b815260040160405180910390fd5b6040516002906121e2908490600090602001613951565b60408051601f19818403018152908290526121fc91613749565b602060405180830381855afa158015612219573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c3f9190613765565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b804710156122d15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611320565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b50509050806112825760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611320565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611282908490612ae8565b6123f8600560036136e8565b6124039060206136fb565b612410602083018361364f565b905014612430576040516313717da960e21b815260040160405180910390fd5b606c612481612442602084018461364f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792505085359050846127cd565b611282576040516309bde33960e01b815260040160405180910390fd5b835160208501516000918291826124b6878488612bba565b9050816001600160401b0316816001600160401b031614612530576124db8183612c9d565b6040805164ffffffffff861681526001600160401b038b8116602083015284168183015290519196507f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df919081900360600190a15b6001600160401b0380821660208b0181905290891660408b01526000036125b7576039805490600061256183613980565b9091555050600260608a015261257685613997565b93508264ffffffffff16886001600160401b03167f2a02361ffa66cf2c2da4682c2355a6adcaa9f6c227b6e6563e68480f9587626a60405160405180910390a35b50505094509492505050565b806020015162ffffff1660000361274d576000633b9aca00826060015183604001516001600160401b03166125f891906138c8565b600f0b61260591906139bd565b604083015160348054929350909160009061262a9084906001600160401b03166138f5565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b81049092166001600160801b0319909216919091179055506000603c55603d80546001600160d81b031916905560335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b1580156126ef57600080fd5b505af1158015612703573d6000803e3d6000fd5b5050603a546040518481526001600160401b0390911692507f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e44915060200160405180910390a25050565b8051603c556020810151603d8054604084015160608501516fffffffffffffffffffffffffffffffff16600160581b026fffffffffffffffffffffffffffffffff60581b196001600160401b039092166301000000026affffffffffffffffffffff1990931662ffffff9095169490941791909117169190911790555b50565b6000836127db868585612cb5565b1495945050505050565b600080600283516127f69190613860565b90506000816001600160401b03811115612812576128126133ce565b60405190808252806020026020018201604052801561283b578160200160208202803683370190505b50905060005b828110156129385760028561285683836136fb565b8151811061286657612866613695565b60200260200101518683600261287c91906136fb565b6128879060016136e8565b8151811061289757612897613695565b60200260200101516040516020016128b9929190918252602082015260400190565b60408051601f19818403018152908290526128d391613749565b602060405180830381855afa1580156128f0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906129139190613765565b82828151811061292557612925613695565b6020908102919091010152600101612841565b50612944600283613860565b91505b8115612a5a5760005b82811015612a475760028261296583836136fb565b8151811061297557612975613695565b60200260200101518383600261298b91906136fb565b6129969060016136e8565b815181106129a6576129a6613695565b60200260200101516040516020016129c8929190918252602082015260400190565b60408051601f19818403018152908290526129e291613749565b602060405180830381855afa1580156129ff573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612a229190613765565b828281518110612a3457612a34613695565b6020908102919091010152600101612950565b50612a53600283613860565b9150612947565b80600081518110612a6d57612a6d613695565b602002602001015192505050919050565b6000610c3f82600581518110612a9657612a96613695565b6020026020010151612d92565b6000610c3f82600681518110612a9657612a96613695565b6000816001815181106119b4576119b4613695565b6000610c3f82600281518110612a9657612a96613695565b6000612b3d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612df99092919063ffffffff16565b8051909150156112825780806020019051810190612b5b91906135e9565b6112825760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611320565b6000612bc8602660016136e8565b612bd39060206136fb565b612be0604084018461364f565b905014612c00576040516313717da960e21b815260040160405180910390fd5b6000612c0d6004856139ed565b64ffffffffff169050612c67612c26604085018561364f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050506020860135846127cd565b612c84576040516309bde33960e01b815260040160405180910390fd5b612c92836020013585612e08565b9150505b9392505050565b6000612c966001600160401b03808416908516613a17565b60008351600014158015612cd4575060208451612cd2919061384c565b155b612cf157604051630228be0560e31b815260040160405180910390fd5b604080516020808201909252848152905b85518111612d8857612d1560028561384c565b600003612d4b578151600052808601516020526020826040600060026107d05a03fa612d4057600080fd5b600284049350612d76565b8086015160005281516020526020826040600060026107d05a03fa612d6f57600080fd5b6002840493505b612d816020826136e8565b9050612d02565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6060610d518484600085612e35565b600080612e16600484613a44565b612e21906040613a6e565b64ffffffffff169050610d5184821b612d92565b606082471015612e965760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611320565b6001600160a01b0385163b612eed5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611320565b600080866001600160a01b03168587604051612f099190613749565b60006040518083038185875af1925050503d8060008114612f46576040519150601f19603f3d011682016040523d82523d6000602084013e612f4b565b606091505b5091509150612f5b828286612f66565b979650505050505050565b60608315612f75575081612c96565b825115612f855782518084602001fd5b8160405162461bcd60e51b81526004016113209190613a8e565b80356001600160401b0381168114612fb657600080fd5b919050565b600060408284031215612fcd57600080fd5b50919050565b600080600060608486031215612fe857600080fd5b612ff184612f9f565b925060208401356001600160401b0381111561300c57600080fd5b61301886828701612fbb565b92505060408401356001600160401b0381111561303457600080fd5b61304086828701612fbb565b9150509250925092565b60008083601f84011261305c57600080fd5b5081356001600160401b0381111561307357600080fd5b6020830191508360208260051b850101111561308e57600080fd5b9250929050565b60008060008060008060008060a0898b0312156130b157600080fd5b6130ba89612f9f565b975060208901356001600160401b038111156130d557600080fd5b6130e18b828c01612fbb565b97505060408901356001600160401b038111156130fd57600080fd5b6131098b828c0161304a565b90975095505060608901356001600160401b0381111561312857600080fd5b6131348b828c0161304a565b90955093505060808901356001600160401b0381111561315357600080fd5b61315f8b828c0161304a565b999c989b5096995094979396929594505050565b60006020828403121561318557600080fd5b612c9682612f9f565b60008083601f8401126131a057600080fd5b5081356001600160401b038111156131b757600080fd5b60208301915083602082850101111561308e57600080fd5b600080602083850312156131e257600080fd5b82356001600160401b038111156131f857600080fd5b6132048582860161318e565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b6003811061324457634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c3f8284613226565b60006020828403121561326857600080fd5b5035919050565b60006080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b03604084015116604083015260608301516132bc6060840182613226565b5092915050565b80151581146127ca57600080fd5b6000602082840312156132e357600080fd5b8135612c96816132c3565b60008060008060006060868803121561330657600080fd5b85356001600160401b0381111561331c57600080fd5b6133288882890161318e565b90965094505060208601356001600160401b0381111561334757600080fd5b6133538882890161318e565b96999598509660400135949350505050565b6001600160a01b03811681146127ca57600080fd5b8035612fb681613365565b6000806040838503121561339857600080fd5b82356133a381613365565b946020939093013593505050565b6000602082840312156133c357600080fd5b8135612c9681613365565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561340c5761340c6133ce565b604052919050565b60006001600160401b0382111561342d5761342d6133ce565b5060051b60200190565b600082601f83011261344857600080fd5b813561345b61345682613414565b6133e4565b8082825260208201915060208360051b86010192508583111561347d57600080fd5b602085015b8381101561349a578035835260209283019201613482565b5095945050505050565b6000806000606084860312156134b957600080fd5b83356001600160401b038111156134cf57600080fd5b8401601f810186136134e057600080fd5b80356134ee61345682613414565b8082825260208201915060208360051b85010192508883111561351057600080fd5b6020840193505b8284101561353b57833561352a81613365565b825260209384019390910190613517565b955050505060208401356001600160401b0381111561355957600080fd5b61356586828701613437565b9250506135746040850161337a565b90509250925092565b60008060006040848603121561359257600080fd5b83356001600160401b038111156135a857600080fd5b6135b486828701612fbb565b93505060208401356001600160401b038111156135d057600080fd5b6135dc8682870161304a565b9497909650939450505050565b6000602082840312156135fb57600080fd5b8151612c96816132c3565b6000808335601e1984360301811261361d57600080fd5b8301803591506001600160401b0382111561363757600080fd5b6020019150600581901b360382131561308e57600080fd5b6000808335601e1984360301811261366657600080fd5b8301803591506001600160401b0382111561368057600080fd5b60200191503681900382131561308e57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156136bd57600080fd5b813564ffffffffff81168114612c9657600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610c3f57610c3f6136d2565b8082028115828204841417610c3f57610c3f6136d2565b81810381811115610c3f57610c3f6136d2565b60005b83811015613740578181015183820152602001613728565b50506000910152565b6000825161375b818460208701613725565b9190910192915050565b60006020828403121561377757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526137bf816020860160208601613725565b601f01601f19169290920160200192915050565b6080815260006137e760808301888a61377e565b82810360208401526137f981886137a7565b9050828103604084015261380e81868861377e565b915050826060830152979650505050505050565b602081526000610d5160208301848661377e565b634e487b7160e01b600052601260045260246000fd5b60008261385b5761385b613836565b500690565b60008261386f5761386f613836565b500490565b6001600160401b038281168282160390811115610c3f57610c3f6136d2565b60008235605e1983360301811261375b57600080fd5b600062ffffff8216806138be576138be6136d2565b6000190192915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715610c3f57610c3f6136d2565b6001600160401b038181168382160190811115610c3f57610c3f6136d2565b80516020808301519190811015612fcd5760001960209190910360031b1b16919050565b60006001820161394a5761394a6136d2565b5060010190565b60008351613963818460208801613725565b6001600160801b0319939093169190920190815260100192915050565b60008161398f5761398f6136d2565b506000190190565b600081600f0b60016001607f1b031981036139b4576139b46136d2565b60000392915050565b80820260008212600160ff1b841416156139d9576139d96136d2565b8181058314821517610c3f57610c3f6136d2565b600064ffffffffff831680613a0457613a04613836565b8064ffffffffff84160491505092915050565b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610c3f57610c3f6136d2565b600064ffffffffff831680613a5b57613a5b613836565b8064ffffffffff84160691505092915050565b64ffffffffff81811683821602908116908181146132bc576132bc6136d2565b602081526000612c9660208301846137a756fea26469706673582212200aca9940e7697c006ed15f7d95485db78ef79ebc107d8c19461f199952e732b064736f6c634300081b0033", } // EigenPodABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenPodManager/binding.go b/pkg/bindings/EigenPodManager/binding.go index 9b44ba82d..638d991e3 100644 --- a/pkg/bindings/EigenPodManager/binding.go +++ b/pkg/bindings/EigenPodManager/binding.go @@ -31,8 +31,8 @@ var ( // 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\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620031693803806200316983398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e05161010051612f286200024160003960008181610551015281816105fb01528181610b7901528181611313015281816117bf01526118af015260006104dd015260006102cf015260008181610263015281816112920152611e64015260006103af0152612f286000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b1461053f578063f2fde38b14610573578063f6848d2414610593578063fabc1cbc146105ce57600080fd5b8063b1344271146104cb578063beffbb89146104ff578063c2c51c401461051f57600080fd5b80639b4e4634116100c65780639b4e46341461044c5780639ba062751461045f578063a38406a314610495578063a6a509be146104b557600080fd5b8063886f1195146103e65780638da5cb5b146104065780639104c3191461042457600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461035b578063715018a61461038857806374cdd7981461039d57806384d81062146103d157600080fd5b8063595c6a67146102f15780635ac86ab7146103065780635c975abb1461034657600080fd5b80631794bb3c116101955780631794bb3c14610231578063292b7b2b14610251578063387b13001461029d57806339b70e38146102bd57600080fd5b80630e81073c146101bc57806310d67a2f146101ef578063136439dd14610211575b600080fd5b3480156101c857600080fd5b506101dc6101d73660046120fc565b6105ee565b6040519081526020015b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004612128565b61085d565b005b34801561021d57600080fd5b5061020f61022c366004612145565b610910565b34801561023d57600080fd5b5061020f61024c36600461215e565b610a4f565b34801561025d57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e6565b3480156102a957600080fd5b5061020f6102b836600461215e565b610b6e565b3480156102c957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fd57600080fd5b5061020f610f82565b34801561031257600080fd5b5061033661032136600461219f565b606654600160ff9092169190911b9081161490565b60405190151581526020016101e6565b34801561035257600080fd5b506066546101dc565b34801561036757600080fd5b506101dc610376366004612128565b609b6020526000908152604090205481565b34801561039457600080fd5b5061020f611049565b3480156103a957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b5061028561105d565b3480156103f257600080fd5b50606554610285906001600160a01b031681565b34801561041257600080fd5b506033546001600160a01b0316610285565b34801561043057600080fd5b5061028573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61020f61045a36600461220b565b611147565b34801561046b57600080fd5b5061028561047a366004612128565b6098602052600090815260409020546001600160a01b031681565b3480156104a157600080fd5b506102856104b0366004612128565b611236565b3480156104c157600080fd5b506101dc60995481565b3480156104d757600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061020f61051a3660046120fc565b611308565b34801561052b57600080fd5b5061020f61053a3660046120fc565b611547565b34801561054b57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b5061020f61058e366004612128565b61197b565b34801561059f57600080fd5b506103366105ae366004612128565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105da57600080fd5b5061020f6105e9366004612145565b6119f1565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106415760405162461bcd60e51b81526004016106389061227f565b60405180910390fd5b6001600160a01b0383166106bd5760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f20616464726573730000000000006064820152608401610638565b600082121561072b5760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b6064820152608401610638565b610739633b9aca00836122f3565b156107ac5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e740000006064820152608401610638565b6001600160a01b0383166000908152609b6020526040812054906107d0848361231d565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020612eb38339815191529061080f9087815260200190565b60405180910390a2846001600160a01b03166000805160206125858339815191528260405161084091815260200190565b60405180910390a26108528282611b4d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d4919061235e565b6001600160a01b0316336001600160a01b0316146109045760405162461bcd60e51b81526004016106389061237b565b61090d81611b8f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097c91906123c5565b6109985760405162461bcd60e51b8152600401610638906123e7565b60665481811614610a115760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610638565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff1615808015610a6f5750600054600160ff909116105b80610a895750303b158015610a89575060005460ff166001145b610aec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610638565b6000805460ff191660011790558015610b0f576000805461ff0019166101001790555b610b1884611c86565b610b228383611cd8565b8015610b68576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bb65760405162461bcd60e51b81526004016106389061227f565b6001600160a01b038316610c305760405162461bcd60e51b81526020600482015260476024820152600080516020612ed383398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a401610638565b6001600160a01b038216610cad5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ed383398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a401610638565b6000811215610d1c5760405162461bcd60e51b81526020600482015260416024820152600080516020612ed383398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a401610638565b610d2a633b9aca00826122f3565b15610d9e5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ed383398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a401610638565b6001600160a01b0383166000908152609b602052604081205490811215610f07576000610dca8261242f565b905080831115610e61576001600160a01b0385166000908152609b6020526040812055610df7818461244c565b9250846001600160a01b0316600080516020612eb383398151915282604051610e2291815260200190565b60405180910390a2846001600160a01b03166000805160206125858339815191526000604051610e5491815260200190565b60405180910390a2610f05565b6001600160a01b0385166000908152609b6020526040812054610e8590859061231d565b6001600160a01b0387166000818152609b6020526040908190208390555191925090600080516020612eb383398151915290610ec49087815260200190565b60405180910390a2856001600160a01b031660008051602061258583398151915282604051610ef591815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610f6457600080fd5b505af1158015610f78573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fee91906123c5565b61100a5760405162461bcd60e51b8152600401610638906123e7565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611051611dc2565b61105b6000611c86565b565b6066546000908190600190811614156110b45760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610638565b336000908152609860205260409020546001600160a01b0316156111365760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b6064820152608401610638565b6000611140611e1c565b9250505090565b6066546000906001908116141561119c5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610638565b336000908152609860205260409020546001600160a01b0316806111c5576111c2611e1c565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906111fb908b908b908b908b908b9060040161248c565b6000604051808303818588803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061085757611301836001600160a01b031660001b60405180610940016040528061090e81526020016125a561090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f19818403018152908290526112e69291602001612501565b60405160208183030381529060405280519060200120611f81565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113505760405162461bcd60e51b81526004016106389061227f565b60008112156113c75760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e656761746976650000000000000000006064820152608401610638565b6113d5633b9aca00826122f3565b1561144a576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e746064820152608401610638565b6001600160a01b0382166000908152609b602052604081205461146e908390612516565b905060008112156114ff5760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a401610638565b6001600160a01b0383166000818152609b602052604090819020839055516000805160206125858339815191529061153a9084815260200190565b60405180910390a2505050565b6001600160a01b0380831660009081526098602052604090205483911633146115c25760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b6064820152608401610638565b600260c95414156116155760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610638565b600260c9556001600160a01b0383166116b15760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a401610638565b6116bf633b9aca0083612555565b156117585760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a401610638565b6001600160a01b0383166000908152609b60205260408120549061177c848361231d565b6001600160a01b0386166000908152609b602052604081208290559091506117a48383611b4d565b9050801561190c57600081121561186f576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118038561242f565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561185257600080fd5b505af1158015611866573d6000803e3d6000fd5b5050505061190c565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156118f357600080fd5b505af1158015611907573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020612eb38339815191528660405161193591815260200190565b60405180910390a2856001600160a01b03166000805160206125858339815191528360405161196691815260200190565b60405180910390a25050600160c95550505050565b611983611dc2565b6001600160a01b0381166119e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610638565b61090d81611c86565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a68919061235e565b6001600160a01b0316336001600160a01b031614611a985760405162461bcd60e51b81526004016106389061237b565b606654198119606654191614611b165760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610638565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610a44565b6000808313611b6d5760008213611b6657506000610857565b5080610857565b60008213611b8557611b7e8361242f565b9050610857565b611b7e8383612516565b6001600160a01b038116611c1d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610638565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b0316158015611cf957506001600160a01b03821615155b611d7b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610638565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611dbe82611b8f565b5050565b6033546001600160a01b0316331461105b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000609960008154611e2d90612569565b9091555060408051610940810190915261090e808252600091611ecc91839133916125a56020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052611eb89291602001612501565b604051602081830303815290604052611fdd565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b158015611f1057600080fd5b505af1158015611f24573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090611301565b600080844710156120305760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610638565b825161207e5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610638565b8383516020850187f590506001600160a01b0381166120df5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610638565b949350505050565b6001600160a01b038116811461090d57600080fd5b6000806040838503121561210f57600080fd5b823561211a816120e7565b946020939093013593505050565b60006020828403121561213a57600080fd5b8135611301816120e7565b60006020828403121561215757600080fd5b5035919050565b60008060006060848603121561217357600080fd5b833561217e816120e7565b9250602084013561218e816120e7565b929592945050506040919091013590565b6000602082840312156121b157600080fd5b813560ff8116811461130157600080fd5b60008083601f8401126121d457600080fd5b50813567ffffffffffffffff8111156121ec57600080fd5b60208301915083602082850101111561220457600080fd5b9250929050565b60008060008060006060868803121561222357600080fd5b853567ffffffffffffffff8082111561223b57600080fd5b61224789838a016121c2565b9097509550602088013591508082111561226057600080fd5b5061226d888289016121c2565b96999598509660400135949350505050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612302576123026122dd565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b038490038513161561233f5761233f612307565b600160ff1b839003841281161561235857612358612307565b50500190565b60006020828403121561237057600080fd5b8151611301816120e7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156123d757600080fd5b8151801515811461130157600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b82141561244557612445612307565b5060000390565b60008282101561245e5761245e612307565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006124a0606083018789612463565b82810360208401526124b3818688612463565b9150508260408301529695505050505050565b6000815160005b818110156124e757602081850181015186830152016124cd565b818111156124f6576000828601525b509290920192915050565b60006120df61251083866124c6565b846124c6565b60008083128015600160ff1b85018412161561253457612534612307565b6001600160ff1b038401831381161561254f5761254f612307565b50500390565b600082612564576125646122dd565b500790565b600060001982141561257d5761257d612307565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a264697066735822122069d3a03119733341cd267e296785e37b1c350fc350d796fc97aa45c1e8213da664736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodBeacon\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]}]", + Bin: "0x61012060405234801561001157600080fd5b5060405161296b38038061296b83398101604081905261003091610140565b6001600160a01b0380861660805280851660a05280841660c05280831660e05281166101005261005e610068565b50505050506101b5565b600054610100900460ff16156100d45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610126576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013d57600080fd5b50565b600080600080600060a0868803121561015857600080fd5b855161016381610128565b602087015190955061017481610128565b604087015190945061018581610128565b606087015190935061019681610128565b60808701519092506101a781610128565b809150509295509295909350565b60805160a05160c05160e0516101005161274161022a60003960008181610551015281816105fb01528181610a2d01528181610fda015281816112430152611333015260006104dd015260006102cf01526000818161026301528181610f5901526117c8015260006103af01526127416000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b1461053f578063f2fde38b14610573578063f6848d2414610593578063fabc1cbc146105ce57600080fd5b8063b1344271146104cb578063beffbb89146104ff578063c2c51c401461051f57600080fd5b80639b4e4634116100c65780639b4e46341461044c5780639ba062751461045f578063a38406a314610495578063a6a509be146104b557600080fd5b8063886f1195146103e65780638da5cb5b146104065780639104c3191461042457600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461035b578063715018a61461038857806374cdd7981461039d57806384d81062146103d157600080fd5b8063595c6a67146102f15780635ac86ab7146103065780635c975abb1461034657600080fd5b80631794bb3c116101955780631794bb3c14610231578063292b7b2b14610251578063387b13001461029d57806339b70e38146102bd57600080fd5b80630e81073c146101bc57806310d67a2f146101ef578063136439dd14610211575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004611a63565b6105ee565b6040519081526020015b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004611a8f565b61075f565b005b34801561021d57600080fd5b5061020f61022c366004611aac565b610813565b34801561023d57600080fd5b5061020f61024c366004611ac5565b6108fe565b34801561025d57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e6565b3480156102a957600080fd5b5061020f6102b8366004611ac5565b610a22565b3480156102c957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fd57600080fd5b5061020f610ceb565b34801561031257600080fd5b50610336610321366004611b06565b606654600160ff9092169190911b9081161490565b60405190151581526020016101e6565b34801561035257600080fd5b506066546101dc565b34801561036757600080fd5b506101dc610376366004611a8f565b609b6020526000908152604090205481565b34801561039457600080fd5b5061020f610db3565b3480156103a957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b50610285610dc7565b3480156103f257600080fd5b50606554610285906001600160a01b031681565b34801561041257600080fd5b506033546001600160a01b0316610285565b34801561043057600080fd5b5061028573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61020f61045a366004611b72565b610e3a565b34801561046b57600080fd5b5061028561047a366004611a8f565b6098602052600090815260409020546001600160a01b031681565b3480156104a157600080fd5b506102856104b0366004611a8f565b610efd565b3480156104c157600080fd5b506101dc60995481565b3480156104d757600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061020f61051a366004611a63565b610fcf565b34801561052b57600080fd5b5061020f61053a366004611a63565b6110f6565b34801561054b57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b5061020f61058e366004611a8f565b6113ff565b34801561059f57600080fd5b506103366105ae366004611a8f565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105da57600080fd5b5061020f6105e9366004611aac565b611475565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106395760405163f739589b60e01b815260040160405180910390fd5b6001600160a01b038316610660576040516339b190bb60e11b815260040160405180910390fd5b60008212156106825760405163ef147de160e01b815260040160405180910390fd5b610690633b9aca0083611c01565b156106ae576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b6020526040812054906106d28483611c2b565b6001600160a01b0386166000818152609b60205260409081902083905551919250906000805160206126ec833981519152906107119087815260200190565b60405180910390a2846001600160a01b0316600080516020611dbe8339815191528260405161074291815260200190565b60405180910390a2610754828261157d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d69190611c53565b6001600160a01b0316336001600160a01b0316146108075760405163794821ff60e01b815260040160405180910390fd5b610810816115bf565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561085b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087f9190611c70565b61089c57604051631d77d47760e21b815260040160405180910390fd5b606654818116146108c05760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff161580801561091e5750600054600160ff909116105b806109385750303b158015610938575060005460ff166001145b6109a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156109c3576000805461ff0019166101001790555b6109cc8461164f565b6109d683836116a1565b8015610a1c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6b5760405163f739589b60e01b815260040160405180910390fd5b6001600160a01b038316610a92576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b038216610ab9576040516339b190bb60e11b815260040160405180910390fd5b6000811215610adb5760405163ef147de160e01b815260040160405180910390fd5b610ae9633b9aca0082611c01565b15610b07576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b602052604081205490811215610c70576000610b3382611c92565b905080831115610bca576001600160a01b0385166000908152609b6020526040812055610b608184611cae565b9250846001600160a01b03166000805160206126ec83398151915282604051610b8b91815260200190565b60405180910390a2846001600160a01b0316600080516020611dbe8339815191526000604051610bbd91815260200190565b60405180910390a2610c6e565b6001600160a01b0385166000908152609b6020526040812054610bee908590611c2b565b6001600160a01b0387166000818152609b60205260409081902083905551919250906000805160206126ec83398151915290610c2d9087815260200190565b60405180910390a2856001600160a01b0316600080516020611dbe83398151915282604051610c5e91815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610ccd57600080fd5b505af1158015610ce1573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190611c70565b610d7457604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610dbb611726565b610dc5600061164f565b565b6066546000908190600190811603610df25760405163840a48d560e01b815260040160405180910390fd5b336000908152609860205260409020546001600160a01b031615610e295760405163031a852160e21b815260040160405180910390fd5b6000610e33611780565b9250505090565b606654600090600190811603610e635760405163840a48d560e01b815260040160405180910390fd5b336000908152609860205260409020546001600160a01b031680610e8c57610e89611780565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610ec2908b908b908b908b908b90600401611cea565b6000604051808303818588803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061075957610fc8836001600160a01b031660001b60405180610940016040528061090e8152602001611dde61090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052610fad9291602001611d54565b604051602081830303815290604052805190602001206118e5565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110185760405163f739589b60e01b815260040160405180910390fd5b600081121561103a5760405163ef147de160e01b815260040160405180910390fd5b611048633b9aca0082611c01565b15611066576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0382166000908152609b602052604081205461108a908390611d69565b905060008112156110ae5760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0383166000818152609b60205260409081902083905551600080516020611dbe833981519152906110e99084815260200190565b60405180910390a2505050565b6001600160a01b038083166000908152609860205260409020548391163314611132576040516312e16d7160e11b815260040160405180910390fd5b600260c954036111845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610997565b600260c9556001600160a01b0383166111b0576040516339b190bb60e11b815260040160405180910390fd5b6111be633b9aca0083611d90565b156111dc576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b6020526040812054906112008483611c2b565b6001600160a01b0386166000908152609b60205260408120829055909150611228838361157d565b905080156113905760008112156112f3576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061128785611c92565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156112d657600080fd5b505af11580156112ea573d6000803e3d6000fd5b50505050611390565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b15801561137757600080fd5b505af115801561138b573d6000803e3d6000fd5b505050505b856001600160a01b03166000805160206126ec833981519152866040516113b991815260200190565b60405180910390a2856001600160a01b0316600080516020611dbe833981519152836040516113ea91815260200190565b60405180910390a25050600160c95550505050565b611407611726565b6001600160a01b03811661146c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610997565b6108108161164f565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ec9190611c53565b6001600160a01b0316336001600160a01b03161461151d5760405163794821ff60e01b815260040160405180910390fd5b6066541981196066541916146115465760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016108f3565b600080831361159d576000821361159657506000610759565b5080610759565b600082136115b5576115ae83611c92565b9050610759565b6115ae8383611d69565b6001600160a01b0381166115e6576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b03161580156116c257506001600160a01b03821615155b6116df576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611722826115bf565b5050565b6033546001600160a01b03163314610dc55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610997565b600060996000815461179190611da4565b9091555060408051610940810190915261090e8082526000916118309183913391611dde6020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f198184030181529082905261181c9291602001611d54565b604051602081830303815290604052611941565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b15801561187457600080fd5b505af1158015611888573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090610fc8565b600080844710156119945760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610997565b82516000036119e55760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610997565b8383516020850187f590506001600160a01b038116611a465760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610997565b949350505050565b6001600160a01b038116811461081057600080fd5b60008060408385031215611a7657600080fd5b8235611a8181611a4e565b946020939093013593505050565b600060208284031215611aa157600080fd5b8135610fc881611a4e565b600060208284031215611abe57600080fd5b5035919050565b600080600060608486031215611ada57600080fd5b8335611ae581611a4e565b92506020840135611af581611a4e565b929592945050506040919091013590565b600060208284031215611b1857600080fd5b813560ff81168114610fc857600080fd5b60008083601f840112611b3b57600080fd5b50813567ffffffffffffffff811115611b5357600080fd5b602083019150836020828501011115611b6b57600080fd5b9250929050565b600080600080600060608688031215611b8a57600080fd5b853567ffffffffffffffff811115611ba157600080fd5b611bad88828901611b29565b909650945050602086013567ffffffffffffffff811115611bcd57600080fd5b611bd988828901611b29565b96999598509660400135949350505050565b634e487b7160e01b600052601260045260246000fd5b600082611c1057611c10611beb565b500690565b634e487b7160e01b600052601160045260246000fd5b8082018281126000831280158216821582161715611c4b57611c4b611c15565b505092915050565b600060208284031215611c6557600080fd5b8151610fc881611a4e565b600060208284031215611c8257600080fd5b81518015158114610fc857600080fd5b6000600160ff1b8201611ca757611ca7611c15565b5060000390565b8181038181111561075957610759611c15565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000611cfe606083018789611cc1565b8281036020840152611d11818688611cc1565b9150508260408301529695505050505050565b6000815160005b81811015611d455760208185018101518683015201611d2b565b50600093019283525090919050565b6000611a46611d638386611d24565b84611d24565b8181036000831280158383131683831282161715611d8957611d89611c15565b5092915050565b600082611d9f57611d9f611beb565b500790565b600060018201611db657611db6611c15565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193a2646970667358221220df1d9e9d820a012de04366c57d0d6c8e201316f871e60ad5fd71000be137bc1864736f6c634300081b0033", } // EigenPodManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenPodManagerStorage/binding.go b/pkg/bindings/EigenPodManagerStorage/binding.go index 446bf1a74..9dfa796b2 100644 --- a/pkg/bindings/EigenPodManagerStorage/binding.go +++ b/pkg/bindings/EigenPodManagerStorage/binding.go @@ -31,7 +31,7 @@ var ( // EigenPodManagerStorageMetaData contains all meta data concerning the EigenPodManagerStorage contract. var EigenPodManagerStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"numPods\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ownerToPod\",\"inputs\":[{\"name\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"numPods\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ownerToPod\",\"inputs\":[{\"name\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"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. diff --git a/pkg/bindings/EigenPodStorage/binding.go b/pkg/bindings/EigenPodStorage/binding.go index 70640763e..de7c3e95b 100644 --- a/pkg/bindings/EigenPodStorage/binding.go +++ b/pkg/bindings/EigenPodStorage/binding.go @@ -72,7 +72,7 @@ type IEigenPodValidatorInfo 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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false}]", + 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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsWithdrawableRestakedExecutionLayerGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountMustBeMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncompletePreviousCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBlockRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoints\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofOlderThanLastCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExiting\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNoPendingActivation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawCredentialsNotForEigenPod\",\"inputs\":[]}]", } // EigenPodStorageABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenStrategy/binding.go b/pkg/bindings/EigenStrategy/binding.go index 2070a2d17..18a5accf4 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\"}],\"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\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_EIGEN\",\"type\":\"address\",\"internalType\":\"contractIEigen\"},{\"name\":\"_bEIGEN\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162001dc338038062001dc3833981016040819052620000349162000116565b6001600160a01b038116608052806200004c62000054565b505062000148565b600054610100900460ff1615620000c15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000114576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012957600080fd5b81516001600160a01b03811681146200014157600080fd5b9392505050565b608051611c4a62000179600039600081816101af015281816105ac01528181610ad40152610b9f0152611c4a6000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80637a8b2637116100c3578063ce7c2ac21161007c578063ce7c2ac2146102da578063d9caed12146102ed578063e3dae51c14610300578063f3e7387514610313578063fabc1cbc14610326578063fdc371ce1461033957600080fd5b80637a8b263714610260578063886f1195146102735780638c8710191461028c5780638f6a62401461029f578063ab5921e1146102b2578063c0c53b8b146102c757600080fd5b806347e7ef241161011557806347e7ef24146101e8578063485cc955146101fb578063553ca5f81461020e578063595c6a67146102215780635ac86ab7146102295780635c975abb1461025857600080fd5b806310d67a2f14610152578063136439dd146101675780632495a5991461017a57806339b70e38146101aa5780633a98ef39146101d1575b600080fd5b61016561016036600461181e565b61034c565b005b61016561017536600461183b565b610408565b60325461018d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61018d7f000000000000000000000000000000000000000000000000000000000000000081565b6101da60335481565b6040519081526020016101a1565b6101da6101f6366004611854565b61054c565b610165610209366004611880565b610790565b6101da61021c36600461181e565b61085e565b610165610872565b6102486102373660046118c8565b6001805460ff9092161b9081161490565b60405190151581526020016101a1565b6001546101da565b6101da61026e36600461183b565b61093e565b60005461018d906201000090046001600160a01b031681565b6101da61029a36600461183b565b610989565b6101da6102ad36600461181e565b610994565b6102ba6109a2565b6040516101a19190611911565b6101656102d5366004611944565b6109c2565b6101da6102e836600461181e565b610aac565b6101656102fb36600461198f565b610b41565b6101da61030e36600461183b565b610d27565b6101da61032136600461183b565b610d60565b61016561033436600461183b565b610d6b565b60645461018d906001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c391906119d0565b6001600160a01b0316336001600160a01b0316146103fc5760405162461bcd60e51b81526004016103f3906119ed565b60405180910390fd5b61040581610ec7565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104799190611a37565b6104955760405162461bcd60e51b81526004016103f390611a59565b6001548181161461050e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016103f3565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600180546000918291811614156105a15760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103f3565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106195760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103f3565b6106238484610fcc565b60335460006106346103e883611ab7565b905060006103e86106436110e0565b61064d9190611ab7565b9050600061065b8783611acf565b9050806106688489611ae6565b6106729190611b05565b9550856106d85760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b60648201526084016103f3565b6106e28685611ab7565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561076c5760405162461bcd60e51b815260206004820152603c60248201527f5374726174656779426173652e6465706f7369743a20746f74616c536861726560448201527f73206578636565647320604d41585f544f54414c5f534841524553600000000060648201526084016103f3565b610785826103e86033546107809190611ab7565b611152565b505050505092915050565b600054610100900460ff16158080156107b05750600054600160ff909116105b806107ca5750303b1580156107ca575060005460ff166001145b6107e65760405162461bcd60e51b81526004016103f390611b27565b6000805460ff191660011790558015610809576000805461ff0019166101001790555b61081383836111a6565b8015610859576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061086c61026e83610aac565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156108bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e39190611a37565b6108ff5760405162461bcd60e51b81526004016103f390611a59565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e86033546109519190611ab7565b905060006103e86109606110e0565b61096a9190611ab7565b9050816109778583611ae6565b6109819190611b05565b949350505050565b600061086c82610d27565b600061086c61032183610aac565b60606040518060800160405280604d8152602001611bc8604d9139905090565b600054610100900460ff16158080156109e25750600054600160ff909116105b806109fc5750303b1580156109fc575060005460ff166001145b610a185760405162461bcd60e51b81526004016103f390611b27565b6000805460ff191660011790558015610a3b576000805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b038616179055610a6083836111a6565b8015610aa6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086c9190611b75565b6001805460029081161415610b945760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103f3565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c0c5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103f3565b610c178484846112f1565b60335480831115610ca65760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a4016103f3565b6000610cb46103e883611ab7565b905060006103e8610cc36110e0565b610ccd9190611ab7565b9050600082610cdc8784611ae6565b610ce69190611b05565b9050610cf28685611acf565b603355610d12610d028284611acf565b6103e86033546107809190611ab7565b610d1d88888361138c565b5050505050505050565b6000806103e8603354610d3a9190611ab7565b905060006103e8610d496110e0565b610d539190611ab7565b9050806109778386611ae6565b600061086c8261093e565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de291906119d0565b6001600160a01b0316336001600160a01b031614610e125760405162461bcd60e51b81526004016103f3906119ed565b600154198119600154191614610e905760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016103f3565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610541565b6001600160a01b038116610f555760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016103f3565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b0383811691161480610ff557506064546001600160a01b038381169116145b6110675760405162461bcd60e51b815260206004820152603760248201527f456967656e53747261746567792e6465706f7369743a2043616e206f6e6c792060448201527f6465706f7369742062454947454e206f7220454947454e00000000000000000060648201526084016103f3565b6064546001600160a01b03838116911614156110dc57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e90602401600060405180830381600087803b1580156110c357600080fd5b505af11580156110d7573d6000803e3d6000fd5b505050505b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d9190611b75565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be88161118684670de0b6b3a7640000611ae6565b6111909190611b05565b6040519081526020015b60405180910390a15050565b600054610100900460ff166112115760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103f3565b603280546001600160a01b0319166001600160a01b03841617905561123781600061148d565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d09190611b8e565b604080516001600160a01b03909316835260ff90911660208301520161119a565b6032546001600160a01b038381169116148061131a57506064546001600160a01b038381169116145b6108595760405162461bcd60e51b815260206004820152603960248201527f456967656e53747261746567792e77697468647261773a2043616e206f6e6c7960448201527f2077697468647261772062454947454e206f7220454947454e0000000000000060648201526084016103f3565b6064546001600160a01b03838116911614156114795760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af11580156113f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114199190611a37565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb090602401600060405180830381600087803b15801561146057600080fd5b505af1158015611474573d6000803e3d6000fd5b505050505b6108596001600160a01b0383168483611579565b6000546201000090046001600160a01b03161580156114b457506001600160a01b03821615155b6115365760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016103f3565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26110dc82610ec7565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261085992869291600091611609918516908490611686565b80519091501561085957808060200190518101906116279190611a37565b6108595760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103f3565b6060611695848460008561169f565b90505b9392505050565b6060824710156117005760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103f3565b6001600160a01b0385163b6117575760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103f3565b600080866001600160a01b031685876040516117739190611bab565b60006040518083038185875af1925050503d80600081146117b0576040519150601f19603f3d011682016040523d82523d6000602084013e6117b5565b606091505b50915091506117c58282866117d0565b979650505050505050565b606083156117df575081611698565b8251156117ef5782518084602001fd5b8160405162461bcd60e51b81526004016103f39190611911565b6001600160a01b038116811461040557600080fd5b60006020828403121561183057600080fd5b813561169881611809565b60006020828403121561184d57600080fd5b5035919050565b6000806040838503121561186757600080fd5b823561187281611809565b946020939093013593505050565b6000806040838503121561189357600080fd5b823561189e81611809565b915060208301356118ae81611809565b809150509250929050565b60ff8116811461040557600080fd5b6000602082840312156118da57600080fd5b8135611698816118b9565b60005b838110156119005781810151838201526020016118e8565b83811115610aa65750506000910152565b60208152600082518060208401526119308160408501602087016118e5565b601f01601f19169190910160400192915050565b60008060006060848603121561195957600080fd5b833561196481611809565b9250602084013561197481611809565b9150604084013561198481611809565b809150509250925092565b6000806000606084860312156119a457600080fd5b83356119af81611809565b925060208401356119bf81611809565b929592945050506040919091013590565b6000602082840312156119e257600080fd5b815161169881611809565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611a4957600080fd5b8151801515811461169857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611aca57611aca611aa1565b500190565b600082821015611ae157611ae1611aa1565b500390565b6000816000190483118215151615611b0057611b00611aa1565b500290565b600082611b2257634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600060208284031215611b8757600080fd5b5051919050565b600060208284031215611ba057600080fd5b8151611698816118b9565b60008251611bbd8184602087016118e5565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212209f0a5f3b361d82437f0c321794900a7aead1b85f77f12d7038cbafbf9ebeb3f164736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_EIGEN\",\"type\":\"address\",\"internalType\":\"contractIEigen\"},{\"name\":\"_bEIGEN\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"WithdrawalAmountExceedsDeposit\",\"inputs\":[]}]", + Bin: "0x60a060405234801561001057600080fd5b5060405161193638038061193683398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b6080516117ca61016c600039600081816101af015281816105240152818161098f0152610a2e01526117ca6000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80637a8b2637116100c3578063ce7c2ac21161007c578063ce7c2ac2146102da578063d9caed12146102ed578063e3dae51c14610300578063f3e7387514610313578063fabc1cbc14610326578063fdc371ce1461033957600080fd5b80637a8b263714610260578063886f1195146102735780638c8710191461028c5780638f6a62401461029f578063ab5921e1146102b2578063c0c53b8b146102c757600080fd5b806347e7ef241161011557806347e7ef24146101e8578063485cc955146101fb578063553ca5f81461020e578063595c6a67146102215780635ac86ab7146102295780635c975abb1461025857600080fd5b806310d67a2f14610152578063136439dd146101675780632495a5991461017a57806339b70e38146101aa5780633a98ef39146101d1575b600080fd5b610165610160366004611449565b61034c565b005b610165610175366004611466565b610400565b60325461018d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61018d7f000000000000000000000000000000000000000000000000000000000000000081565b6101da60335481565b6040519081526020016101a1565b6101da6101f636600461147f565b6104f0565b6101656102093660046114ab565b610641565b6101da61021c366004611449565b610718565b61016561072c565b6102486102373660046114f3565b6001805460ff9092161b9081161490565b60405190151581526020016101a1565b6001546101da565b6101da61026e366004611466565b6107f9565b60005461018d906201000090046001600160a01b031681565b6101da61029a366004611466565b610844565b6101da6102ad366004611449565b61084f565b6102ba61085d565b6040516101a19190611534565b6101656102d5366004611567565b61087d565b6101da6102e8366004611449565b610967565b6101656102fb3660046115b2565b6109fc565b6101da61030e366004611466565b610b1c565b6101da610321366004611466565b610b55565b610165610334366004611466565b610b60565b60645461018d906001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c391906115f3565b6001600160a01b0316336001600160a01b0316146103f45760405163794821ff60e01b815260040160405180910390fd5b6103fd81610c68565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561044d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104719190611610565b61048e57604051631d77d47760e21b815260040160405180910390fd5b600154818116146104b25760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036105195760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610562576040516348da714f60e01b815260040160405180910390fd5b61056c8484610d06565b603354600061057d6103e883611648565b905060006103e861058c610dc5565b6105969190611648565b905060006105a4878361165b565b9050806105b1848961166e565b6105bb9190611685565b9550856000036105de57604051630c392ed360e11b815260040160405180910390fd5b6105e88685611648565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561061d57604051632f14e8a360e11b815260040160405180910390fd5b610636826103e86033546106319190611648565b610e37565b505050505092915050565b600054610100900460ff16158080156106615750600054600160ff909116105b8061067b5750303b15801561067b575060005460ff166001145b6106a05760405162461bcd60e51b8152600401610697906116a7565b60405180910390fd5b6000805460ff1916600117905580156106c3576000805461ff0019166101001790555b6106cd8383610e8b565b8015610713576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061072661026e83610967565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079d9190611610565b6107ba57604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e860335461080c9190611648565b905060006103e861081b610dc5565b6108259190611648565b905081610832858361166e565b61083c9190611685565b949350505050565b600061072682610b1c565b600061072661032183610967565b60606040518060800160405280604d8152602001611748604d9139905090565b600054610100900460ff161580801561089d5750600054600160ff909116105b806108b75750303b1580156108b7575060005460ff166001145b6108d35760405162461bcd60e51b8152600401610697906116a7565b6000805460ff1916600117905580156108f6576000805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03861617905561091b8383610e8b565b8015610961576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072691906116f5565b60018054600290811603610a235760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6c576040516348da714f60e01b815260040160405180910390fd5b610a77848484610fd6565b60335480831115610a9b57604051633a5d3b0160e21b815260040160405180910390fd5b6000610aa96103e883611648565b905060006103e8610ab8610dc5565b610ac29190611648565b9050600082610ad1878461166e565b610adb9190611685565b9050610ae7868561165b565b603355610b07610af7828461165b565b6103e86033546106319190611648565b610b1288888361101c565b5050505050505050565b6000806103e8603354610b2f9190611648565b905060006103e8610b3e610dc5565b610b489190611648565b905080610832838661166e565b6000610726826107f9565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd791906115f3565b6001600160a01b0316336001600160a01b031614610c085760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610c315760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104e5565b6001600160a01b038116610c8f576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b0383811691161480610d2f57506064546001600160a01b038381169116145b610d4c57604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610dc157606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e90602401600060405180830381600087803b158015610da857600080fd5b505af1158015610dbc573d6000803e3d6000fd5b505050505b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3291906116f5565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610e6b84670de0b6b3a764000061166e565b610e759190611685565b6040519081526020015b60405180910390a15050565b600054610100900460ff16610ef65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610697565b603280546001600160a01b0319166001600160a01b038416179055610f1c81600061111d565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb5919061170e565b604080516001600160a01b03909316835260ff909116602083015201610e7f565b6032546001600160a01b0383811691161480610fff57506064546001600160a01b038381169116145b61071357604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b03908116908316036111095760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015611085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a99190611610565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb090602401600060405180830381600087803b1580156110f057600080fd5b505af1158015611104573d6000803e3d6000fd5b505050505b6107136001600160a01b03831684836111a4565b6000546201000090046001600160a01b031615801561114457506001600160a01b03821615155b611161576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610dc182610c68565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610713928692916000916112349185169084906112b1565b80519091501561071357808060200190518101906112529190611610565b6107135760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610697565b60606112c084846000856112ca565b90505b9392505050565b60608247101561132b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610697565b6001600160a01b0385163b6113825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b600080866001600160a01b0316858760405161139e919061172b565b60006040518083038185875af1925050503d80600081146113db576040519150601f19603f3d011682016040523d82523d6000602084013e6113e0565b606091505b50915091506113f08282866113fb565b979650505050505050565b6060831561140a5750816112c3565b82511561141a5782518084602001fd5b8160405162461bcd60e51b81526004016106979190611534565b6001600160a01b03811681146103fd57600080fd5b60006020828403121561145b57600080fd5b81356112c381611434565b60006020828403121561147857600080fd5b5035919050565b6000806040838503121561149257600080fd5b823561149d81611434565b946020939093013593505050565b600080604083850312156114be57600080fd5b82356114c981611434565b915060208301356114d981611434565b809150509250929050565b60ff811681146103fd57600080fd5b60006020828403121561150557600080fd5b81356112c3816114e4565b60005b8381101561152b578181015183820152602001611513565b50506000910152565b6020815260008251806020840152611553816040850160208701611510565b601f01601f19169190910160400192915050565b60008060006060848603121561157c57600080fd5b833561158781611434565b9250602084013561159781611434565b915060408401356115a781611434565b809150509250925092565b6000806000606084860312156115c757600080fd5b83356115d281611434565b925060208401356115e281611434565b929592945050506040919091013590565b60006020828403121561160557600080fd5b81516112c381611434565b60006020828403121561162257600080fd5b815180151581146112c357600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072657610726611632565b8181038181111561072657610726611632565b808202811582820484141761072657610726611632565b6000826116a257634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60006020828403121561170757600080fd5b5051919050565b60006020828403121561172057600080fd5b81516112c3816114e4565b6000825161173d818460208701611510565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220f8544abf321dcdbe9561b78dc03e01ee260e55de4f4f8a7e823fc885c8e73ad364736f6c634300081b0033", } // EigenStrategyABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/Endian/binding.go b/pkg/bindings/Endian/binding.go index b9f7ef348..d9bafb326 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: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220731750cc39c1118f2ee5b7230bba50321789b805b1844817687dc7c3931262f964736f6c634300080c0033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200a2ff2c8640be799bf0f24e1f55349bb44ff68c1cfaf8dcdd94359a64a35fa0f64736f6c634300081b0033", } // 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 6ee8f3ce0..fafba8a42 100644 --- a/pkg/bindings/IAVSDirectory/binding.go +++ b/pkg/bindings/IAVSDirectory/binding.go @@ -38,7 +38,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry 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\":\"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\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"structISignatureUtils.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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"OPERATOR_AVS_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\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"structISignatureUtils.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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", } // IAVSDirectoryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IDelegationManager/binding.go b/pkg/bindings/IDelegationManager/binding.go index 3d9a84301..6475ed648 100644 --- a/pkg/bindings/IDelegationManager/binding.go +++ b/pkg/bindings/IDelegationManager/binding.go @@ -62,7 +62,7 @@ type ISignatureUtilsSignatureWithExpiry 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\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"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\":\"StakerOptOutWindowBlocksCannotDecrease\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotStaker\",\"inputs\":[]}]", } // IDelegationManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IEigenPod/binding.go b/pkg/bindings/IEigenPod/binding.go index a07b03980..ba98de21c 100644 --- a/pkg/bindings/IEigenPod/binding.go +++ b/pkg/bindings/IEigenPod/binding.go @@ -72,7 +72,7 @@ type IEigenPodValidatorInfo 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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false}]", + 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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsWithdrawableRestakedExecutionLayerGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountMustBeMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncompletePreviousCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBlockRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoints\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofOlderThanLastCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExiting\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNoPendingActivation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawCredentialsNotForEigenPod\",\"inputs\":[]}]", } // IEigenPodABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IEigenPodManager/binding.go b/pkg/bindings/IEigenPodManager/binding.go index 8574aafa1..4239a7cc7 100644 --- a/pkg/bindings/IEigenPodManager/binding.go +++ b/pkg/bindings/IEigenPodManager/binding.go @@ -31,7 +31,7 @@ var ( // IEigenPodManagerMetaData contains all meta data concerning the IEigenPodManager contract. var IEigenPodManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"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\":\"podOwnerShares\",\"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\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"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\":\"podOwnerShares\",\"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\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"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. diff --git a/pkg/bindings/IPausable/binding.go b/pkg/bindings/IPausable/binding.go index 4cef4b112..0cf64ce35 100644 --- a/pkg/bindings/IPausable/binding.go +++ b/pkg/bindings/IPausable/binding.go @@ -31,7 +31,7 @@ var ( // IPausableMetaData contains all meta data concerning the IPausable contract. var IPausableMetaData = &bind.MetaData{ - ABI: "[{\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", + ABI: "[{\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]}]", } // IPausableABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IPauserRegistry/binding.go b/pkg/bindings/IPauserRegistry/binding.go index 59678ea9e..aaa464fef 100644 --- a/pkg/bindings/IPauserRegistry/binding.go +++ b/pkg/bindings/IPauserRegistry/binding.go @@ -31,7 +31,7 @@ var ( // IPauserRegistryMetaData contains all meta data concerning the IPauserRegistry contract. var IPauserRegistryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"isPauser\",\"inputs\":[{\"name\":\"pauser\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"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}]", + ABI: "[{\"type\":\"function\",\"name\":\"isPauser\",\"inputs\":[{\"name\":\"pauser\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"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\":[]}]", } // IPauserRegistryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IRewardsCoordinator/binding.go b/pkg/bindings/IRewardsCoordinator/binding.go index caacc527a..9f90ea0e4 100644 --- a/pkg/bindings/IRewardsCoordinator/binding.go +++ b/pkg/bindings/IRewardsCoordinator/binding.go @@ -77,7 +77,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", + 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"AmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CommissionBipsExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsForAllSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]}]", } // IRewardsCoordinatorABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IStrategy/binding.go b/pkg/bindings/IStrategy/binding.go index 4d3e0fcae..9bf63dffa 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\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"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}]", + 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\":[],\"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\":\"WithdrawalAmountExceedsDeposit\",\"inputs\":[]}]", } // IStrategyABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IStrategyFactory/binding.go b/pkg/bindings/IStrategyFactory/binding.go index 70f95fe3e..7f8a4dbe0 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\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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}]", + 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\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotBlacklistDeployedStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyExists\",\"inputs\":[]}]", } // IStrategyFactoryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IStrategyManager/binding.go b/pkg/bindings/IStrategyManager/binding.go index 5dc38621c..c3c822407 100644 --- a/pkg/bindings/IStrategyManager/binding.go +++ b/pkg/bindings/IStrategyManager/binding.go @@ -31,7 +31,7 @@ var ( // 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\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"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\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyListLength\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyShares\",\"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\":\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"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\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyListLength\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyShares\",\"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\":\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"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\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThirdPartyTransfersDisabled\",\"inputs\":[]}]", } // IStrategyManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/Merkle/binding.go b/pkg/bindings/Merkle/binding.go index 93e82af72..7580f2e51 100644 --- a/pkg/bindings/Merkle/binding.go +++ b/pkg/bindings/Merkle/binding.go @@ -31,8 +31,8 @@ var ( // MerkleMetaData contains all meta data concerning the Merkle contract. var MerkleMetaData = &bind.MetaData{ - ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220de4dce1b90fa553d4573afc57ce3ea0458378cac0669dc216b6be8ae471c99ea64736f6c634300080c0033", + ABI: "[{\"type\":\"error\",\"name\":\"ProofLengthNotMultipleOf32\",\"inputs\":[]}]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205b4a33f7e57be7d9deb179404ebd959b24779b922c2fc85b033f6246e990860464736f6c634300081b0033", } // MerkleABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/Pausable/binding.go b/pkg/bindings/Pausable/binding.go index 744b7e84b..6dbe44ec5 100644 --- a/pkg/bindings/Pausable/binding.go +++ b/pkg/bindings/Pausable/binding.go @@ -31,8 +31,8 @@ var ( // PausableMetaData contains all meta data concerning the Pausable contract. var PausableMetaData = &bind.MetaData{ - ABI: "[{\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", - Bin: "0x608060405234801561001057600080fd5b506107c2806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80635ac86ab71161005b5780635ac86ab7146100b25780635c975abb146100e6578063886f1195146100f7578063fabc1cbc1461012257600080fd5b806310d67a2f14610082578063136439dd14610097578063595c6a67146100aa575b600080fd5b61009561009036600461065b565b610135565b005b6100956100a536600461067f565b6101ef565b61009561032e565b6100d16100c0366004610698565b6001805460ff9092161b9081161490565b60405190151581526020015b60405180910390f35b6001546040519081526020016100dd565b60005461010a906001600160a01b031681565b6040516001600160a01b0390911681526020016100dd565b61009561013036600461067f565b6103f5565b60008054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101aa91906106bb565b6001600160a01b0316336001600160a01b0316146101e35760405162461bcd60e51b81526004016101da906106d8565b60405180910390fd5b6101ec8161054f565b50565b60005460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025b9190610722565b6102775760405162461bcd60e51b81526004016101da90610744565b600154818116146102f05760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016101da565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60005460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a9190610722565b6103b65760405162461bcd60e51b81526004016101da90610744565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60008054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046a91906106bb565b6001600160a01b0316336001600160a01b03161461049a5760405162461bcd60e51b81526004016101da906106d8565b6001541981196001541916146105185760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016101da565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610323565b6001600160a01b0381166105dd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016101da565b600054604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811681146101ec57600080fd5b60006020828403121561066d57600080fd5b813561067881610646565b9392505050565b60006020828403121561069157600080fd5b5035919050565b6000602082840312156106aa57600080fd5b813560ff8116811461067857600080fd5b6000602082840312156106cd57600080fd5b815161067881610646565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561073457600080fd5b8151801515811461067857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b60608201526080019056fea26469706673582212202c2653223ee00d36dc739f8691b398adc60ad925c3636f4c4c9e100e9732974164736f6c634300080c0033", + ABI: "[{\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]}]", + Bin: "0x6080604052348015600f57600080fd5b5061061a8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80635ac86ab71161005b5780635ac86ab7146100b25780635c975abb146100e6578063886f1195146100f7578063fabc1cbc1461012257600080fd5b806310d67a2f14610082578063136439dd14610097578063595c6a67146100aa575b600080fd5b610095610090366004610545565b610135565b005b6100956100a5366004610569565b6101e7565b6100956102d2565b6100d16100c0366004610582565b6001805460ff9092161b9081161490565b60405190151581526020015b60405180910390f35b6001546040519081526020016100dd565b60005461010a906001600160a01b031681565b6040516001600160a01b0390911681526020016100dd565b610095610130366004610569565b61039a565b60008054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101aa91906105a5565b6001600160a01b0316336001600160a01b0316146101db5760405163794821ff60e01b815260040160405180910390fd5b6101e4816104a0565b50565b60005460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561022f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025391906105c2565b61027057604051631d77d47760e21b815260040160405180910390fd5b600154818116146102945760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60005460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561031a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033e91906105c2565b61035b57604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60008054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040f91906105a5565b6001600160a01b0316336001600160a01b0316146104405760405163794821ff60e01b815260040160405180910390fd5b6001541981196001541916146104695760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016102c7565b6001600160a01b0381166104c7576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811681146101e457600080fd5b60006020828403121561055757600080fd5b813561056281610530565b9392505050565b60006020828403121561057b57600080fd5b5035919050565b60006020828403121561059457600080fd5b813560ff8116811461056257600080fd5b6000602082840312156105b757600080fd5b815161056281610530565b6000602082840312156105d457600080fd5b8151801515811461056257600080fdfea2646970667358221220ca494d4d98e0f8f6a6ff05c79faaec402f1775db5b5b2c32aa4192192461486f64736f6c634300081b0033", } // PausableABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/PauserRegistry/binding.go b/pkg/bindings/PauserRegistry/binding.go index bcfe873b2..bd04c34af 100644 --- a/pkg/bindings/PauserRegistry/binding.go +++ b/pkg/bindings/PauserRegistry/binding.go @@ -31,8 +31,8 @@ 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}]", - Bin: "0x608060405234801561001057600080fd5b5060405161077838038061077883398101604081905261002f91610263565b60005b82518110156100775761006583828151811061005057610050610339565b6020026020010151600161008860201b60201c565b8061006f8161034f565b915050610032565b506100818161015a565b5050610378565b6001600160a01b0382166100f95760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b60648201526084015b60405180910390fd5b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101c85760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b60648201526084016100f0565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b038116811461025e57600080fd5b919050565b6000806040838503121561027657600080fd5b82516001600160401b038082111561028d57600080fd5b818501915085601f8301126102a157600080fd5b81516020828211156102b5576102b5610231565b8160051b604051601f19603f830116810181811086821117156102da576102da610231565b6040529283528183019350848101820192898411156102f857600080fd5b948201945b8386101561031d5761030e86610247565b855294820194938201936102fd565b965061032c9050878201610247565b9450505050509250929050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561037157634e487b7160e01b600052601160045260246000fd5b5060010190565b6103f1806103876000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610313565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c610097366004610335565b6100dc565b005b61009c6100ac366004610313565b61011d565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b0316331461010f5760405162461bcd60e51b815260040161010690610371565b60405180910390fd5b6101198282610153565b5050565b6001546001600160a01b031633146101475760405162461bcd60e51b815260040161010690610371565b61015081610220565b50565b6001600160a01b0382166101bf5760405162461bcd60e51b815260206004820152602d60248201527f50617573657252656769737472792e5f7365745061757365723a207a65726f2060448201526c1859191c995cdcc81a5b9c1d5d609a1b6064820152608401610106565b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661028e5760405162461bcd60e51b815260206004820152602f60248201527f50617573657252656769737472792e5f736574556e7061757365723a207a657260448201526e1bc81859191c995cdcc81a5b9c1d5d608a1b6064820152608401610106565b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461030e57600080fd5b919050565b60006020828403121561032557600080fd5b61032e826102f7565b9392505050565b6000806040838503121561034857600080fd5b610351836102f7565b91506020830135801515811461036657600080fd5b809150509250929050565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b60608201526080019056fea26469706673582212203b45f7c66225e5887e8907d44b53ad76d03563101c6febf801e78006f96642e664736f6c634300080c0033", + 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: "0x608060405234801561001057600080fd5b506040516105e23803806105e283398101604081905261002f916101c8565b60005b825181101561006d57610065838281518110610050576100506102a9565b6020026020010151600161007e60201b60201c565b600101610032565b5061007781610106565b50506102bf565b6001600160a01b0382166100a5576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661012d576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146101c357600080fd5b919050565b600080604083850312156101db57600080fd5b82516001600160401b038111156101f157600080fd5b8301601f8101851361020257600080fd5b80516001600160401b0381111561021b5761021b610196565b604051600582901b90603f8201601f191681016001600160401b038111828210171561024957610249610196565b60405291825260208184018101929081018884111561026757600080fd5b6020850194505b8385101561028d5761027f856101ac565b81526020948501940161026e565b5094506102a092505050602084016101ac565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b610314806102ce6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806346fbf68e146100515780638568520614610089578063ce5484281461009e578063eab66d7a146100b1575b600080fd5b61007461005f366004610280565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009c6100973660046102a2565b6100dc565b005b61009c6100ac366004610280565b610115565b6001546100c4906001600160a01b031681565b6040516001600160a01b039091168152602001610080565b6001546001600160a01b031633146101075760405163794821ff60e01b815260040160405180910390fd5b610111828261014c565b5050565b6001546001600160a01b031633146101405760405163794821ff60e01b815260040160405180910390fd5b610149816101d4565b50565b6001600160a01b038216610173576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b03821660008181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101fb576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461027b57600080fd5b919050565b60006020828403121561029257600080fd5b61029b82610264565b9392505050565b600080604083850312156102b557600080fd5b6102be83610264565b9150602083013580151581146102d357600080fd5b80915050925092905056fea2646970667358221220229f4c78b91a361b788964e47586a94431d9f4ebedaa647d947f6a0895378b1164736f6c634300081b0033", } // PauserRegistryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/RewardsCoordinator/binding.go b/pkg/bindings/RewardsCoordinator/binding.go index 2e8d7e02f..0343f698e 100644 --- a/pkg/bindings/RewardsCoordinator/binding.go +++ b/pkg/bindings/RewardsCoordinator/binding.go @@ -77,8 +77,8 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf struct { // RewardsCoordinatorMetaData contains all meta data concerning the RewardsCoordinator contract. var RewardsCoordinatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"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\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004593380380620045938339810160408190526200003591620002e4565b868686868686866200004885826200037e565b63ffffffff1615620000ed5760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b620000fc62015180866200037e565b63ffffffff16156200019d5760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a401620000e4565b6001600160a01b0396871661012052949095166101405263ffffffff92831660805290821660a052811660c05291821660e0521661010052620001df620001f2565b5050466101605250620003b09350505050565b600054610100900460ff16156200025c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000e4565b60005460ff9081161015620002af576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002c757600080fd5b50565b805163ffffffff81168114620002df57600080fd5b919050565b600080600080600080600060e0888a0312156200030057600080fd5b87516200030d81620002b1565b60208901519097506200032081620002b1565b95506200033060408901620002ca565b94506200034060608901620002ca565b93506200035060808901620002ca565b92506200036060a08901620002ca565b91506200037060c08901620002ca565b905092959891949750929550565b600063ffffffff80841680620003a457634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b60805160a05160c05160e0516101005161012051610140516101605161414c620004476000396000611a6b0152600081816104fd01526128d3015260006107bd015260008181610406015261270201526000818161033201526127ae0152600081816104d601526126b101526000818161071c0152612428015260008181610694015281816124df01526125ba015261414c6000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c80637b8f8b051161019d578063d4540a55116100e9578063f698da25116100a2578063fabc1cbc1161007c578063fabc1cbc14610820578063fbf1e2c114610833578063fce36c7d14610846578063ff9f6cce1461085957600080fd5b8063f698da25146107f2578063f8cd8448146107fa578063f96abf2e1461080d57600080fd5b8063d4540a551461076c578063de02e5031461077f578063e221b24514610792578063e810ce21146107a5578063ea4d3c9b146107b8578063f2fde38b146107df57600080fd5b80639be3d4e411610156578063aebd8bae11610130578063aebd8bae146106c9578063bb7e451f146106f7578063bf21a8aa14610717578063c46db6061461073e57600080fd5b80639be3d4e4146106875780639d45c2811461068f578063a0169ddd146106b657600080fd5b80637b8f8b0514610602578063863cb9a91461060a578063865c69531461061d578063886f1195146106485780638da5cb5b1461065b5780639104c3191461066c57600080fd5b806337838ed01161025c57806358baaa3e116102155780635c975abb116101ef5780635c975abb146105b15780635e9d8348146105b95780636d21117e146105cc578063715018a6146105fa57600080fd5b806358baaa3e14610573578063595c6a67146105865780635ac86ab71461058e57600080fd5b806337838ed0146104d157806339b70e38146104f85780633a8c07861461051f5780633ccc861d146105365780633efe1db6146105495780634d18cc351461055c57600080fd5b8063131433b4116102ae578063131433b414610401578063136439dd14610428578063149bc8721461043b57806322f19a641461045c5780632b9f64a41461047d57806336af41fa146104be57600080fd5b806218572c146102f557806304a0c5021461032d578063092db007146103695780630e9a53cf146103915780630eb38345146103d957806310d67a2f146103ee575b600080fd5b61031861030336600461375e565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103547f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610324565b60cb5461037e90600160e01b900461ffff1681565b60405161ffff9091168152602001610324565b61039961086c565b604080518251815260208084015163ffffffff90811691830191909152838301511691810191909152606091820151151591810191909152608001610324565b6103ec6103e7366004613789565b61094b565b005b6103ec6103fc36600461375e565b6109cd565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103ec6104363660046137c2565b610a89565b61044e6104493660046137f3565b610bc8565b604051908152602001610324565b61037e61046a36600461380f565b505060cb54600160e01b900461ffff1690565b6104a661048b36600461375e565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610324565b6103ec6104cc36600461383d565b610c3e565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6104a67f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461035490600160a01b900463ffffffff1681565b6103ec6105443660046138c5565b610e08565b6103ec610557366004613925565b6111cc565b60cb5461035490600160c01b900463ffffffff1681565b6103ec610581366004613951565b61149d565b6103ec6114ae565b61031861059c36600461396c565b606654600160ff9092169190911b9081161490565b60665461044e565b6103186105c736600461398f565b611575565b6103186105da3660046139c4565b60cf60209081526000928352604080842090915290825290205460ff1681565b6103ec611602565b60ca5461044e565b6103ec61061836600461375e565b611616565b61044e61062b36600461380f565b60cd60209081526000928352604080842090915290825290205481565b6065546104a6906001600160a01b031681565b6033546001600160a01b03166104a6565b6104a673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610399611627565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103ec6106c436600461375e565b6116c5565b6103186106d73660046139c4565b60d260209081526000928352604080842090915290825290205460ff1681565b61044e61070536600461375e565b60ce6020526000908152604090205481565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b61031861074c3660046139c4565b60d060209081526000928352604080842090915290825290205460ff1681565b6103ec61077a366004613a0d565b611724565b61039961078d3660046137c2565b61186c565b6103ec6107a0366004613a80565b6118fe565b6103546107b33660046137c2565b61190f565b6104a67f000000000000000000000000000000000000000000000000000000000000000081565b6103ec6107ed36600461375e565b6119f1565b61044e611a67565b61044e6108083660046137f3565b611aa5565b6103ec61081b366004613951565b611ab6565b6103ec61082e3660046137c2565b611cec565b60cb546104a6906001600160a01b031681565b6103ec61085436600461383d565b611e48565b6103ec61086736600461383d565b611fc7565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b801561094757600060ca6108a9600184613ab1565b815481106108b9576108b9613ac8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615801560608301819052919250906109295750806040015163ffffffff164210155b156109345792915050565b508061093f81613ade565b915050610894565b5090565b610953612175565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190613af5565b6001600160a01b0316336001600160a01b031614610a7d5760405162461bcd60e51b8152600401610a7490613b12565b60405180910390fd5b610a86816121cf565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613b5c565b610b115760405162461bcd60e51b8152600401610a7490613b79565b60665481811614610b8a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610a74565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610bd8602084018461375e565b8360200135604051602001610c219392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460019060029081161415610c675760405162461bcd60e51b8152600401610a7490613bc1565b33600090815260d1602052604090205460ff16610c965760405162461bcd60e51b8152600401610a7490613bf8565b60026097541415610cb95760405162461bcd60e51b8152600401610a7490613c6f565b600260975560005b82811015610dfd5736848483818110610cdc57610cdc613ac8565b9050602002810190610cee9190613ca6565b33600081815260ce60209081526040808320549051949550939192610d199290918591879101613deb565b604051602081830303815290604052805190602001209050610d3a836122c6565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610d6d908390613e1b565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610db5908890613e33565b60405180910390a4610de7333060408601803590610dd6906020890161375e565b6001600160a01b0316929190612a9e565b5050508080610df590613e46565b915050610cc1565b505060016097555050565b60665460029060049081161415610e315760405162461bcd60e51b8152600401610a7490613bc1565b60026097541415610e545760405162461bcd60e51b8152600401610a7490613c6f565b6002609755600060ca610e6a6020860186613951565b63ffffffff1681548110610e8057610e80613ac8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050610ee18482612b0f565b6000610ef3608086016060870161375e565b6001600160a01b03808216600090815260cc60205260409020549192501680610f195750805b336001600160a01b03821614610f975760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d6572000000006064820152608401610a74565b60005b610fa760a0880188613e61565b90508110156111be5736610fbe60e0890189613eb2565b83818110610fce57610fce613ac8565b6001600160a01b038716600090815260cd6020908152604080832093029490940194509290915082906110039085018561375e565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050808260200135116110bd5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a401610a74565b60006110cd826020850135613ab1565b6001600160a01b038716600090815260cd602090815260408220929350850180359291906110fb908761375e565b6001600160a01b031681526020808201929092526040016000209190915561113d908a90839061112d9087018761375e565b6001600160a01b03169190612ddb565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce3190611181602089018961375e565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a450505080806111b690613e46565b915050610f9a565b505060016097555050505050565b606654600390600890811614156111f55760405162461bcd60e51b8152600401610a7490613bc1565b60cb546001600160a01b0316331461121f5760405162461bcd60e51b8152600401610a7490613efc565b60cb5463ffffffff600160c01b9091048116908316116112bb5760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a401610a74565b428263ffffffff16106113545760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a401610a74565b60ca5460cb5460009061137490600160a01b900463ffffffff1642613f50565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b6114a5612175565b610a8681612e0b565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156114f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151a9190613b5c565b6115365760405162461bcd60e51b8152600401610a7490613b79565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60006115fa8260ca61158a6020830183613951565b63ffffffff16815481106115a0576115a0613ac8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612b0f565b506001919050565b61160a612175565b6116146000612e7c565b565b61161e612175565b610a8681612ece565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461165b90600190613ab1565b8154811061166b5761166b613ac8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b600054610100900460ff16158080156117445750600054600160ff909116105b8061175e5750303b15801561175e575060005460ff166001145b6117c15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a74565b6000805460ff1916600117905580156117e4576000805461ff0019166101001790555b6117ec612f2a565b60c9556117f98686612fc1565b61180287612e7c565b61180b84612ece565b61181483612e0b565b61181d826130ab565b8015611863576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca82815481106118a3576118a3613ac8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b611906612175565b610a86816130ab565b60ca546000905b63ffffffff811615611982578260ca611930600184613f78565b63ffffffff168154811061194657611946613ac8565b906000526020600020906002020160000154141561197057611969600182613f78565b9392505050565b8061197a81613f9d565b915050611916565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e640000000000000000006064820152608401610a74565b6119f9612175565b6001600160a01b038116611a5e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a74565b610a8681612e7c565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611a98575060c95490565b611aa0612f2a565b905090565b60006001610bd8602084018461375e565b60665460039060089081161415611adf5760405162461bcd60e51b8152600401610a7490613bc1565b60cb546001600160a01b03163314611b095760405162461bcd60e51b8152600401610a7490613efc565b60ca5463ffffffff831610611b7a5760405162461bcd60e51b815260206004820152603160248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152700d2dcecc2d8d2c840e4dedee892dcc8caf607b1b6064820152608401610a74565b600060ca8363ffffffff1681548110611b9557611b95613ac8565b906000526020600020906002020190508060010160089054906101000a900460ff1615611c225760405162461bcd60e51b815260206004820152603560248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152741c9bdbdd08185b1c9958591e48191a5cd8589b1959605a1b6064820152608401610a74565b6001810154600160201b900463ffffffff164210611ca15760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152751c9bdbdd08185b1c9958591e481858dd1a5d985d195960521b6064820152608401610a74565b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d639190613af5565b6001600160a01b0316336001600160a01b031614611d935760405162461bcd60e51b8152600401610a7490613b12565b606654198119606654191614611e115760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610a74565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610bbd565b60665460009060019081161415611e715760405162461bcd60e51b8152600401610a7490613bc1565b60026097541415611e945760405162461bcd60e51b8152600401610a7490613c6f565b600260975560005b82811015610dfd5736848483818110611eb757611eb7613ac8565b9050602002810190611ec99190613ca6565b33600081815260ce60209081526040808320549051949550939192611ef49290918591879101613deb565b604051602081830303815290604052805190602001209050611f15836122c6565b33600090815260cf602090815260408083208484529091529020805460ff19166001908117909155611f48908390613e1b565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190611f90908890613e33565b60405180910390a4611fb1333060408601803590610dd6906020890161375e565b5050508080611fbf90613e46565b915050611e9c565b60665460049060109081161415611ff05760405162461bcd60e51b8152600401610a7490613bc1565b33600090815260d1602052604090205460ff1661201f5760405162461bcd60e51b8152600401610a7490613bf8565b600260975414156120425760405162461bcd60e51b8152600401610a7490613c6f565b600260975560005b82811015610dfd573684848381811061206557612065613ac8565b90506020028101906120779190613ca6565b33600081815260ce602090815260408083205490519495509391926120a29290918591879101613deb565b6040516020818303038152906040528051906020012090506120c3836122c6565b33600090815260d2602090815260408083208484529091529020805460ff191660019081179091556120f6908390613e1b565b33600081815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b9061213e908890613e33565b60405180910390a461215f333060408601803590610dd6906020890161375e565b505050808061216d90613e46565b91505061204a565b6033546001600160a01b031633146116145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a74565b6001600160a01b03811661225d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610a74565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60006122d28280613eb2565b905011612337576040805162461bcd60e51b81526020600482015260248101919091526000805160206140f783398151915260448201527f7264735375626d697373696f6e3a206e6f2073747261746567696573207365746064820152608401610a74565b60008160400135116123a95760405162461bcd60e51b815260206004820152604160248201526000805160206140f783398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a401610a74565b6f4b3b4ca85a86c47a098a223fffffffff816040013511156124215760405162461bcd60e51b815260206004820152603f60248201526000805160206140f783398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c61726765006064820152608401610a74565b63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001661245860a0830160808401613951565b63ffffffff1611156124dd5760405162461bcd60e51b815260206004820152605460248201526000805160206140f783398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a401610a74565b7f000000000000000000000000000000000000000000000000000000000000000061250e60a0830160808401613951565b6125189190613fd3565b63ffffffff16156125b85760405162461bcd60e51b815260206004820152606a60248201526000805160206140f783398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c401610a74565b7f00000000000000000000000000000000000000000000000000000000000000006125e96080830160608401613951565b6125f39190613fd3565b63ffffffff16156126995760405162461bcd60e51b815260206004820152607060248201526000805160206140f783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c401610a74565b6126a96080820160608301613951565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16426126e19190613ab1565b1115801561272a57506126fa6080820160608301613951565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b6127a45760405162461bcd60e51b815260206004820152605160248201526000805160206140f783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a401610a74565b6127d463ffffffff7f00000000000000000000000000000000000000000000000000000000000000001642613e1b565b6127e46080830160608401613951565b63ffffffff1611156128685760405162461bcd60e51b815260206004820152605360248201526000805160206140f783398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a401610a74565b6000805b6128768380613eb2565b9050811015612a9957600061288b8480613eb2565b8381811061289b5761289b613ac8565b6128b1926020604090920201908101915061375e565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa15801561291c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129409190613b5c565b8061296757506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b6129da5760405162461bcd60e51b815260206004820152604a60248201526000805160206140f783398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a401610a74565b806001600160a01b0316836001600160a01b031610612a875760405162461bcd60e51b815260206004820152606960248201526000805160206140f783398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c401610a74565b9150612a9281613e46565b905061286c565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052612b099085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613116565b50505050565b806060015115612b685760405162461bcd60e51b815260206004820152603060248201526000805160206140d783398151915260448201526f1c9bdbdd081a5cc8191a5cd8589b195960821b6064820152608401610a74565b806040015163ffffffff16421015612bcf5760405162461bcd60e51b815260206004820152603660248201526000805160206140d78339815191526044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b6064820152608401610a74565b612bdc60c0830183613e61565b9050612beb60a0840184613e61565b905014612c635760405162461bcd60e51b815260206004820152604c60248201526000805160206140d783398151915260448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a401610a74565b612c7060e0830183613eb2565b9050612c7f60c0840184613e61565b905014612cf55760405162461bcd60e51b815260206004820152604a60248201526000805160206140d783398151915260448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610a74565b8051612d2190612d0b6040850160208601613951565b612d186040860186613ff6565b866060016131e8565b60005b612d3160a0840184613e61565b9050811015612a9957612dcb6080840135612d4f60a0860186613e61565b84818110612d5f57612d5f613ac8565b9050602002016020810190612d749190613951565b612d8160c0870187613e61565b85818110612d9157612d91613ac8565b9050602002810190612da39190613ff6565b612db060e0890189613eb2565b87818110612dc057612dc0613ac8565b90506040020161335c565b612dd481613e46565b9050612d24565b6040516001600160a01b038316602482015260448101829052612a9990849063a9059cbb60e01b90606401612ad2565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b0316158015612fe257506001600160a01b03821615155b6130645760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610a74565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26130a7826121cf565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061316b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166134ad9092919063ffffffff16565b805190915015612a9957808060200190518101906131899190613b5c565b612a995760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a74565b6131f360208361403d565b6001901b8463ffffffff161061327d5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a401610a74565b600061328882610bc8565b90506132d384848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff89166134c4565b6133545760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a401610a74565b505050505050565b61336760208361403d565b6001901b8463ffffffff16106133e55760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e646578000000006064820152608401610a74565b60006133f082611aa5565b905061343b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff89166134c4565b6133545760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f66006064820152608401610a74565b60606134bc84846000856134dc565b949350505050565b6000836134d286858561360d565b1495945050505050565b60608247101561353d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a74565b6001600160a01b0385163b6135945760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a74565b600080866001600160a01b031685876040516135b0919061407d565b60006040518083038185875af1925050503d80600081146135ed576040519150601f19603f3d011682016040523d82523d6000602084013e6135f2565b606091505b5091509150613602828286613710565b979650505050505050565b60006020845161361d919061408f565b156136a45760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610a74565b8260205b85518111613707576136bb60028561408f565b6136dc578160005280860151602052604060002091506002840493506136f5565b8086015160005281602052604060002091506002840493505b613700602082613e1b565b90506136a8565b50949350505050565b6060831561371f575081611969565b82511561372f5782518084602001fd5b8160405162461bcd60e51b8152600401610a7491906140a3565b6001600160a01b0381168114610a8657600080fd5b60006020828403121561377057600080fd5b813561196981613749565b8015158114610a8657600080fd5b6000806040838503121561379c57600080fd5b82356137a781613749565b915060208301356137b78161377b565b809150509250929050565b6000602082840312156137d457600080fd5b5035919050565b6000604082840312156137ed57600080fd5b50919050565b60006040828403121561380557600080fd5b61196983836137db565b6000806040838503121561382257600080fd5b823561382d81613749565b915060208301356137b781613749565b6000806020838503121561385057600080fd5b823567ffffffffffffffff8082111561386857600080fd5b818501915085601f83011261387c57600080fd5b81358181111561388b57600080fd5b8660208260051b85010111156138a057600080fd5b60209290920196919550909350505050565b600061010082840312156137ed57600080fd5b600080604083850312156138d857600080fd5b823567ffffffffffffffff8111156138ef57600080fd5b6138fb858286016138b2565b92505060208301356137b781613749565b803563ffffffff8116811461392057600080fd5b919050565b6000806040838503121561393857600080fd5b823591506139486020840161390c565b90509250929050565b60006020828403121561396357600080fd5b6119698261390c565b60006020828403121561397e57600080fd5b813560ff8116811461196957600080fd5b6000602082840312156139a157600080fd5b813567ffffffffffffffff8111156139b857600080fd5b6134bc848285016138b2565b600080604083850312156139d757600080fd5b82356139e281613749565b946020939093013593505050565b803561392081613749565b803561ffff8116811461392057600080fd5b60008060008060008060c08789031215613a2657600080fd5b8635613a3181613749565b95506020870135613a4181613749565b9450604087013593506060870135613a5881613749565b9250613a666080880161390c565b9150613a7460a088016139fb565b90509295509295509295565b600060208284031215613a9257600080fd5b611969826139fb565b634e487b7160e01b600052601160045260246000fd5b600082821015613ac357613ac3613a9b565b500390565b634e487b7160e01b600052603260045260246000fd5b600081613aed57613aed613a9b565b506000190190565b600060208284031215613b0757600080fd5b815161196981613749565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613b6e57600080fd5b81516119698161377b565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60208082526051908201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60408201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260608201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608082015260a00190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008235609e19833603018112613cbc57600080fd5b9190910192915050565b818352600060208085019450826000805b86811015613d2b578235613cea81613749565b6001600160a01b03168852828401356bffffffffffffffffffffffff8116808214613d13578384fd5b89860152506040978801979290920191600101613cd7565b50959695505050505050565b60008135601e19833603018112613d4d57600080fd5b8201803567ffffffffffffffff811115613d6657600080fd5b8060061b3603841315613d7857600080fd5b60a08552613d8d60a086018260208501613cc6565b915050613d9c602084016139f0565b6001600160a01b0316602085015260408381013590850152613dc06060840161390c565b63ffffffff166060850152613dd76080840161390c565b63ffffffff81166080860152509392505050565b60018060a01b0384168152826020820152606060408201526000613e126060830184613d37565b95945050505050565b60008219821115613e2e57613e2e613a9b565b500190565b6020815260006119696020830184613d37565b6000600019821415613e5a57613e5a613a9b565b5060010190565b6000808335601e19843603018112613e7857600080fd5b83018035915067ffffffffffffffff821115613e9357600080fd5b6020019150600581901b3603821315613eab57600080fd5b9250929050565b6000808335601e19843603018112613ec957600080fd5b83018035915067ffffffffffffffff821115613ee457600080fd5b6020019150600681901b3603821315613eab57600080fd5b60208082526034908201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6040820152733a103a3432903932bbb0b93239aab83230ba32b960611b606082015260800190565b600063ffffffff808316818516808303821115613f6f57613f6f613a9b565b01949350505050565b600063ffffffff83811690831681811015613f9557613f95613a9b565b039392505050565b600063ffffffff821680613fb357613fb3613a9b565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680613fea57613fea613fbd565b92169190910692915050565b6000808335601e1984360301811261400d57600080fd5b83018035915067ffffffffffffffff82111561402857600080fd5b602001915036819003821315613eab57600080fd5b60008261404c5761404c613fbd565b500490565b60005b8381101561406c578181015183820152602001614054565b83811115612b095750506000910152565b60008251613cbc818460208701614051565b60008261409e5761409e613fbd565b500690565b60208152600082518060208401526140c2816040850160208701614051565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2052657761726473436f6f7264696e61746f722e5f76616c696461746552657761a264697066735822122036f8834ea90be93d8ffaadfdccbc5c85edd0361a90fe4b8b14a9345e0ebdd2e064736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"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\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"AmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CommissionBipsExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsForAllSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofLengthNotMultipleOf32\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]}]", + Bin: "0x61018060405234801561001157600080fd5b506040516137c73803806137c7833981016040819052610030916102d0565b86868686868686610041858261035b565b63ffffffff16156100e55760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b6100f2620151808661035b565b63ffffffff16156101915760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a4016100dc565b6001600160a01b0396871661012052949095166101405263ffffffff92831660805290821660a052811660c05291821660e05216610100526101d16101e3565b50504661016052506103919350505050565b600054610100900460ff161561024b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100dc565b60005460ff908116101561029d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146102b457600080fd5b50565b805163ffffffff811681146102cb57600080fd5b919050565b600080600080600080600060e0888a0312156102eb57600080fd5b87516102f68161029f565b60208901519097506103078161029f565b9550610315604089016102b7565b9450610323606089016102b7565b9350610331608089016102b7565b925061033f60a089016102b7565b915061034d60c089016102b7565b905092959891949750929550565b600063ffffffff83168061037f57634e487b7160e01b600052601260045260246000fd5b8063ffffffff84160691505092915050565b60805160a05160c05160e051610100516101205161014051610160516133a061042760003960006118150152600081816104f501526121d8015260006107b501526000818161040c01526120c301526000818161033201526121120152600081816104ce01526120720152600081816107140152611f4701526000818161068c01528181611f9e0152611ffd01526133a06000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c80637b8f8b051161019d578063d4540a55116100e9578063f698da25116100a2578063fabc1cbc1161007c578063fabc1cbc14610818578063fbf1e2c11461082b578063fce36c7d1461083e578063ff9f6cce1461085157600080fd5b8063f698da25146107ea578063f8cd8448146107f2578063f96abf2e1461080557600080fd5b8063d4540a5514610764578063de02e50314610777578063e221b2451461078a578063e810ce211461079d578063ea4d3c9b146107b0578063f2fde38b146107d757600080fd5b80639be3d4e411610156578063aebd8bae11610130578063aebd8bae146106c1578063bb7e451f146106ef578063bf21a8aa1461070f578063c46db6061461073657600080fd5b80639be3d4e41461067f5780639d45c28114610687578063a0169ddd146106ae57600080fd5b80637b8f8b05146105fa578063863cb9a914610602578063865c695314610615578063886f1195146106405780638da5cb5b146106535780639104c3191461066457600080fd5b806337838ed01161025c57806358baaa3e116102155780635c975abb116101ef5780635c975abb146105a95780635e9d8348146105b15780636d21117e146105c4578063715018a6146105f257600080fd5b806358baaa3e1461056b578063595c6a671461057e5780635ac86ab71461058657600080fd5b806337838ed0146104c957806339b70e38146104f05780633a8c0786146105175780633ccc861d1461052e5780633efe1db6146105415780634d18cc351461055457600080fd5b8063131433b4116102ae578063131433b414610407578063136439dd1461042e578063149bc8721461044157806322f19a64146104625780632b9f64a41461047557806336af41fa146104b657600080fd5b806218572c146102f557806304a0c5021461032d578063092db007146103695780630e9a53cf146103915780630eb38345146103df57806310d67a2f146103f4575b600080fd5b610318610303366004612bc0565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103547f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610324565b60cb5461037e90600160e01b900461ffff1681565b60405161ffff9091168152602001610324565b610399610864565b604051610324919060006080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b6103f26103ed366004612beb565b610943565b005b6103f2610402366004612bc0565b6109c5565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103f261043c366004612c24565b610a79565b61045461044f366004612c55565b610b64565b604051908152602001610324565b61037e610470366004612c71565b610bda565b61049e610483366004612bc0565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610324565b6103f26104c4366004612c9f565b610bef565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b61049e7f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461035490600160a01b900463ffffffff1681565b6103f261053c366004612d29565b610db7565b6103f261054f366004612d89565b6110a6565b60cb5461035490600160c01b900463ffffffff1681565b6103f2610579366004612db5565b61129c565b6103f26112ad565b610318610594366004612dd0565b606654600160ff9092169190911b9081161490565b606654610454565b6103186105bf366004612df3565b611375565b6103186105d2366004612e28565b60cf60209081526000928352604080842090915290825290205460ff1681565b6103f2611402565b60ca54610454565b6103f2610610366004612bc0565b611416565b610454610623366004612c71565b60cd60209081526000928352604080842090915290825290205481565b60655461049e906001600160a01b031681565b6033546001600160a01b031661049e565b61049e73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610399611427565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103f26106bc366004612bc0565b6114c5565b6103186106cf366004612e28565b60d260209081526000928352604080842090915290825290205460ff1681565b6104546106fd366004612bc0565b60ce6020526000908152604090205481565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b610318610744366004612e28565b60d060209081526000928352604080842090915290825290205460ff1681565b6103f2610772366004612e71565b611524565b610399610785366004612c24565b61166c565b6103f2610798366004612ee4565b6116fe565b6103546107ab366004612c24565b61170f565b61049e7f000000000000000000000000000000000000000000000000000000000000000081565b6103f26107e5366004612bc0565b61179b565b610454611811565b610454610800366004612c55565b61184e565b6103f2610813366004612db5565b61185f565b6103f2610826366004612c24565b6119b2565b60cb5461049e906001600160a01b031681565b6103f261084c366004612c9f565b611aba565b6103f261085f366004612c9f565b611c2d565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b801561093f57600060ca6108a1600184612f15565b815481106108b1576108b1612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615801560608301819052919250906109215750806040015163ffffffff164210155b1561092c5792915050565b508061093781612f3e565b91505061088c565b5090565b61094b611dd0565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3c9190612f55565b6001600160a01b0316336001600160a01b031614610a6d5760405163794821ff60e01b815260040160405180910390fd5b610a7681611e2a565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae59190612f72565b610b0257604051631d77d47760e21b815260040160405180910390fd5b60665481811614610b265760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610b746020840184612bc0565b8360200135604051602001610bbd9392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60cb54600160e01b900461ffff165b92915050565b606654600190600290811603610c185760405163840a48d560e01b815260040160405180910390fd5b33600090815260d1602052604090205460ff16610c485760405163289d7fb960e01b815260040160405180910390fd5b600260975403610c735760405162461bcd60e51b8152600401610c6a90612f8f565b60405180910390fd5b600260975560005b82811015610dac5736848483818110610c9657610c96612f28565b9050602002810190610ca89190612fc6565b33600081815260ce60209081526040808320549051949550939192610cd3929091859187910161310b565b604051602081830303815290604052805190602001209050610cf483611eba565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610d2790839061313b565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610d6f90889061314e565b60405180910390a4610da1333060408601803590610d909060208901612bc0565b6001600160a01b03169291906122ca565b505050600101610c7b565b505060016097555050565b606654600290600490811603610de05760405163840a48d560e01b815260040160405180910390fd5b600260975403610e025760405162461bcd60e51b8152600401610c6a90612f8f565b6002609755600060ca610e186020860186612db5565b63ffffffff1681548110610e2e57610e2e612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050610e8f848261233b565b6000610ea16080860160608701612bc0565b6001600160a01b03808216600090815260cc60205260409020549192501680610ec75750805b336001600160a01b03821614610eef576040516208978560e71b815260040160405180910390fd5b60005b610eff60a0880188613161565b90508110156110985736610f1660e08901896131b2565b83818110610f2657610f26612f28565b6001600160a01b038716600090815260cd602090815260408083209302949094019450929091508290610f5b90850185612bc0565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080826020013511610fa25760405163aa385e8160e01b815260040160405180910390fd5b6000610fb2826020850135612f15565b6001600160a01b038716600090815260cd60209081526040822092935085018035929190610fe09087612bc0565b6001600160a01b0316815260208082019290925260400160002091909155611022908a90839061101290870187612bc0565b6001600160a01b031691906124df565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31906110666020890189612bc0565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101610ef2565b505060016097555050505050565b6066546003906008908116036110cf5760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b031633146110fa5760405163f6f1e6f160e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161112d57604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff1610611153576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb5460009061117390600160a01b900463ffffffff16426131fc565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b6112a4611dd0565b610a768161250f565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190612f72565b61133657604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60006113fa8260ca61138a6020830183612db5565b63ffffffff16815481106113a0576113a0612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015261233b565b506001919050565b61140a611dd0565b6114146000612580565b565b61141e611dd0565b610a76816125d2565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461145b90600190612f15565b8154811061146b5761146b612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b600054610100900460ff16158080156115445750600054600160ff909116105b8061155e5750303b15801561155e575060005460ff166001145b6115c15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c6a565b6000805460ff1916600117905580156115e4576000805461ff0019166101001790555b6115ec61262e565b60c9556115f986866126c5565b61160287612580565b61160b846125d2565b6116148361250f565b61161d8261274a565b8015611663576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca82815481106116a3576116a3612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b611706611dd0565b610a768161274a565b60ca546000905b63ffffffff811615611781578260ca611730600184613218565b63ffffffff168154811061174657611746612f28565b9060005260206000209060020201600001540361176f57611768600182613218565b9392505050565b8061177981613234565b915050611716565b5060405163504570e360e01b815260040160405180910390fd5b6117a3611dd0565b6001600160a01b0381166118085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c6a565b610a7681612580565b60007f00000000000000000000000000000000000000000000000000000000000000004603611841575060c95490565b61184961262e565b905090565b60006001610b746020840184612bc0565b6066546003906008908116036118885760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b031633146118b35760405163f6f1e6f160e01b815260040160405180910390fd5b60ca5463ffffffff8316106118db576040516394a8d38960e01b815260040160405180910390fd5b600060ca8363ffffffff16815481106118f6576118f6612f28565b906000526020600020906002020190508060010160089054906101000a900460ff161561193657604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061196757604051631748afff60e01b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a299190612f55565b6001600160a01b0316336001600160a01b031614611a5a5760405163794821ff60e01b815260040160405180910390fd5b606654198119606654191614611a835760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610b59565b606654600090600190811603611ae35760405163840a48d560e01b815260040160405180910390fd5b600260975403611b055760405162461bcd60e51b8152600401610c6a90612f8f565b600260975560005b82811015610dac5736848483818110611b2857611b28612f28565b9050602002810190611b3a9190612fc6565b33600081815260ce60209081526040808320549051949550939192611b65929091859187910161310b565b604051602081830303815290604052805190602001209050611b8683611eba565b33600090815260cf602090815260408083208484529091529020805460ff19166001908117909155611bb990839061313b565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190611c0190889061314e565b60405180910390a4611c22333060408601803590610d909060208901612bc0565b505050600101611b0d565b606654600490601090811603611c565760405163840a48d560e01b815260040160405180910390fd5b33600090815260d1602052604090205460ff16611c865760405163289d7fb960e01b815260040160405180910390fd5b600260975403611ca85760405162461bcd60e51b8152600401610c6a90612f8f565b600260975560005b82811015610dac5736848483818110611ccb57611ccb612f28565b9050602002810190611cdd9190612fc6565b33600081815260ce60209081526040808320549051949550939192611d08929091859187910161310b565b604051602081830303815290604052805190602001209050611d2983611eba565b33600090815260d2602090815260408083208484529091529020805460ff19166001908117909155611d5c90839061313b565b33600081815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b90611da490889061314e565b60405180910390a4611dc5333060408601803590610d909060208901612bc0565b505050600101611cb0565b6033546001600160a01b031633146114145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c6a565b6001600160a01b038116611e51576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611ec682806131b2565b905011611ee65760405163796cc52560e01b815260040160405180910390fd5b6000816040013511611f0b576040516365e52d5160e11b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff81604001351115611f405760405163070b5a6f60e21b815260040160405180910390fd5b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611f7760a0830160808401612db5565b63ffffffff161115611f9c57604051630dd0b9f560e21b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000611fcd60a0830160808401612db5565b611fd7919061326a565b63ffffffff1615611ffb57604051632380fd2760e21b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061202c6080830160608401612db5565b612036919061326a565b63ffffffff161561205a57604051630ea11a0360e31b815260040160405180910390fd5b61206a6080820160608301612db5565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16426120a29190612f15565b111580156120eb57506120bb6080820160608301612db5565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b6121085760405163041aa75760e11b815260040160405180910390fd5b61213863ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164261313b565b6121486080830160608401612db5565b63ffffffff16111561216d57604051637ee2b44360e01b815260040160405180910390fd5b6000805b61217b83806131b2565b90508110156122c557600061219084806131b2565b838181106121a0576121a0612f28565b6121b69260206040909202019081019150612bc0565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015612221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122459190612f72565b8061226c57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61228957604051632711b74d60e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b0316106122bb5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101612171565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526123359085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526127b5565b50505050565b80606001511561235e57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff1642101561238957604051631437a2bb60e31b815260040160405180910390fd5b61239660c0830183613161565b90506123a560a0840184613161565b9050146123c5576040516343714afd60e01b815260040160405180910390fd5b6123d260e08301836131b2565b90506123e160c0840184613161565b905014612401576040516343714afd60e01b815260040160405180910390fd5b805161242d906124176040850160208601612db5565b6124246040860186613292565b86606001612887565b60005b61243d60a0840184613161565b90508110156122c5576124d7608084013561245b60a0860186613161565b8481811061246b5761246b612f28565b90506020020160208101906124809190612db5565b61248d60c0870187613161565b8581811061249d5761249d612f28565b90506020028101906124af9190613292565b6124bc60e08901896131b2565b878181106124cc576124cc612f28565b905060400201612936565b600101612430565b6040516001600160a01b0383166024820152604481018290526122c590849063a9059cbb60e01b906064016122fe565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156126e657506001600160a01b03821615155b612703576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261274682611e2a565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061280a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129759092919063ffffffff16565b8051909150156122c557808060200190518101906128289190612f72565b6122c55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c6a565b6128926020836132d9565b6001901b8463ffffffff16106128bb576040516369ca16c960e01b815260040160405180910390fd5b60006128c682610b64565b905061291184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff891661298c565b61292e576040516369ca16c960e01b815260040160405180910390fd5b505050505050565b6129416020836132d9565b6001901b8463ffffffff161061296a5760405163054ff4df60e51b815260040160405180910390fd5b60006128c68261184e565b606061298484846000856129a4565b949350505050565b60008361299a868585612ad5565b1495945050505050565b606082471015612a055760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c6a565b6001600160a01b0385163b612a5c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c6a565b600080866001600160a01b03168587604051612a789190613311565b60006040518083038185875af1925050503d8060008114612ab5576040519150601f19603f3d011682016040523d82523d6000602084013e612aba565b606091505b5091509150612aca828286612b72565b979650505050505050565b600060208451612ae59190613323565b15612b0357604051630228be0560e31b815260040160405180910390fd5b8260205b85518111612b6957612b1a600285613323565b600003612b3e57816000528086015160205260406000209150600284049350612b57565b8086015160005281602052604060002091506002840493505b612b6260208261313b565b9050612b07565b50949350505050565b60608315612b81575081611768565b825115612b915782518084602001fd5b8160405162461bcd60e51b8152600401610c6a9190613337565b6001600160a01b0381168114610a7657600080fd5b600060208284031215612bd257600080fd5b813561176881612bab565b8015158114610a7657600080fd5b60008060408385031215612bfe57600080fd5b8235612c0981612bab565b91506020830135612c1981612bdd565b809150509250929050565b600060208284031215612c3657600080fd5b5035919050565b600060408284031215612c4f57600080fd5b50919050565b600060408284031215612c6757600080fd5b6117688383612c3d565b60008060408385031215612c8457600080fd5b8235612c8f81612bab565b91506020830135612c1981612bab565b60008060208385031215612cb257600080fd5b823567ffffffffffffffff811115612cc957600080fd5b8301601f81018513612cda57600080fd5b803567ffffffffffffffff811115612cf157600080fd5b8560208260051b8401011115612d0657600080fd5b6020919091019590945092505050565b60006101008284031215612c4f57600080fd5b60008060408385031215612d3c57600080fd5b823567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612d16565b9250506020830135612c1981612bab565b803563ffffffff81168114612d8457600080fd5b919050565b60008060408385031215612d9c57600080fd5b82359150612dac60208401612d70565b90509250929050565b600060208284031215612dc757600080fd5b61176882612d70565b600060208284031215612de257600080fd5b813560ff8116811461176857600080fd5b600060208284031215612e0557600080fd5b813567ffffffffffffffff811115612e1c57600080fd5b61298484828501612d16565b60008060408385031215612e3b57600080fd5b8235612e4681612bab565b946020939093013593505050565b8035612d8481612bab565b803561ffff81168114612d8457600080fd5b60008060008060008060c08789031215612e8a57600080fd5b8635612e9581612bab565b95506020870135612ea581612bab565b9450604087013593506060870135612ebc81612bab565b9250612eca60808801612d70565b9150612ed860a08801612e5f565b90509295509295509295565b600060208284031215612ef657600080fd5b61176882612e5f565b634e487b7160e01b600052601160045260246000fd5b81810381811115610be957610be9612eff565b634e487b7160e01b600052603260045260246000fd5b600081612f4d57612f4d612eff565b506000190190565b600060208284031215612f6757600080fd5b815161176881612bab565b600060208284031215612f8457600080fd5b815161176881612bdd565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008235609e19833603018112612fdc57600080fd5b9190910192915050565b81835260208301925060008160005b8481101561304c57813561300881612bab565b6001600160a01b0316865260208201356bffffffffffffffffffffffff811680821461303357600080fd5b6020880152506040958601959190910190600101612ff5565b5093949350505050565b60008135601e1983360301811261306c57600080fd5b820160208101903567ffffffffffffffff81111561308957600080fd5b8060061b360382131561309b57600080fd5b60a085526130ad60a086018284612fe6565b9150506130bc60208401612e54565b6001600160a01b03166020850152604083810135908501526130e060608401612d70565b63ffffffff1660608501526130f760808401612d70565b63ffffffff81166080860152509392505050565b60018060a01b03841681528260208201526060604082015260006131326060830184613056565b95945050505050565b80820180821115610be957610be9612eff565b6020815260006117686020830184613056565b6000808335601e1984360301811261317857600080fd5b83018035915067ffffffffffffffff82111561319357600080fd5b6020019150600581901b36038213156131ab57600080fd5b9250929050565b6000808335601e198436030181126131c957600080fd5b83018035915067ffffffffffffffff8211156131e457600080fd5b6020019150600681901b36038213156131ab57600080fd5b63ffffffff8181168382160190811115610be957610be9612eff565b63ffffffff8281168282160390811115610be957610be9612eff565b600063ffffffff82168061324a5761324a612eff565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff83168061328057613280613254565b8063ffffffff84160691505092915050565b6000808335601e198436030181126132a957600080fd5b83018035915067ffffffffffffffff8211156132c457600080fd5b6020019150368190038213156131ab57600080fd5b6000826132e8576132e8613254565b500490565b60005b838110156133085781810151838201526020016132f0565b50506000910152565b60008251612fdc8184602087016132ed565b60008261333257613332613254565b500690565b60208152600082518060208401526133568160408501602087016132ed565b601f01601f1916919091016040019291505056fea26469706673582212204d712d4f6ff9110b77fc663e4996a77c6f04c30ffd894603074b122c34af00e364736f6c634300081b0033", } // RewardsCoordinatorABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/RewardsCoordinatorStorage/binding.go b/pkg/bindings/RewardsCoordinatorStorage/binding.go index a5c813df9..3e86fe60c 100644 --- a/pkg/bindings/RewardsCoordinatorStorage/binding.go +++ b/pkg/bindings/RewardsCoordinatorStorage/binding.go @@ -77,7 +77,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf 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\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", + 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"AmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CommissionBipsExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsForAllSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]}]", } // RewardsCoordinatorStorageABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyBase/binding.go b/pkg/bindings/StrategyBase/binding.go index 02377ad8a..502d82ad8 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\"}],\"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\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162001ab438038062001ab4833981016040819052620000349162000114565b6001600160a01b0381166080526200004b62000052565b5062000146565b600054610100900460ff1615620000bf5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000112576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012757600080fd5b81516001600160a01b03811681146200013f57600080fd5b9392505050565b60805161193d620001776000396000818161019901528181610570015281816109f50152610ac0015261193d6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635c975abb116100b8578063ab5921e11161007c578063ab5921e11461029c578063ce7c2ac2146102b1578063d9caed12146102c4578063e3dae51c146102d7578063f3e73875146102ea578063fabc1cbc146102fd57600080fd5b80635c975abb146102425780637a8b26371461024a578063886f11951461025d5780638c871019146102765780638f6a62401461028957600080fd5b806347e7ef24116100ff57806347e7ef24146101d2578063485cc955146101e5578063553ca5f8146101f8578063595c6a671461020b5780635ac86ab71461021357600080fd5b806310d67a2f1461013c578063136439dd146101515780632495a5991461016457806339b70e38146101945780633a98ef39146101bb575b600080fd5b61014f61014a3660046115a6565b610310565b005b61014f61015f3660046115c3565b6103cc565b603254610177906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101777f000000000000000000000000000000000000000000000000000000000000000081565b6101c460335481565b60405190815260200161018b565b6101c46101e03660046115dc565b610510565b61014f6101f3366004611608565b610754565b6101c46102063660046115a6565b610869565b61014f61087d565b610232610221366004611650565b6001805460ff9092161b9081161490565b604051901515815260200161018b565b6001546101c4565b6101c46102583660046115c3565b610949565b600054610177906201000090046001600160a01b031681565b6101c46102843660046115c3565b610994565b6101c46102973660046115a6565b61099f565b6102a46109ad565b60405161018b919061169d565b6101c46102bf3660046115a6565b6109cd565b61014f6102d23660046116d0565b610a62565b6101c46102e53660046115c3565b610c48565b6101c46102f83660046115c3565b610c81565b61014f61030b3660046115c3565b610c8c565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103879190611711565b6001600160a01b0316336001600160a01b0316146103c05760405162461bcd60e51b81526004016103b79061172e565b60405180910390fd5b6103c981610de8565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043d9190611778565b6104595760405162461bcd60e51b81526004016103b79061179a565b600154818116146104d25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016103b7565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600180546000918291811614156105655760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103b7565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105dd5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103b7565b6105e78484610eed565b60335460006105f86103e8836117f8565b905060006103e8610607610f6d565b61061191906117f8565b9050600061061f8783611810565b90508061062c8489611827565b6106369190611846565b95508561069c5760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b60648201526084016103b7565b6106a686856117f8565b60338190556f4b3b4ca85a86c47a098a223fffffffff10156107305760405162461bcd60e51b815260206004820152603c60248201527f5374726174656779426173652e6465706f7369743a20746f74616c536861726560448201527f73206578636565647320604d41585f544f54414c5f534841524553600000000060648201526084016103b7565b610749826103e860335461074491906117f8565b610fdf565b505050505092915050565b600054610100900460ff16158080156107745750600054600160ff909116105b8061078e5750303b15801561078e575060005460ff166001145b6107f15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103b7565b6000805460ff191660011790558015610814576000805461ff0019166101001790555b61081e8383611033565b8015610864576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000610877610258836109cd565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156108ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee9190611778565b61090a5760405162461bcd60e51b81526004016103b79061179a565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e860335461095c91906117f8565b905060006103e861096b610f6d565b61097591906117f8565b9050816109828583611827565b61098c9190611846565b949350505050565b600061087782610c48565b60006108776102f8836109cd565b60606040518060800160405280604d81526020016118bb604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190611868565b6001805460029081161415610ab55760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064016103b7565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b2d5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e6167657260448201526064016103b7565b610b3884848461117e565b60335480831115610bc75760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a4016103b7565b6000610bd56103e8836117f8565b905060006103e8610be4610f6d565b610bee91906117f8565b9050600082610bfd8784611827565b610c079190611846565b9050610c138685611810565b603355610c33610c238284611810565b6103e860335461074491906117f8565b610c3e888883611201565b5050505050505050565b6000806103e8603354610c5b91906117f8565b905060006103e8610c6a610f6d565b610c7491906117f8565b9050806109828386611827565b600061087782610949565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190611711565b6001600160a01b0316336001600160a01b031614610d335760405162461bcd60e51b81526004016103b79061172e565b600154198119600154191614610db15760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016103b7565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610505565b6001600160a01b038116610e765760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016103b7565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b03838116911614610f695760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b60648201526084016103b7565b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda9190611868565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be88161101384670de0b6b3a7640000611827565b61101d9190611846565b6040519081526020015b60405180910390a15050565b600054610100900460ff1661109e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016103b7565b603280546001600160a01b0319166001600160a01b0384161790556110c4816000611215565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115d9190611881565b604080516001600160a01b03909316835260ff909116602083015201611027565b6032546001600160a01b038381169116146108645760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e000000000060648201526084016103b7565b6108646001600160a01b0383168483611301565b6000546201000090046001600160a01b031615801561123c57506001600160a01b03821615155b6112be5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016103b7565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610f6982610de8565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526108649286929160009161139191851690849061140e565b80519091501561086457808060200190518101906113af9190611778565b6108645760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103b7565b606061141d8484600085611427565b90505b9392505050565b6060824710156114885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103b7565b6001600160a01b0385163b6114df5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103b7565b600080866001600160a01b031685876040516114fb919061189e565b60006040518083038185875af1925050503d8060008114611538576040519150601f19603f3d011682016040523d82523d6000602084013e61153d565b606091505b509150915061154d828286611558565b979650505050505050565b60608315611567575081611420565b8251156115775782518084602001fd5b8160405162461bcd60e51b81526004016103b7919061169d565b6001600160a01b03811681146103c957600080fd5b6000602082840312156115b857600080fd5b813561142081611591565b6000602082840312156115d557600080fd5b5035919050565b600080604083850312156115ef57600080fd5b82356115fa81611591565b946020939093013593505050565b6000806040838503121561161b57600080fd5b823561162681611591565b9150602083013561163681611591565b809150509250929050565b60ff811681146103c957600080fd5b60006020828403121561166257600080fd5b813561142081611641565b60005b83811015611688578181015183820152602001611670565b83811115611697576000848401525b50505050565b60208152600082518060208401526116bc81604085016020870161166d565b601f01601f19169190910160400192915050565b6000806000606084860312156116e557600080fd5b83356116f081611591565b9250602084013561170081611591565b929592945050506040919091013590565b60006020828403121561172357600080fd5b815161142081611591565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561178a57600080fd5b8151801515811461142057600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561180b5761180b6117e2565b500190565b600082821015611822576118226117e2565b500390565b6000816000190483118215151615611841576118416117e2565b500290565b60008261186357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561187a57600080fd5b5051919050565b60006020828403121561189357600080fd5b815161142081611641565b600082516118b081846020870161166d565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a264697066735822122010a959346f6109c589a9783919e1f435adfbf8e6f523baaaa3307a9e4b75ffcb64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"WithdrawalAmountExceedsDeposit\",\"inputs\":[]}]", + Bin: "0x60a060405234801561001057600080fd5b5060405161162638038061162683398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b600054610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610108576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b6080516114bc61016a60003960008181610199015281816104e8015281816108ac015261094b01526114bc6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635c975abb116100b8578063ab5921e11161007c578063ab5921e11461029c578063ce7c2ac2146102b1578063d9caed12146102c4578063e3dae51c146102d7578063f3e73875146102ea578063fabc1cbc146102fd57600080fd5b80635c975abb146102425780637a8b26371461024a578063886f11951461025d5780638c871019146102765780638f6a62401461028957600080fd5b806347e7ef24116100ff57806347e7ef24146101d2578063485cc955146101e5578063553ca5f8146101f8578063595c6a671461020b5780635ac86ab71461021357600080fd5b806310d67a2f1461013c578063136439dd146101515780632495a5991461016457806339b70e38146101945780633a98ef39146101bb575b600080fd5b61014f61014a3660046111d4565b610310565b005b61014f61015f3660046111f1565b6103c4565b603254610177906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101777f000000000000000000000000000000000000000000000000000000000000000081565b6101c460335481565b60405190815260200161018b565b6101c46101e036600461120a565b6104b4565b61014f6101f3366004611236565b610605565b6101c46102063660046111d4565b61071f565b61014f610733565b61023261022136600461127e565b6001805460ff9092161b9081161490565b604051901515815260200161018b565b6001546101c4565b6101c46102583660046111f1565b610800565b600054610177906201000090046001600160a01b031681565b6101c46102843660046111f1565b61084b565b6101c46102973660046111d4565b610856565b6102a4610864565b60405161018b91906112bf565b6101c46102bf3660046111d4565b610884565b61014f6102d23660046112f2565b610919565b6101c46102e53660046111f1565b610a39565b6101c46102f83660046111f1565b610a72565b61014f61030b3660046111f1565b610a7d565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103879190611333565b6001600160a01b0316336001600160a01b0316146103b85760405163794821ff60e01b815260040160405180910390fd5b6103c181610b85565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104359190611350565b61045257604051631d77d47760e21b815260040160405180910390fd5b600154818116146104765760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036104dd5760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610526576040516348da714f60e01b815260040160405180910390fd5b6105308484610c23565b60335460006105416103e883611388565b905060006103e8610550610c55565b61055a9190611388565b90506000610568878361139b565b90508061057584896113ae565b61057f91906113c5565b9550856000036105a257604051630c392ed360e11b815260040160405180910390fd5b6105ac8685611388565b60338190556f4b3b4ca85a86c47a098a223fffffffff10156105e157604051632f14e8a360e11b815260040160405180910390fd5b6105fa826103e86033546105f59190611388565b610cc7565b505050505092915050565b600054610100900460ff16158080156106255750600054600160ff909116105b8061063f5750303b15801561063f575060005460ff166001145b6106a75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156106ca576000805461ff0019166101001790555b6106d48383610d1b565b801561071a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061072d61025883610884565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a49190611350565b6107c157604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e86033546108139190611388565b905060006103e8610822610c55565b61082c9190611388565b90508161083985836113ae565b61084391906113c5565b949350505050565b600061072d82610a39565b600061072d6102f883610884565b60606040518060800160405280604d815260200161143a604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa1580156108f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d91906113e7565b600180546002908116036109405760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610989576040516348da714f60e01b815260040160405180910390fd5b610994848484610e66565b603354808311156109b857604051633a5d3b0160e21b815260040160405180910390fd5b60006109c66103e883611388565b905060006103e86109d5610c55565b6109df9190611388565b90506000826109ee87846113ae565b6109f891906113c5565b9050610a04868561139b565b603355610a24610a14828461139b565b6103e86033546105f59190611388565b610a2f888883610e94565b5050505050505050565b6000806103e8603354610a4c9190611388565b905060006103e8610a5b610c55565b610a659190611388565b90508061083983866113ae565b600061072d82610800565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af49190611333565b6001600160a01b0316336001600160a01b031614610b255760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610b4e5760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104a9565b6001600160a01b038116610bac576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b03838116911614610c5157604051630312abdd60e61b815260040160405180910390fd5b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc291906113e7565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610cfb84670de0b6b3a76400006113ae565b610d0591906113c5565b6040519081526020015b60405180910390a15050565b600054610100900460ff16610d865760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161069e565b603280546001600160a01b0319166001600160a01b038416179055610dac816000610ea8565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e459190611400565b604080516001600160a01b03909316835260ff909116602083015201610d0f565b6032546001600160a01b0383811691161461071a57604051630312abdd60e61b815260040160405180910390fd5b61071a6001600160a01b0383168483610f2f565b6000546201000090046001600160a01b0316158015610ecf57506001600160a01b03821615155b610eec576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610c5182610b85565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261071a92869291600091610fbf91851690849061103c565b80519091501561071a5780806020019051810190610fdd9190611350565b61071a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161069e565b606061104b8484600085611055565b90505b9392505050565b6060824710156110b65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161069e565b6001600160a01b0385163b61110d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161069e565b600080866001600160a01b03168587604051611129919061141d565b60006040518083038185875af1925050503d8060008114611166576040519150601f19603f3d011682016040523d82523d6000602084013e61116b565b606091505b509150915061117b828286611186565b979650505050505050565b6060831561119557508161104e565b8251156111a55782518084602001fd5b8160405162461bcd60e51b815260040161069e91906112bf565b6001600160a01b03811681146103c157600080fd5b6000602082840312156111e657600080fd5b813561104e816111bf565b60006020828403121561120357600080fd5b5035919050565b6000806040838503121561121d57600080fd5b8235611228816111bf565b946020939093013593505050565b6000806040838503121561124957600080fd5b8235611254816111bf565b91506020830135611264816111bf565b809150509250929050565b60ff811681146103c157600080fd5b60006020828403121561129057600080fd5b813561104e8161126f565b60005b838110156112b657818101518382015260200161129e565b50506000910152565b60208152600082518060208401526112de81604085016020870161129b565b601f01601f19169190910160400192915050565b60008060006060848603121561130757600080fd5b8335611312816111bf565b92506020840135611322816111bf565b929592945050506040919091013590565b60006020828403121561134557600080fd5b815161104e816111bf565b60006020828403121561136257600080fd5b8151801515811461104e57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072d5761072d611372565b8181038181111561072d5761072d611372565b808202811582820484141761072d5761072d611372565b6000826113e257634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156113f957600080fd5b5051919050565b60006020828403121561141257600080fd5b815161104e8161126f565b6000825161142f81846020870161129b565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212200660372423b5a6cdd2da82d261858ad2c254b6f4b14d9663fbaf37eb963a40dd64736f6c634300081b0033", } // StrategyBaseABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyBaseTVLLimits/binding.go b/pkg/bindings/StrategyBaseTVLLimits/binding.go index c0b5f85d3..2258e5775 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\"}],\"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\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162001f4d38038062001f4d833981016040819052620000349162000116565b6001600160a01b038116608052806200004c62000054565b505062000148565b600054610100900460ff1615620000c15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000114576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012957600080fd5b81516001600160a01b03811681146200014157600080fd5b9392505050565b608051611dd46200017960003960008181610216015281816107a901528181610be70152610cb20152611dd46000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a1366004611983565b6103ba565b005b6101a66101b63660046119cd565b61049d565b6101a66101c93660046119ea565b610550565b6101a66101dc366004611a0c565b610605565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b61024160335481565b604051908152602001610208565b61024160645481565b610241610266366004611a25565b610749565b6101a6610279366004611a51565b61098d565b61024161028c3660046119cd565b610a5b565b6101a6610a6f565b6102b86102a7366004611a99565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e7366004611a0c565b610b3b565b6000546101f4906201000090046001600160a01b031681565b610241610313366004611a0c565b610b86565b6102416103263660046119cd565b610b91565b610333610b9f565b6040516102089190611ae6565b61024161034e3660046119cd565b610bbf565b6101a6610361366004611b19565b610c54565b60645460655460408051928352602083019190915201610208565b61024161038f366004611a0c565b610e3a565b6102416103a2366004611a0c565b610e73565b6101a66103b5366004611a0c565b610e7e565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b815260040161041090611b5a565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610fda565b61045083836110e7565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105149190611ba8565b6001600160a01b0316336001600160a01b0316146105445760405162461bcd60e51b815260040161041090611bc5565b61054d8161123a565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c79190611ba8565b6001600160a01b0316336001600160a01b0316146105f75760405162461bcd60e51b815260040161041090611bc5565b6106018282610fda565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106769190611c0f565b6106925760405162461bcd60e51b815260040161041090611c31565b6001548181161461070b5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116141561079e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108165760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b610820848461133f565b60335460006108316103e883611c8f565b905060006103e8610840611421565b61084a9190611c8f565b905060006108588783611ca7565b9050806108658489611cbe565b61086f9190611cdd565b9550856108d55760405162461bcd60e51b815260206004820152602e60248201527f5374726174656779426173652e6465706f7369743a206e65775368617265732060448201526d63616e6e6f74206265207a65726f60901b6064820152608401610410565b6108df8685611c8f565b60338190556f4b3b4ca85a86c47a098a223fffffffff10156109695760405162461bcd60e51b815260206004820152603c60248201527f5374726174656779426173652e6465706f7369743a20746f74616c536861726560448201527f73206578636565647320604d41585f544f54414c5f53484152455360000000006064820152608401610410565b610982826103e860335461097d9190611c8f565b611493565b505050505092915050565b600054610100900460ff16158080156109ad5750600054600160ff909116105b806109c75750303b1580156109c7575060005460ff166001145b6109e35760405162461bcd60e51b815260040161041090611b5a565b6000805460ff191660011790558015610a06576000805461ff0019166101001790555b610a1083836110e7565b8015610a56576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000610a696102e783610bbf565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae09190611c0f565b610afc5760405162461bcd60e51b815260040161041090611c31565b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610b4e9190611c8f565b905060006103e8610b5d611421565b610b679190611c8f565b905081610b748583611cbe565b610b7e9190611cdd565b949350505050565b6000610a6982610e3a565b6000610a696103a283610bbf565b60606040518060800160405280604d8152602001611d52604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a699190611cff565b6001805460029081161415610ca75760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610410565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d1f5760405162461bcd60e51b815260206004820181905260248201527f5374726174656779426173652e6f6e6c7953747261746567794d616e616765726044820152606401610410565b610d2a8484846114df565b60335480831115610db95760405162461bcd60e51b815260206004820152604d60248201527f5374726174656779426173652e77697468647261773a20616d6f756e7453686160448201527f726573206d757374206265206c657373207468616e206f7220657175616c207460648201526c6f20746f74616c53686172657360981b608482015260a401610410565b6000610dc76103e883611c8f565b905060006103e8610dd6611421565b610de09190611c8f565b9050600082610def8784611cbe565b610df99190611cdd565b9050610e058685611ca7565b603355610e25610e158284611ca7565b6103e860335461097d9190611c8f565b610e30888883611562565b5050505050505050565b6000806103e8603354610e4d9190611c8f565b905060006103e8610e5c611421565b610e669190611c8f565b905080610b748386611cbe565b6000610a6982610b3b565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef59190611ba8565b6001600160a01b0316336001600160a01b031614610f255760405162461bcd60e51b815260040161041090611bc5565b600154198119600154191614610fa35760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610410565b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161073e565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a1808211156110dc5760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794261736554564c4c696d6974732e5f73657454564c4c696d60448201527f6974733a206d61785065724465706f7369742065786365656473206d6178546f60648201526a74616c4465706f7369747360a81b608482015260a401610410565b606491909155606555565b600054610100900460ff166111525760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b038416179055611178816000611576565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112119190611d18565b604080516001600160a01b03909316835260ff9091166020830152015b60405180910390a15050565b6001600160a01b0381166112c85760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610410565b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6064548111156113a95760405162461bcd60e51b815260206004820152602f60248201527f53747261746567794261736554564c4c696d6974733a206d617820706572206460448201526e195c1bdcda5d08195e18d959591959608a1b6064820152608401610410565b6065546113b4611421565b11156114175760405162461bcd60e51b815260206004820152602c60248201527f53747261746567794261736554564c4c696d6974733a206d6178206465706f7360448201526b1a5d1cc8195e18d95959195960a21b6064820152608401610410565b6106018282611662565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e9190611cff565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be8816114c784670de0b6b3a7640000611cbe565b6114d19190611cdd565b60405190815260200161122e565b6032546001600160a01b03838116911614610a565760405162461bcd60e51b815260206004820152603b60248201527f5374726174656779426173652e77697468647261773a2043616e206f6e6c792060448201527f77697468647261772074686520737472617465677920746f6b656e00000000006064820152608401610410565b610a566001600160a01b03831684836116de565b6000546201000090046001600160a01b031615801561159d57506001600160a01b03821615155b61161f5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610410565b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26106018261123a565b6032546001600160a01b038381169116146106015760405162461bcd60e51b815260206004820152603660248201527f5374726174656779426173652e6465706f7369743a2043616e206f6e6c79206460448201527532b837b9b4ba103ab73232b9363cb4b733aa37b5b2b760511b6064820152608401610410565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610a569286929160009161176e9185169084906117eb565b805190915015610a56578080602001905181019061178c9190611c0f565b610a565760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b60606117fa8484600085611804565b90505b9392505050565b6060824710156118655760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6118bc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b031685876040516118d89190611d35565b60006040518083038185875af1925050503d8060008114611915576040519150601f19603f3d011682016040523d82523d6000602084013e61191a565b606091505b509150915061192a828286611935565b979650505050505050565b606083156119445750816117fd565b8251156119545782518084602001fd5b8160405162461bcd60e51b81526004016104109190611ae6565b6001600160a01b038116811461054d57600080fd5b6000806000806080858703121561199957600080fd5b843593506020850135925060408501356119b28161196e565b915060608501356119c28161196e565b939692955090935050565b6000602082840312156119df57600080fd5b81356117fd8161196e565b600080604083850312156119fd57600080fd5b50508035926020909101359150565b600060208284031215611a1e57600080fd5b5035919050565b60008060408385031215611a3857600080fd5b8235611a438161196e565b946020939093013593505050565b60008060408385031215611a6457600080fd5b8235611a6f8161196e565b91506020830135611a7f8161196e565b809150509250929050565b60ff8116811461054d57600080fd5b600060208284031215611aab57600080fd5b81356117fd81611a8a565b60005b83811015611ad1578181015183820152602001611ab9565b83811115611ae0576000848401525b50505050565b6020815260008251806020840152611b05816040850160208701611ab6565b601f01601f19169190910160400192915050565b600080600060608486031215611b2e57600080fd5b8335611b398161196e565b92506020840135611b498161196e565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600060208284031215611bba57600080fd5b81516117fd8161196e565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611c2157600080fd5b815180151581146117fd57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ca257611ca2611c79565b500190565b600082821015611cb957611cb9611c79565b500390565b6000816000190483118215151615611cd857611cd8611c79565b500290565b600082611cfa57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611d1157600080fd5b5051919050565b600060208284031215611d2a57600080fd5b81516117fd81611a8a565b60008251611d47818460208701611ab6565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212208549fd2100ff79e56d7fded410ac662be502dbe16e18a815844148c99c0b5bc864736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"WithdrawalAmountExceedsDeposit\",\"inputs\":[]}]", + Bin: "0x60a060405234801561001057600080fd5b506040516119d03803806119d083398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b60805161186461016c600039600081816102160152818161072b01528181610aa30152610b4201526118646000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046114c2565b6103ba565b005b6101a66101b636600461150c565b61049d565b6101a66101c9366004611529565b610551565b6101a66101dc36600461154b565b610607565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b61024160335481565b604051908152602001610208565b61024160645481565b610241610266366004611564565b6106f7565b6101a6610279366004611590565b610848565b61024161028c36600461150c565b610916565b6101a661092a565b6102b86102a73660046115d8565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e736600461154b565b6109f7565b6000546101f4906201000090046001600160a01b031681565b61024161031336600461154b565b610a42565b61024161032636600461150c565b610a4d565b610333610a5b565b6040516102089190611619565b61024161034e36600461150c565b610a7b565b6101a661036136600461164c565b610b10565b60645460655460408051928352602083019190915201610208565b61024161038f36600461154b565b610c30565b6102416103a236600461154b565b610c69565b6101a66103b536600461154b565b610c74565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b81526004016104109061168d565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610d7c565b6104508383610e20565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906116db565b6001600160a01b0316336001600160a01b0316146105455760405163794821ff60e01b815260040160405180910390fd5b61054e81610f73565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c891906116db565b6001600160a01b0316336001600160a01b0316146105f95760405163794821ff60e01b815260040160405180910390fd5b6106038282610d7c565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610654573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067891906116f8565b61069557604051631d77d47760e21b815260040160405180910390fd5b600154818116146106b95760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036107205760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610769576040516348da714f60e01b815260040160405180910390fd5b6107738484611011565b60335460006107846103e883611730565b905060006103e8610793611068565b61079d9190611730565b905060006107ab8783611743565b9050806107b88489611756565b6107c2919061176d565b9550856000036107e557604051630c392ed360e11b815260040160405180910390fd5b6107ef8685611730565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561082457604051632f14e8a360e11b815260040160405180910390fd5b61083d826103e86033546108389190611730565b6110da565b505050505092915050565b600054610100900460ff16158080156108685750600054600160ff909116105b806108825750303b158015610882575060005460ff166001145b61089e5760405162461bcd60e51b81526004016104109061168d565b6000805460ff1916600117905580156108c1576000805461ff0019166101001790555b6108cb8383610e20565b8015610911576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109246102e783610a7b565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099b91906116f8565b6109b857604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610a0a9190611730565b905060006103e8610a19611068565b610a239190611730565b905081610a308583611756565b610a3a919061176d565b949350505050565b600061092482610c30565b60006109246103a283610a7b565b60606040518060800160405280604d81526020016117e2604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610924919061178f565b60018054600290811603610b375760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b80576040516348da714f60e01b815260040160405180910390fd5b610b8b848484611126565b60335480831115610baf57604051633a5d3b0160e21b815260040160405180910390fd5b6000610bbd6103e883611730565b905060006103e8610bcc611068565b610bd69190611730565b9050600082610be58784611756565b610bef919061176d565b9050610bfb8685611743565b603355610c1b610c0b8284611743565b6103e86033546108389190611730565b610c26888883611154565b5050505050505050565b6000806103e8603354610c439190611730565b905060006103e8610c52611068565b610c5c9190611730565b905080610a308386611756565b6000610924826109f7565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ceb91906116db565b6001600160a01b0316336001600160a01b031614610d1c5760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610d455760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106ec565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610e155760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b600054610100900460ff16610e8b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b038416179055610eb1816000611168565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a91906117a8565b604080516001600160a01b03909316835260ff9091166020830152015b60405180910390a15050565b6001600160a01b038116610f9a576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6064548111156110345760405163052b07b760e21b815260040160405180910390fd5b60655461103f611068565b111561105e5760405163d86bae6760e01b815260040160405180910390fd5b61060382826111ef565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d5919061178f565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be88161110e84670de0b6b3a7640000611756565b611118919061176d565b604051908152602001610f67565b6032546001600160a01b0383811691161461091157604051630312abdd60e61b815260040160405180910390fd5b6109116001600160a01b038316848361121d565b6000546201000090046001600160a01b031615801561118f57506001600160a01b03821615155b6111ac576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261060382610f73565b6032546001600160a01b0383811691161461060357604051630312abdd60e61b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610911928692916000916112ad91851690849061132a565b80519091501561091157808060200190518101906112cb91906116f8565b6109115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b60606113398484600085611343565b90505b9392505050565b6060824710156113a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6113fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161141791906117c5565b60006040518083038185875af1925050503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b5091509150611469828286611474565b979650505050505050565b6060831561148357508161133c565b8251156114935782518084602001fd5b8160405162461bcd60e51b81526004016104109190611619565b6001600160a01b038116811461054e57600080fd5b600080600080608085870312156114d857600080fd5b843593506020850135925060408501356114f1816114ad565b91506060850135611501816114ad565b939692955090935050565b60006020828403121561151e57600080fd5b813561133c816114ad565b6000806040838503121561153c57600080fd5b50508035926020909101359150565b60006020828403121561155d57600080fd5b5035919050565b6000806040838503121561157757600080fd5b8235611582816114ad565b946020939093013593505050565b600080604083850312156115a357600080fd5b82356115ae816114ad565b915060208301356115be816114ad565b809150509250929050565b60ff8116811461054e57600080fd5b6000602082840312156115ea57600080fd5b813561133c816115c9565b60005b838110156116105781810151838201526020016115f8565b50506000910152565b60208152600082518060208401526116388160408501602087016115f5565b601f01601f19169190910160400192915050565b60008060006060848603121561166157600080fd5b833561166c816114ad565b9250602084013561167c816114ad565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156116ed57600080fd5b815161133c816114ad565b60006020828403121561170a57600080fd5b8151801515811461133c57600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156109245761092461171a565b818103818111156109245761092461171a565b80820281158282048414176109245761092461171a565b60008261178a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156117a157600080fd5b5051919050565b6000602082840312156117ba57600080fd5b815161133c816115c9565b600082516117d78184602087016115f5565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220bf1b7eef95b9e316126dc2d4eb840b0aacc8d6c49b4de471cc2641480290178d64736f6c634300081b0033", } // StrategyBaseTVLLimitsABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyFactory/binding.go b/pkg/bindings/StrategyFactory/binding.go index cd0633c74..b13a1ed01 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\"}],\"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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", - Bin: "0x60a06040523480156200001157600080fd5b50604051620024ae380380620024ae833981016040819052620000349162000114565b6001600160a01b0381166080526200004b62000052565b5062000146565b603354610100900460ff1615620000bf5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60335460ff908116101562000112576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012757600080fd5b81516001600160a01b03811681146200013f57600080fd5b9392505050565b608051612329620001856000396000818161019701528181610829015281816108cc01528181610a1d01528181610d4a015261111101526123296000f3fe60806040523480156200001157600080fd5b5060043610620001455760003560e01c80636b9b622911620000bb578063f0062d9a116200007a578063f0062d9a14620002e1578063f2fde38b14620002f5578063fabc1cbc146200030c578063fe38b32d1462000323578063fe575a87146200033a57600080fd5b80636b9b62291462000283578063715018a6146200029a578063886f119514620002a45780638da5cb5b14620002b8578063be20309414620002ca57600080fd5b8063581dfd651162000108578063581dfd6514620001ed578063595c6a6714620002195780635ac86ab714620002235780635c975abb146200025a578063697d54b4146200026c57600080fd5b806310d67a2f146200014a578063136439dd146200016357806323103c41146200017a57806339b70e3814620001915780634e5a426314620001d6575b600080fd5b620001616200015b366004620014d8565b62000360565b005b6200016162000174366004620014ff565b62000424565b620001616200018b36600462001568565b6200056b565b620001b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b62000161620001e7366004620015bd565b6200089b565b620001b9620001fe366004620014d8565b6001602052600090815260409020546001600160a01b031681565b620001616200092f565b6200024962000234366004620015fb565b609954600160ff9092169190911b9081161490565b6040519015158152602001620001cd565b609954604051908152602001620001cd565b620001616200027d36600462001620565b620009fc565b620001b962000294366004620014d8565b62000a5a565b6200016162000dc1565b609854620001b9906001600160a01b031681565b6066546001600160a01b0316620001b9565b62000161620002db36600462001693565b62000dd9565b600054620001b9906001600160a01b031681565b6200016162000306366004620014d8565b62000f0f565b620001616200031d366004620014ff565b62000f8b565b620001616200033436600462001568565b620010f0565b620002496200034b366004620014d8565b60026020526000908152604090205460ff1681565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003da9190620016ed565b6001600160a01b0316336001600160a01b031614620004165760405162461bcd60e51b81526004016200040d906200170d565b60405180910390fd5b62000421816200114a565b50565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156200046d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000493919062001757565b620004b25760405162461bcd60e51b81526004016200040d9062001777565b609954818116146200052d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c697479000000000000000060648201526084016200040d565b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6200057562001243565b60008167ffffffffffffffff811115620005935762000593620017bf565b604051908082528060200260200182016040528015620005bd578160200160208202803683370190505b5090506000805b83811015620008075760026000868684818110620005e657620005e6620017d5565b9050602002016020810190620005fd9190620014d8565b6001600160a01b0316815260208101919091526040016000205460ff16156200069b5760405162461bcd60e51b815260206004820152604360248201527f5374726174656779466163746f72792e626c61636b6c697374546f6b656e733a60448201527f2043616e6e6f7420626c61636b6c697374206465706c6f79656420737472617460648201526265677960e81b608482015260a4016200040d565b600160026000878785818110620006b657620006b6620017d5565b9050602002016020810190620006cd9190620014d8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f75519c51f39873ec0e27dd3bbc09549e4865a113f505393fb9eab5898f6418b38585838181106200072b576200072b620017d5565b9050602002016020810190620007429190620014d8565b6040516001600160a01b03909116815260200160405180910390a1600060016000878785818110620007785762000778620017d5565b90506020020160208101906200078f9190620014d8565b6001600160a01b0390811682526020820192909252604001600020541690508015620007f35780848481518110620007cb57620007cb620017d5565b6001600160a01b039092166020928302919091019091015282620007ef81620017eb565b9350505b50620007ff81620017eb565b9050620005c4565b50808252801562000895576040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b890620008609085906004016200185b565b600060405180830381600087803b1580156200087b57600080fd5b505af115801562000890573d6000803e3d6000fd5b505050505b50505050565b620008a562001243565b604051634e5a426360e01b81526001600160a01b03838116600483015282151560248301527f00000000000000000000000000000000000000000000000000000000000000001690634e5a4263906044015b600060405180830381600087803b1580156200091257600080fd5b505af115801562000927573d6000803e3d6000fd5b505050505050565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801562000978573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200099e919062001757565b620009bd5760405162461bcd60e51b81526004016200040d9062001777565b600019609981905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b62000a0662001243565b60405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b35479062000860908790879087908790600401620018b2565b60995460009081906001908116141562000ab75760405162461bcd60e51b815260206004820152601960248201527f5061757361626c653a20696e646578206973207061757365640000000000000060448201526064016200040d565b6001600160a01b03831660009081526002602052604090205460ff161562000b485760405162461bcd60e51b815260206004820152603760248201527f5374726174656779466163746f72792e6465706c6f794e65775374726174656760448201527f793a20546f6b656e20697320626c61636b6c697374656400000000000000000060648201526084016200040d565b6001600160a01b03838116600090815260016020526040902054161562000be65760405162461bcd60e51b8152602060048201526044602482018190527f5374726174656779466163746f72792e6465706c6f794e657753747261746567908201527f793a20537472617465677920616c72656164792065786973747320666f72207460648201526337b5b2b760e11b608482015260a4016200040d565b600080546098546040516001600160a01b038781166024830152918216604482015291169063485cc95560e01b9060640160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905162000c5690620014b4565b62000c6392919062001916565b604051809103906000f08015801562000c80573d6000803e3d6000fd5b50905062000c8f84826200129f565b604080516001808252818301909252600091602080830190803683375050604080516001808252818301909252929350600092915060208083019080368337019050509050828260008151811062000ceb5762000ceb620017d5565b60200260200101906001600160a01b031690816001600160a01b03168152505060008160008151811062000d235762000d23620017d5565b9115156020928302919091019091015260405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b35479062000d8390859085906004016200197e565b600060405180830381600087803b15801562000d9e57600080fd5b505af115801562000db3573d6000803e3d6000fd5b509498975050505050505050565b62000dcb62001243565b62000dd760006200130a565b565b603354610100900460ff161580801562000dfa5750603354600160ff909116105b8062000e165750303b15801562000e16575060335460ff166001145b62000e7b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016200040d565b6033805460ff19166001179055801562000e9f576033805461ff0019166101001790555b62000eaa856200130a565b62000eb684846200135c565b62000ec1826200144b565b801562000f08576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b62000f1962001243565b6001600160a01b03811662000f805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200040d565b62000421816200130a565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010059190620016ed565b6001600160a01b0316336001600160a01b031614620010385760405162461bcd60e51b81526004016200040d906200170d565b609954198119609954191614620010b85760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c697479000000000000000060648201526084016200040d565b609981905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200162000560565b620010fa62001243565b6040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b890620008f79085908590600401620019db565b6001600160a01b038116620011da5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016200040d565b609854604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609880546001600160a01b0319166001600160a01b0392909216919091179055565b6066546001600160a01b0316331462000dd75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200040d565b6001600160a01b0382811660008181526001602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f6852a55230ef089d785bce7ffbf757985de34026df90a87d7b4a6e56f95d251f910160405180910390a15050565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6098546001600160a01b03161580156200137e57506001600160a01b03821615155b620014025760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016200040d565b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a262001447826200114a565b5050565b600054604080516001600160a01b03928316815291831660208301527fe21755962a7d7e100b59b9c3e4d4b54085b146313719955efb6a7a25c5c7feee910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6108fa80620019fa83390190565b6001600160a01b03811681146200042157600080fd5b600060208284031215620014eb57600080fd5b8135620014f881620014c2565b9392505050565b6000602082840312156200151257600080fd5b5035919050565b60008083601f8401126200152c57600080fd5b50813567ffffffffffffffff8111156200154557600080fd5b6020830191508360208260051b85010111156200156157600080fd5b9250929050565b600080602083850312156200157c57600080fd5b823567ffffffffffffffff8111156200159457600080fd5b620015a28582860162001519565b90969095509350505050565b80151581146200042157600080fd5b60008060408385031215620015d157600080fd5b8235620015de81620014c2565b91506020830135620015f081620015ae565b809150509250929050565b6000602082840312156200160e57600080fd5b813560ff81168114620014f857600080fd5b600080600080604085870312156200163757600080fd5b843567ffffffffffffffff808211156200165057600080fd5b6200165e8883890162001519565b909650945060208701359150808211156200167857600080fd5b50620016878782880162001519565b95989497509550505050565b60008060008060808587031215620016aa57600080fd5b8435620016b781620014c2565b93506020850135620016c981620014c2565b9250604085013591506060850135620016e281620014c2565b939692955090935050565b6000602082840312156200170057600080fd5b8151620014f881620014c2565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156200176a57600080fd5b8151620014f881620015ae565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006000198214156200180e57634e487b7160e01b600052601160045260246000fd5b5060010190565b600081518084526020808501945080840160005b83811015620018505781516001600160a01b03168752958201959082019060010162001829565b509495945050505050565b602081526000620014f8602083018462001815565b8183526000602080850194508260005b85811015620018505781356200189681620014c2565b6001600160a01b03168752958201959082019060010162001880565b604081526000620018c860408301868862001870565b8281036020848101919091528482528591810160005b8681101562001909578335620018f481620015ae565b151582529282019290820190600101620018de565b5098975050505050505050565b60018060a01b038316815260006020604081840152835180604085015260005b81811015620019545785810183015185820160600152820162001936565b8181111562001967576000606083870101525b50601f01601f191692909201606001949350505050565b60408152600062001993604083018562001815565b82810360208481019190915284518083528582019282019060005b81811015620019ce578451151583529383019391830191600101620019ae565b5090979650505050505050565b602081526000620019f160208301848662001870565b94935050505056fe60806040526040516108fa3803806108fa83398101604081905261002291610456565b61002e82826000610035565b5050610580565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610516565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610516565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108d3602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b60606001600160a01b0384163b6103495760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610169565b600080856001600160a01b0316856040516103649190610531565b600060405180830381855af49150503d806000811461039f576040519150601f19603f3d011682016040523d82523d6000602084013e6103a4565b606091505b5090925090506103b58282866103bf565b9695505050505050565b606083156103ce5750816102c8565b8251156103de5782518084602001fd5b8160405162461bcd60e51b8152600401610169919061054d565b80516001600160a01b038116811461040f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044557818101518382015260200161042d565b838111156100f95750506000910152565b6000806040838503121561046957600080fd5b610472836103f8565b60208401519092506001600160401b038082111561048f57600080fd5b818501915085601f8301126104a357600080fd5b8151818111156104b5576104b5610414565b604051601f8201601f19908116603f011681019083821181831017156104dd576104dd610414565b816040528281528860208487010111156104f657600080fd5b61050783602083016020880161042a565b80955050505050509250929050565b60006020828403121561052857600080fd5b6102c8826103f8565b6000825161054381846020870161042a565b9190910192915050565b602081526000825180602084015261056c81604085016020870161042a565b601f01601f19169190910160400192915050565b6103448061058f6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102e860279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb919061023f565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b60606001600160a01b0384163b6101915760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b0316856040516101ac9190610298565b600060405180830381855af49150503d80600081146101e7576040519150601f19603f3d011682016040523d82523d6000602084013e6101ec565b606091505b50915091506101fc828286610206565b9695505050505050565b6060831561021557508161004e565b8251156102255782518084602001fd5b8160405162461bcd60e51b815260040161018891906102b4565b60006020828403121561025157600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028357818101518382015260200161026b565b83811115610292576000848401525b50505050565b600082516102aa818460208701610268565b9190910192915050565b60208152600082518060208401526102d3816040850160208701610268565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206225174df4b558257f66ac9aa53b52c29cdd29a561b03eb6d75a95018aff3e5864736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205ec4c51d66eda3a5cc6c4836684b038a334a62fe205ea7e8aaa91c0a44cd1bb364736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotBlacklistDeployedStrategy\",\"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: "0x60a060405234801561001057600080fd5b50604051611df1380380611df183398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b603354610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60335460ff9081161015610108576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b608051611c7961017860003960008181610171015281816106d801528181610775015281816108bd01528181610aed0152610e3f0152611c796000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80636b9b6229116100ad578063f0062d9a11610071578063f0062d9a1461029d578063f2fde38b146102b0578063fabc1cbc146102c3578063fe38b32d146102d6578063fe575a87146102e957600080fd5b80636b9b62291461024b578063715018a61461025e578063886f1195146102665780638da5cb5b14610279578063be2030941461028a57600080fd5b8063581dfd65116100f4578063581dfd65146101c3578063595c6a67146101ec5780635ac86ab7146101f45780635c975abb14610227578063697d54b41461023857600080fd5b806310d67a2f14610131578063136439dd1461014657806323103c411461015957806339b70e381461016c5780634e5a4263146101b0575b600080fd5b61014461013f36600461112d565b61030c565b005b610144610154366004611151565b6103c0565b6101446101673660046111b6565b6104ab565b6101937f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101446101be366004611206565b610746565b6101936101d136600461112d565b6001602052600090815260409020546001600160a01b031681565b6101446107d6565b61021761020236600461123f565b609954600160ff9092169190911b9081161490565b60405190151581526020016101a7565b6099546040519081526020016101a7565b610144610246366004611262565b61089e565b61019361025936600461112d565b6108f8565b610144610b60565b609854610193906001600160a01b031681565b6066546001600160a01b0316610193565b6101446102983660046112d3565b610b74565b600054610193906001600160a01b031681565b6101446102be36600461112d565b610ca2565b6101446102d1366004611151565b610d18565b6101446102e43660046111b6565b610e20565b6102176102f736600461112d565b60026020526000908152604090205460ff1681565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103839190611326565b6001600160a01b0316336001600160a01b0316146103b45760405163794821ff60e01b815260040160405180910390fd5b6103bd81610e76565b50565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c9190611343565b61044957604051631d77d47760e21b815260040160405180910390fd5b6099548181161461046d5760405163c61dca5d60e01b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6104b3610f06565b60008167ffffffffffffffff8111156104ce576104ce611360565b6040519080825280602002602001820160405280156104f7578160200160208202803683370190505b5090506000805b838110156106b7576002600086868481811061051c5761051c611376565b9050602002016020810190610531919061112d565b6001600160a01b0316815260208101919091526040016000205460ff161561056b5760405162b1aec360e41b815260040160405180910390fd5b60016002600087878581811061058357610583611376565b9050602002016020810190610598919061112d565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f75519c51f39873ec0e27dd3bbc09549e4865a113f505393fb9eab5898f6418b38585838181106105f3576105f3611376565b9050602002016020810190610608919061112d565b6040516001600160a01b03909116815260200160405180910390a160006001600087878581811061063b5761063b611376565b9050602002016020810190610650919061112d565b6001600160a01b03908116825260208201929092526040016000205416905080156106ae578084848151811061068857610688611376565b6001600160a01b0390921660209283029190910190910152826106aa8161138c565b9350505b506001016104fe565b508082528015610740576040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061070d9085906004016113f8565b600060405180830381600087803b15801561072757600080fd5b505af115801561073b573d6000803e3d6000fd5b505050505b50505050565b61074e610f06565b604051634e5a426360e01b81526001600160a01b03838116600483015282151560248301527f00000000000000000000000000000000000000000000000000000000000000001690634e5a4263906044015b600060405180830381600087803b1580156107ba57600080fd5b505af11580156107ce573d6000803e3d6000fd5b505050505050565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611343565b61085f57604051631d77d47760e21b815260040160405180910390fd5b600019609981905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6108a6610f06565b60405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b35479061070d90879087908790879060040161144b565b60995460009081906001908116036109235760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b03831660009081526002602052604090205460ff161561095d5760405163091867bd60e11b815260040160405180910390fd5b6001600160a01b0383811660009081526001602052604090205416156109965760405163c45546f760e01b815260040160405180910390fd5b600080546098546040516001600160a01b038781166024830152918216604482015291169063485cc95560e01b9060640160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610a049061110b565b610a0f9291906114a9565b604051809103906000f080158015610a2b573d6000803e3d6000fd5b509050610a388482610f60565b6040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508282600081518110610a9157610a91611376565b60200260200101906001600160a01b031690816001600160a01b031681525050600081600081518110610ac657610ac6611376565b9115156020928302919091019091015260405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b354790610b249085908590600401611506565b600060405180830381600087803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b509498975050505050505050565b610b68610f06565b610b726000610fcb565b565b603354610100900460ff1615808015610b945750603354600160ff909116105b80610bae5750303b158015610bae575060335460ff166001145b610c165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6033805460ff191660011790558015610c39576033805461ff0019166101001790555b610c4285610fcb565b610c4c848461101d565b610c55826110a2565b8015610c9b576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610caa610f06565b6001600160a01b038116610d0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c0d565b6103bd81610fcb565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190611326565b6001600160a01b0316336001600160a01b031614610dc05760405163794821ff60e01b815260040160405180910390fd5b609954198119609954191614610de95760405163c61dca5d60e01b815260040160405180910390fd5b609981905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104a0565b610e28610f06565b6040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b8906107a09085908590600401611562565b6001600160a01b038116610e9d576040516339b190bb60e11b815260040160405180910390fd5b609854604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609880546001600160a01b0319166001600160a01b0392909216919091179055565b6066546001600160a01b03163314610b725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0d565b6001600160a01b0382811660008181526001602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f6852a55230ef089d785bce7ffbf757985de34026df90a87d7b4a6e56f95d251f910160405180910390a15050565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6098546001600160a01b031615801561103e57506001600160a01b03821615155b61105b576040516339b190bb60e11b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261109e82610e76565b5050565b600054604080516001600160a01b03928316815291831660208301527fe21755962a7d7e100b59b9c3e4d4b54085b146313719955efb6a7a25c5c7feee910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6106c58061157f83390190565b6001600160a01b03811681146103bd57600080fd5b60006020828403121561113f57600080fd5b813561114a81611118565b9392505050565b60006020828403121561116357600080fd5b5035919050565b60008083601f84011261117c57600080fd5b50813567ffffffffffffffff81111561119457600080fd5b6020830191508360208260051b85010111156111af57600080fd5b9250929050565b600080602083850312156111c957600080fd5b823567ffffffffffffffff8111156111e057600080fd5b6111ec8582860161116a565b90969095509350505050565b80151581146103bd57600080fd5b6000806040838503121561121957600080fd5b823561122481611118565b91506020830135611234816111f8565b809150509250929050565b60006020828403121561125157600080fd5b813560ff8116811461114a57600080fd5b6000806000806040858703121561127857600080fd5b843567ffffffffffffffff81111561128f57600080fd5b61129b8782880161116a565b909550935050602085013567ffffffffffffffff8111156112bb57600080fd5b6112c78782880161116a565b95989497509550505050565b600080600080608085870312156112e957600080fd5b84356112f481611118565b9350602085013561130481611118565b925060408501359150606085013561131b81611118565b939692955090935050565b60006020828403121561133857600080fd5b815161114a81611118565b60006020828403121561135557600080fd5b815161114a816111f8565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016113ac57634e487b7160e01b600052601160045260246000fd5b5060010190565b600081518084526020840193506020830160005b828110156113ee5781516001600160a01b03168652602095860195909101906001016113c7565b5093949350505050565b60208152600061114a60208301846113b3565b81835260208301925060008160005b848110156113ee57813561142d81611118565b6001600160a01b03168652602095860195919091019060010161141a565b60408152600061145f60408301868861140b565b82810360208085019190915284825285910160005b8581101561149d578235611487816111f8565b1515825260209283019290910190600101611474565b50979650505050505050565b60018060a01b0383168152604060208201526000825180604084015260005b818110156114e557602081860181015160608684010152016114c8565b506000606082850101526060601f19601f8301168401019150509392505050565b60408152600061151960408301856113b3565b828103602084015280845180835260208301915060208601925060005b818110156115565783511515835260209384019390920191600101611536565b50909695505050505050565b60208152600061157660208301848661140b565b94935050505056fe60806040526040516106c53803806106c583398101604081905261002291610413565b61002e82826000610035565b5050610543565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104d9565b8361027a565b505b505050565b6001600160a01b0381163b6101605760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101d4816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c591906104d9565b6001600160a01b03163b151590565b6102395760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610157565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029f838360405180606001604052806027815260200161069e602791396102a6565b9392505050565b60606001600160a01b0384163b61030e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610157565b600080856001600160a01b03168560405161032991906104f4565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b50909250905061037a828286610384565b9695505050505050565b6060831561039357508161029f565b8251156103a35782518084602001fd5b8160405162461bcd60e51b81526004016101579190610510565b80516001600160a01b03811681146103d457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b6000806040838503121561042657600080fd5b61042f836103bd565b60208401519092506001600160401b0381111561044b57600080fd5b8301601f8101851361045c57600080fd5b80516001600160401b03811115610475576104756103d9565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104a3576104a36103d9565b6040528181528282016020018710156104bb57600080fd5b6104cc8260208301602086016103ef565b8093505050509250929050565b6000602082840312156104eb57600080fd5b61029f826103bd565b600082516105068184602087016103ef565b9190910192915050565b602081526000825180602084015261052f8160408501602087016103ef565b601f01601f19169190910160400192915050565b61014c806105526000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd91906100e6565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b6000602082840312156100f857600080fd5b81516001600160a01b038116811461010f57600080fd5b939250505056fea264697066735822122073f44b13ad6a41f166bfe1da0f67ccdfa4d7fa137b8df1dcc52307b737bea46264736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220df6e1a498f63498a30d661c76e7396ede38141e95a2c8c7eb0fcc78acf436a9164736f6c634300081b0033", } // StrategyFactoryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyFactoryStorage/binding.go b/pkg/bindings/StrategyFactoryStorage/binding.go index 3a164f025..2d1429064 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\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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}]", + 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\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotBlacklistDeployedStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyExists\",\"inputs\":[]}]", } // StrategyFactoryStorageABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyManager/binding.go b/pkg/bindings/StrategyManager/binding.go index 65ecc0fdd..9eea5015b 100644 --- a/pkg/bindings/StrategyManager/binding.go +++ b/pkg/bindings/StrategyManager/binding.go @@ -31,8 +31,8 @@ var ( // StrategyManagerMetaData contains all meta data concerning the StrategyManager contract. var StrategyManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"getDeposits\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nonces\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWhitelister\",\"inputs\":[{\"name\":\"newStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"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\":\"stakerStrategyShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"\",\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false}]", - Bin: "0x6101006040523480156200001257600080fd5b506040516200338a3803806200338a833981016040819052620000359162000140565b6001600160a01b0380841660805280831660a052811660c0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e0516131a0620001ea60003960006114bb0152600061046e0152600061028501526000818161051a01528181610b8401528181610ed101528181610f250152611a7101526131a06000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063c6656702116100ad578063df5cf7231161007c578063df5cf72314610515578063e7a050aa1461053c578063f2fde38b1461054f578063f698da2514610562578063fabc1cbc1461056a57600080fd5b8063c6656702146104c9578063cbc2bd62146104dc578063cf756fdf146104ef578063df5b35471461050257600080fd5b8063b1344271116100e9578063b134427114610469578063b5d8b5b814610490578063c4623ea1146104a3578063c608c7f3146104b657600080fd5b80638da5cb5b1461040157806394f649dd14610412578063967fc0d2146104335780639b4da03d1461044657600080fd5b80635ac86ab71161019d5780637a7e0d921161016c5780637a7e0d92146103675780637ecebe0014610392578063886f1195146103b25780638b8aac3c146103c55780638c80d4e5146103ee57600080fd5b80635ac86ab7146103015780635c975abb14610334578063663c1de41461033c578063715018a61461035f57600080fd5b80634665bcda116101d95780634665bcda1461028057806348825e94146102bf5780634e5a4263146102e6578063595c6a67146102f957600080fd5b806310d67a2f1461020b578063136439dd1461022057806320606b701461023357806332e89ace1461026d575b600080fd5b61021e6102193660046129e8565b61057d565b005b61021e61022e366004612a05565b610639565b61025a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61025a61027b366004612a34565b610778565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610264565b61025a7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61021e6102f4366004612b3d565b610a66565b61021e610a9e565b61032461030f366004612b76565b609854600160ff9092169190911b9081161490565b6040519015158152602001610264565b60985461025a565b61032461034a3660046129e8565b60d16020526000908152604090205460ff1681565b61021e610b65565b61025a610375366004612b99565b60cd60209081526000928352604080842090915290825290205481565b61025a6103a03660046129e8565b60ca6020526000908152604090205481565b6097546102a7906001600160a01b031681565b61025a6103d33660046129e8565b6001600160a01b0316600090815260ce602052604090205490565b61021e6103fc366004612bc7565b610b79565b6033546001600160a01b03166102a7565b6104256104203660046129e8565b610bd2565b604051610264929190612c08565b60cb546102a7906001600160a01b031681565b6103246104543660046129e8565b60d36020526000908152604090205460ff1681565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61021e61049e366004612cd1565b610d52565b61021e6104b1366004612d13565b610ec6565b61021e6104c4366004612d64565b610f1a565b61021e6104d73660046129e8565b610fd2565b6102a76104ea366004612db7565b610fe3565b61021e6104fd366004612d13565b61101b565b61021e610510366004612de3565b61114f565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61025a61054a366004612bc7565b611378565b61021e61055d3660046129e8565b611441565b61025a6114b7565b61021e610578366004612a05565b6114f5565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190612e4f565b6001600160a01b0316336001600160a01b03161461062d5760405162461bcd60e51b815260040161062490612e6c565b60405180910390fd5b61063681611651565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a59190612eb6565b6106c15760405162461bcd60e51b815260040161062490612ed3565b6098548181161461073a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610624565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6098546000908190600190811614156107cf5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610624565b600260655414156108225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610624565b60026065556001600160a01b038816600090815260d3602052604090205460ff16156108c95760405162461bcd60e51b815260206004820152604a60248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207468697264207472616e736665726064820152691cc8191a5cd8589b195960b21b608482015260a401610624565b4284101561094b5760405162461bcd60e51b815260206004820152604360248201527f53747261746567794d616e616765722e6465706f736974496e746f537472617460448201527f656779576974685369676e61747572653a207369676e617475726520657870696064820152621c995960ea1b608482015260a401610624565b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca9093529082206001850190559150610a036114b7565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050610a46888288611748565b610a52888c8c8c611907565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610a905760405162461bcd60e51b815260040161062490612f1b565b610a9a8282611ad6565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190612eb6565b610b265760405162461bcd60e51b815260040161062490612ed3565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610b6d611b44565b610b776000611b9e565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bc15760405162461bcd60e51b815260040161062490612f85565b610bcc838383611bf0565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610c0a57610c0a612a1e565b604051908082528060200260200182016040528015610c33578160200160208202803683370190505b50905060005b82811015610cc4576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610c7857610c78612fe3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610cb157610cb1612fe3565b6020908102919091010152600101610c39565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610d4057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d22575b50505050509150935093505050915091565b60cb546001600160a01b03163314610d7c5760405162461bcd60e51b815260040161062490612f1b565b8060005b81811015610bcc5760d16000858584818110610d9e57610d9e612fe3565b9050602002016020810190610db391906129e8565b6001600160a01b0316815260208101919091526040016000205460ff1615610ebe57600060d16000868685818110610ded57610ded612fe3565b9050602002016020810190610e0291906129e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610e5d57610e5d612fe3565b9050602002016020810190610e7291906129e8565b6040516001600160a01b03909116815260200160405180910390a1610ebe848483818110610ea257610ea2612fe3565b9050602002016020810190610eb791906129e8565b6000611ad6565b600101610d80565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f0e5760405162461bcd60e51b815260040161062490612f85565b610bcc84848484611d4c565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f625760405162461bcd60e51b815260040161062490612f85565b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b158015610fb457600080fd5b505af1158015610fc8573d6000803e3d6000fd5b5050505050505050565b610fda611b44565b61063681611fd9565b60ce6020528160005260406000208181548110610fff57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff161580801561103b5750600054600160ff909116105b806110555750303b158015611055575060005460ff166001145b6110b85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610624565b6000805460ff1916600117905580156110db576000805461ff0019166101001790555b6110e3612042565b60c9556110f083836120d9565b6110f985611b9e565b61110284611fd9565b8015611148576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b031633146111795760405162461bcd60e51b815260040161062490612f1b565b8281146112025760405162461bcd60e51b815260206004820152604b60248201527f53747261746567794d616e616765722e61646453747261746567696573546f4460448201527f65706f73697457686974656c6973743a206172726179206c656e67746873206460648201526a0de40dcdee840dac2e8c6d60ab1b608482015260a401610624565b8260005b818110156113705760d1600087878481811061122457611224612fe3565b905060200201602081019061123991906129e8565b6001600160a01b0316815260208101919091526040016000205460ff1661136857600160d1600088888581811061127257611272612fe3565b905060200201602081019061128791906129e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8686838181106112e2576112e2612fe3565b90506020020160208101906112f791906129e8565b6040516001600160a01b03909116815260200160405180910390a161136886868381811061132757611327612fe3565b905060200201602081019061133c91906129e8565b85858481811061134e5761134e612fe3565b90506020020160208101906113639190612ff9565b611ad6565b600101611206565b505050505050565b6098546000908190600190811614156113cf5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610624565b600260655414156114225760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610624565b600260655561143333868686611907565b600160655595945050505050565b611449611b44565b6001600160a01b0381166114ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610624565b61063681611b9e565b60007f00000000000000000000000000000000000000000000000000000000000000004614156114e8575060c95490565b6114f0612042565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156c9190612e4f565b6001600160a01b0316336001600160a01b03161461159c5760405162461bcd60e51b815260040161062490612e6c565b60985419811960985419161461161a5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610624565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161076d565b6001600160a01b0381166116df5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610624565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561186757604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90611788908690869060040161306e565b602060405180830381865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190613087565b6001600160e01b031916146118625760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610624565b505050565b826001600160a01b031661187b83836121bf565b6001600160a01b0316146118625760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610624565b6001600160a01b038316600090815260d16020526040812054849060ff166119ad5760405162461bcd60e51b815260206004820152604d60248201527f53747261746567794d616e616765722e6f6e6c7953747261746567696573576860448201527f6974656c6973746564466f724465706f7369743a207374726174656779206e6f60648201526c1d081dda1a5d195b1a5cdd1959609a1b608482015260a401610624565b6119c26001600160a01b0385163387866121e3565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3591906130b1565b9150611a4386858785611d4c565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b158015611ab557600080fd5b505af1158015611ac9573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610b775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610624565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081611c655760405162461bcd60e51b815260206004820152603e60248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a207360448201527f68617265416d6f756e742073686f756c64206e6f74206265207a65726f2100006064820152608401610624565b6001600160a01b03808516600090815260cd602090815260408083209387168352929052205480831115611cf75760405162461bcd60e51b815260206004820152603360248201527f53747261746567794d616e616765722e5f72656d6f76655368617265733a20736044820152720d0c2e4ca82dadeeadce840e8dede40d0d2ced606b1b6064820152608401610624565b6001600160a01b03808616600090815260cd602090815260408083209388168352929052208382039081905590831415611d3f57611d35858561223d565b6001915050611d45565b60009150505b9392505050565b6001600160a01b038416611dc85760405162461bcd60e51b815260206004820152603960248201527f53747261746567794d616e616765722e5f6164645368617265733a207374616b60448201527f65722063616e6e6f74206265207a65726f2061646472657373000000000000006064820152608401610624565b80611e345760405162461bcd60e51b815260206004820152603660248201527f53747261746567794d616e616765722e5f6164645368617265733a207368617260448201527565732073686f756c64206e6f74206265207a65726f2160501b6064820152608401610624565b6001600160a01b03808516600090815260cd6020908152604080832093861683529290522054611f45576001600160a01b038416600090815260ce602090815260409091205410611f065760405162461bcd60e51b815260206004820152605060248201527f53747261746567794d616e616765722e5f6164645368617265733a206465706f60448201527f73697420776f756c6420657863656564204d41585f5354414b45525f5354524160648201526f0a88a8eb2be9892a6a8be988a9c8ea8960831b608482015260a401610624565b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd6020908152604080832093861683529290529081208054839290611f7c9084906130e0565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b03161580156120fa57506001600160a01b03821615155b61217c5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610624565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610a9a82611651565b60008060006121ce858561242f565b915091506121db8161249f565b509392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610bcc90859061265a565b6001600160a01b038216600090815260ce6020526040812054905b81811015612358576001600160a01b03848116600090815260ce602052604090208054918516918390811061228f5761228f612fe3565b6000918252602090912001546001600160a01b03161415612350576001600160a01b038416600090815260ce6020526040902080546122d0906001906130f8565b815481106122e0576122e0612fe3565b60009182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061231d5761231d612fe3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550612358565b600101612258565b818114156123e05760405162461bcd60e51b815260206004820152604960248201527f53747261746567794d616e616765722e5f72656d6f766553747261746567794660448201527f726f6d5374616b657253747261746567794c6973743a207374726174656779206064820152681b9bdd08199bdd5b9960ba1b608482015260a401610624565b6001600160a01b038416600090815260ce602052604090208054806124075761240761310f565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604114156124665760208301516040840151606085015160001a61245a8782858561272c565b94509450505050612498565b8251604014156124905760208301516040840151612485868383612819565b935093505050612498565b506000905060025b9250929050565b60008160048111156124b3576124b3613125565b14156124bc5750565b60018160048111156124d0576124d0613125565b141561251e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610624565b600281600481111561253257612532613125565b14156125805760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610624565b600381600481111561259457612594613125565b14156125ed5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610624565b600481600481111561260157612601613125565b14156106365760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610624565b60006126af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128529092919063ffffffff16565b80519091501561186257808060200190518101906126cd9190612eb6565b6118625760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610624565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156127635750600090506003612810565b8460ff16601b1415801561277b57508460ff16601c14155b1561278c5750600090506004612810565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156127e0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661280957600060019250925050612810565b9150600090505b94509492505050565b6000806001600160ff1b0383168161283660ff86901c601b6130e0565b90506128448782888561272c565b935093505050935093915050565b60606128618484600085612869565b949350505050565b6060824710156128ca5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610624565b6001600160a01b0385163b6129215760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610624565b600080866001600160a01b0316858760405161293d919061313b565b60006040518083038185875af1925050503d806000811461297a576040519150601f19603f3d011682016040523d82523d6000602084013e61297f565b606091505b509150915061298f82828661299a565b979650505050505050565b606083156129a9575081611d45565b8251156129b95782518084602001fd5b8160405162461bcd60e51b81526004016106249190613157565b6001600160a01b038116811461063657600080fd5b6000602082840312156129fa57600080fd5b8135611d45816129d3565b600060208284031215612a1757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c08789031215612a4d57600080fd5b8635612a58816129d3565b95506020870135612a68816129d3565b9450604087013593506060870135612a7f816129d3565b92506080870135915060a087013567ffffffffffffffff80821115612aa357600080fd5b818901915089601f830112612ab757600080fd5b813581811115612ac957612ac9612a1e565b604051601f8201601f19908116603f01168101908382118183101715612af157612af1612a1e565b816040528281528c6020848701011115612b0a57600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b801515811461063657600080fd5b60008060408385031215612b5057600080fd5b8235612b5b816129d3565b91506020830135612b6b81612b2f565b809150509250929050565b600060208284031215612b8857600080fd5b813560ff81168114611d4557600080fd5b60008060408385031215612bac57600080fd5b8235612bb7816129d3565b91506020830135612b6b816129d3565b600080600060608486031215612bdc57600080fd5b8335612be7816129d3565b92506020840135612bf7816129d3565b929592945050506040919091013590565b604080825283519082018190526000906020906060840190828701845b82811015612c4a5781516001600160a01b031684529284019290840190600101612c25565b5050508381038285015284518082528583019183019060005b81811015612c7f57835183529284019291840191600101612c63565b5090979650505050505050565b60008083601f840112612c9e57600080fd5b50813567ffffffffffffffff811115612cb657600080fd5b6020830191508360208260051b850101111561249857600080fd5b60008060208385031215612ce457600080fd5b823567ffffffffffffffff811115612cfb57600080fd5b612d0785828601612c8c565b90969095509350505050565b60008060008060808587031215612d2957600080fd5b8435612d34816129d3565b93506020850135612d44816129d3565b92506040850135612d54816129d3565b9396929550929360600135925050565b60008060008060808587031215612d7a57600080fd5b8435612d85816129d3565b93506020850135612d95816129d3565b9250604085013591506060850135612dac816129d3565b939692955090935050565b60008060408385031215612dca57600080fd5b8235612dd5816129d3565b946020939093013593505050565b60008060008060408587031215612df957600080fd5b843567ffffffffffffffff80821115612e1157600080fd5b612e1d88838901612c8c565b90965094506020870135915080821115612e3657600080fd5b50612e4387828801612c8c565b95989497509550505050565b600060208284031215612e6157600080fd5b8151611d45816129d3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215612ec857600080fd5b8151611d4581612b2f565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526044908201527f53747261746567794d616e616765722e6f6e6c7953747261746567795768697460408201527f656c69737465723a206e6f742074686520737472617465677957686974656c6960608201526339ba32b960e11b608082015260a00190565b602080825260409082018190527f53747261746567794d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561300b57600080fd5b8135611d4581612b2f565b60005b83811015613031578181015183820152602001613019565b83811115610bcc5750506000910152565b6000815180845261305a816020860160208601613016565b601f01601f19169290920160200192915050565b8281526040602082015260006128616040830184613042565b60006020828403121561309957600080fd5b81516001600160e01b031981168114611d4557600080fd5b6000602082840312156130c357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156130f3576130f36130ca565b500190565b60008282101561310a5761310a6130ca565b500390565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000825161314d818460208701613016565b9190910192915050565b602081526000611d45602083018461304256fea2646970667358221220e1eb2321685fb63a9aec2a407059955dbb014f9ba1598fed273d59a1889501d764736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"getDeposits\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nonces\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWhitelister\",\"inputs\":[{\"name\":\"newStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"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\":\"stakerStrategyShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"\",\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"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\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThirdPartyTransfersDisabled\",\"inputs\":[]}]", + Bin: "0x61010060405234801561001157600080fd5b50604051612bcf380380612bcf83398101604081905261003091610135565b6001600160a01b0380841660805280831660a052811660c05261005161005d565b50504660e05250610182565b600054610100900460ff16156100c95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013257600080fd5b50565b60008060006060848603121561014a57600080fd5b83516101558161011d565b60208501519093506101668161011d565b60408501519092506101778161011d565b809150509250925092565b60805160a05160c05160e0516129f86101d760003960006112df0152600061046e0152600061028501526000818161051a01528181610a3901528181610d8801528181610ddd015261169801526129f86000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063c6656702116100ad578063df5cf7231161007c578063df5cf72314610515578063e7a050aa1461053c578063f2fde38b1461054f578063f698da2514610562578063fabc1cbc1461056a57600080fd5b8063c6656702146104c9578063cbc2bd62146104dc578063cf756fdf146104ef578063df5b35471461050257600080fd5b8063b1344271116100e9578063b134427114610469578063b5d8b5b814610490578063c4623ea1146104a3578063c608c7f3146104b657600080fd5b80638da5cb5b1461040157806394f649dd14610412578063967fc0d2146104335780639b4da03d1461044657600080fd5b80635ac86ab71161019d5780637a7e0d921161016c5780637a7e0d92146103675780637ecebe0014610392578063886f1195146103b25780638b8aac3c146103c55780638c80d4e5146103ee57600080fd5b80635ac86ab7146103015780635c975abb14610334578063663c1de41461033c578063715018a61461035f57600080fd5b80634665bcda116101d95780634665bcda1461028057806348825e94146102bf5780634e5a4263146102e6578063595c6a67146102f957600080fd5b806310d67a2f1461020b578063136439dd1461022057806320606b701461023357806332e89ace1461026d575b600080fd5b61021e610219366004612397565b61057d565b005b61021e61022e3660046123b4565b610631565b61025a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61025a61027b3660046123e3565b61071c565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610264565b61025a7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61021e6102f43660046124f4565b610919565b61021e610952565b61032461030f36600461252d565b609854600160ff9092169190911b9081161490565b6040519015158152602001610264565b60985461025a565b61032461034a366004612397565b60d16020526000908152604090205460ff1681565b61021e610a1a565b61025a610375366004612550565b60cd60209081526000928352604080842090915290825290205481565b61025a6103a0366004612397565b60ca6020526000908152604090205481565b6097546102a7906001600160a01b031681565b61025a6103d3366004612397565b6001600160a01b0316600090815260ce602052604090205490565b61021e6103fc36600461257e565b610a2e565b6033546001600160a01b03166102a7565b610425610420366004612397565b610a88565b6040516102649291906125bf565b60cb546102a7906001600160a01b031681565b610324610454366004612397565b60d36020526000908152604090205460ff1681565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61021e61049e36600461268f565b610c08565b61021e6104b13660046126d1565b610d7d565b61021e6104c4366004612722565b610dd2565b61021e6104d7366004612397565b610e8b565b6102a76104ea366004612775565b610e9c565b61021e6104fd3660046126d1565b610ed4565b61021e6105103660046127a1565b611008565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61025a61054a36600461257e565b6111c9565b61021e61055d366004612397565b611265565b61025a6112db565b61021e6105783660046123b4565b611318565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190612812565b6001600160a01b0316336001600160a01b0316146106255760405163794821ff60e01b815260040160405180910390fd5b61062e81611420565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d919061282f565b6106ba57604051631d77d47760e21b815260040160405180910390fd5b609854818116146106de5760405163c61dca5d60e01b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60985460009081906001908116036107475760405163840a48d560e01b815260040160405180910390fd5b60026065540361079e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026065556001600160a01b038816600090815260d3602052604090205460ff16156107dd5760405163dc34227160e01b815260040160405180910390fd5b428410156107fe57604051630819bdcd60e01b815260040160405180910390fd5b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca90935290822060018501905591506108b66112db565b60405161190160f01b60208201526022810191909152604281018390526062016040516020818303038152906040528051906020012090506108f98882886114b0565b610905888c8c8c611599565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610944576040516320ba3ff960e21b815260040160405180910390fd5b61094e82826116fd565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be919061282f565b6109db57604051631d77d47760e21b815260040160405180910390fd5b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610a2261176b565b610a2c60006117c5565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a775760405163f739589b60e01b815260040160405180910390fd5b610a82838383611817565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610ac057610ac06123cd565b604051908082528060200260200182016040528015610ae9578160200160208202803683370190505b50905060005b82811015610b7a576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610b2e57610b2e61284c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610b6757610b6761284c565b6020908102919091010152600101610aef565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610bf657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bd8575b50505050509150935093505050915091565b60cb546001600160a01b03163314610c33576040516320ba3ff960e21b815260040160405180910390fd5b8060005b81811015610a825760d16000858584818110610c5557610c5561284c565b9050602002016020810190610c6a9190612397565b6001600160a01b0316815260208101919091526040016000205460ff1615610d7557600060d16000868685818110610ca457610ca461284c565b9050602002016020810190610cb99190612397565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610d1457610d1461284c565b9050602002016020810190610d299190612397565b6040516001600160a01b03909116815260200160405180910390a1610d75848483818110610d5957610d5961284c565b9050602002016020810190610d6e9190612397565b60006116fd565b600101610c37565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610dc65760405163f739589b60e01b815260040160405180910390fd5b610a82848484846118d8565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e1b5760405163f739589b60e01b815260040160405180910390fd5b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b5050505050505050565b610e9361176b565b61062e81611a5b565b60ce6020528160005260406000208181548110610eb857600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff1615808015610ef45750600054600160ff909116105b80610f0e5750303b158015610f0e575060005460ff166001145b610f715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610795565b6000805460ff191660011790558015610f94576000805461ff0019166101001790555b610f9c611ac4565b60c955610fa98383611b5b565b610fb2856117c5565b610fbb84611a5b565b8015611001576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b03163314611033576040516320ba3ff960e21b815260040160405180910390fd5b828114611053576040516343714afd60e01b815260040160405180910390fd5b8260005b818110156111c15760d160008787848181106110755761107561284c565b905060200201602081019061108a9190612397565b6001600160a01b0316815260208101919091526040016000205460ff166111b957600160d160008888858181106110c3576110c361284c565b90506020020160208101906110d89190612397565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8686838181106111335761113361284c565b90506020020160208101906111489190612397565b6040516001600160a01b03909116815260200160405180910390a16111b98686838181106111785761117861284c565b905060200201602081019061118d9190612397565b85858481811061119f5761119f61284c565b90506020020160208101906111b49190612862565b6116fd565b600101611057565b505050505050565b60985460009081906001908116036111f45760405163840a48d560e01b815260040160405180910390fd5b6002606554036112465760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610795565b600260655561125733868686611599565b600160655595945050505050565b61126d61176b565b6001600160a01b0381166112d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b61062e816117c5565b60007f0000000000000000000000000000000000000000000000000000000000000000460361130b575060c95490565b611313611ac4565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138f9190612812565b6001600160a01b0316336001600160a01b0316146113c05760405163794821ff60e01b815260040160405180910390fd5b6098541981196098541916146113e95760405163c61dca5d60e01b815260040160405180910390fd5b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610711565b6001600160a01b038116611447576040516339b190bb60e11b815260040160405180910390fd5b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561155e57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906114f090869086906004016128cf565b602060405180830381865afa15801561150d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153191906128e8565b6001600160e01b031916146115595760405163026aa43360e31b815260040160405180910390fd5b505050565b826001600160a01b03166115728383611bdc565b6001600160a01b03161461155957604051636d20896160e11b815260040160405180910390fd5b6001600160a01b038316600090815260d16020526040812054849060ff166115d457604051632efd965160e11b815260040160405180910390fd5b6115e96001600160a01b038516338786611c02565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165c9190612912565b915061166a868587856118d8565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156116dc57600080fd5b505af11580156116f0573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610a2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610795565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008160000361183a576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b03808516600090815260cd60209081526040808320938716835292905220548083111561188157604051634b18b19360e01b815260040160405180910390fd5b6001600160a01b03808616600090815260cd60209081526040808320938816835292905290812091849003918290558190036118cb576118c18585611c5c565b60019150506118d1565b60009150505b9392505050565b6001600160a01b0384166118ff576040516316f2ccc960e01b815260040160405180910390fd5b80600003611920576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b03808516600090815260cd6020908152604080832093861683529290529081205490036119c7576001600160a01b038416600090815260ce602090815260409091205410611988576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd60209081526040808320938616835292905290812080548392906119fe908490612941565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b0316158015611b7c57506001600160a01b03821615155b611b99576040516339b190bb60e11b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261094e82611420565b6000806000611beb8585611de5565b91509150611bf881611e53565b5090505b92915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a82908590612009565b6001600160a01b038216600090815260ce6020526040812054905b81811015611d76576001600160a01b03848116600090815260ce6020526040902080549185169183908110611cae57611cae61284c565b6000918252602090912001546001600160a01b031603611d6e576001600160a01b038416600090815260ce602052604090208054611cee90600190612954565b81548110611cfe57611cfe61284c565b60009182526020808320909101546001600160a01b03878116845260ce9092526040909220805491909216919083908110611d3b57611d3b61284c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611d76565b600101611c77565b818103611d9657604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b038416600090815260ce60205260409020805480611dbd57611dbd612967565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604103611e1b5760208301516040840151606085015160001a611e0f878285856120db565b94509450505050611e4c565b8251604003611e445760208301516040840151611e398683836121c8565b935093505050611e4c565b506000905060025b9250929050565b6000816004811115611e6757611e6761297d565b03611e6f5750565b6001816004811115611e8357611e8361297d565b03611ed05760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610795565b6002816004811115611ee457611ee461297d565b03611f315760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610795565b6003816004811115611f4557611f4561297d565b03611f9d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610795565b6004816004811115611fb157611fb161297d565b0361062e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610795565b600061205e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122019092919063ffffffff16565b805190915015611559578080602001905181019061207c919061282f565b6115595760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610795565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561211257506000905060036121bf565b8460ff16601b1415801561212a57508460ff16601c14155b1561213b57506000905060046121bf565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561218f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166121b8576000600192509250506121bf565b9150600090505b94509492505050565b6000806001600160ff1b038316816121e560ff86901c601b612941565b90506121f3878288856120db565b935093505050935093915050565b60606122108484600085612218565b949350505050565b6060824710156122795760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610795565b6001600160a01b0385163b6122d05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610795565b600080866001600160a01b031685876040516122ec9190612993565b60006040518083038185875af1925050503d8060008114612329576040519150601f19603f3d011682016040523d82523d6000602084013e61232e565b606091505b509150915061233e828286612349565b979650505050505050565b606083156123585750816118d1565b8251156123685782518084602001fd5b8160405162461bcd60e51b815260040161079591906129af565b6001600160a01b038116811461062e57600080fd5b6000602082840312156123a957600080fd5b81356118d181612382565b6000602082840312156123c657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156123fc57600080fd5b863561240781612382565b9550602087013561241781612382565b945060408701359350606087013561242e81612382565b92506080870135915060a087013567ffffffffffffffff81111561245157600080fd5b8701601f8101891361246257600080fd5b803567ffffffffffffffff81111561247c5761247c6123cd565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156124ab576124ab6123cd565b6040528181528282016020018b10156124c357600080fd5b816020840160208301376000602083830101528093505050509295509295509295565b801515811461062e57600080fd5b6000806040838503121561250757600080fd5b823561251281612382565b91506020830135612522816124e6565b809150509250929050565b60006020828403121561253f57600080fd5b813560ff811681146118d157600080fd5b6000806040838503121561256357600080fd5b823561256e81612382565b9150602083013561252281612382565b60008060006060848603121561259357600080fd5b833561259e81612382565b925060208401356125ae81612382565b929592945050506040919091013590565b6040808252835190820181905260009060208501906060840190835b818110156126025783516001600160a01b03168352602093840193909201916001016125db565b50508381036020808601919091528551808352918101925085019060005b8181101561263e578251845260209384019390920191600101612620565b50919695505050505050565b60008083601f84011261265c57600080fd5b50813567ffffffffffffffff81111561267457600080fd5b6020830191508360208260051b8501011115611e4c57600080fd5b600080602083850312156126a257600080fd5b823567ffffffffffffffff8111156126b957600080fd5b6126c58582860161264a565b90969095509350505050565b600080600080608085870312156126e757600080fd5b84356126f281612382565b9350602085013561270281612382565b9250604085013561271281612382565b9396929550929360600135925050565b6000806000806080858703121561273857600080fd5b843561274381612382565b9350602085013561275381612382565b925060408501359150606085013561276a81612382565b939692955090935050565b6000806040838503121561278857600080fd5b823561279381612382565b946020939093013593505050565b600080600080604085870312156127b757600080fd5b843567ffffffffffffffff8111156127ce57600080fd5b6127da8782880161264a565b909550935050602085013567ffffffffffffffff8111156127fa57600080fd5b6128068782880161264a565b95989497509550505050565b60006020828403121561282457600080fd5b81516118d181612382565b60006020828403121561284157600080fd5b81516118d1816124e6565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561287457600080fd5b81356118d1816124e6565b60005b8381101561289a578181015183820152602001612882565b50506000910152565b600081518084526128bb81602086016020860161287f565b601f01601f19169290920160200192915050565b82815260406020820152600061221060408301846128a3565b6000602082840312156128fa57600080fd5b81516001600160e01b0319811681146118d157600080fd5b60006020828403121561292457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115611bfc57611bfc61292b565b81810381811115611bfc57611bfc61292b565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600082516129a581846020870161287f565b9190910192915050565b6020815260006118d160208301846128a356fea264697066735822122048f06383f67c48e93b6417b2d646ef8b5c560dadc03cc906ab7625187877df9564736f6c634300081b0033", } // 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 3dc3ddcac..e8619211c 100644 --- a/pkg/bindings/StrategyManagerStorage/binding.go +++ b/pkg/bindings/StrategyManagerStorage/binding.go @@ -31,7 +31,7 @@ var ( // StrategyManagerStorageMetaData contains all meta data concerning the StrategyManagerStorage contract. var StrategyManagerStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"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\":\"nonces\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"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\":\"stakerStrategyShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"\",\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"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\":\"nonces\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"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\":\"stakerStrategyShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"\",\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"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\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThirdPartyTransfersDisabled\",\"inputs\":[]}]", } // StrategyManagerStorageABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StructuredLinkedList/binding.go b/pkg/bindings/StructuredLinkedList/binding.go index b291ef98d..13660369d 100644 --- a/pkg/bindings/StructuredLinkedList/binding.go +++ b/pkg/bindings/StructuredLinkedList/binding.go @@ -32,7 +32,7 @@ var ( // StructuredLinkedListMetaData contains all meta data concerning the StructuredLinkedList contract. var StructuredLinkedListMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200b0f3aa07997f25ddb2b0dd17a1b6104304d811d2cec7f2d2dfcae3e3d618f6964736f6c634300080c0033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122092539f140d3d409a503af099673213edeec0c3c7d33ea5f70caabce0a5a2076464736f6c634300081b0033", } // StructuredLinkedListABI is the input ABI used to generate the binding from. From e6bbf912d0b4480d9f958499831888a5870f5222 Mon Sep 17 00:00:00 2001 From: wadealexc Date: Thu, 12 Sep 2024 18:28:37 +0000 Subject: [PATCH 04/47] chore: dmgr error tweaks --- pkg/bindings/AVSDirectory/binding.go | 2 +- pkg/bindings/DelegationManager/binding.go | 4 +- .../DelegationManagerStorage/binding.go | 2 +- pkg/bindings/EigenPod/binding.go | 2 +- pkg/bindings/EigenPodManager/binding.go | 2 +- pkg/bindings/EigenStrategy/binding.go | 2 +- pkg/bindings/IDelegationManager/binding.go | 2 +- pkg/bindings/RewardsCoordinator/binding.go | 2 +- pkg/bindings/StrategyBase/binding.go | 2 +- pkg/bindings/StrategyBaseTVLLimits/binding.go | 2 +- pkg/bindings/StrategyFactory/binding.go | 2 +- pkg/bindings/StrategyManager/binding.go | 2 +- src/contracts/core/DelegationManager.sol | 51 +++++++----------- .../interfaces/IDelegationManager.sol | 54 ++++++++++--------- 14 files changed, 63 insertions(+), 68 deletions(-) diff --git a/pkg/bindings/AVSDirectory/binding.go b/pkg/bindings/AVSDirectory/binding.go index 507bc07ca..6ce82c72f 100644 --- a/pkg/bindings/AVSDirectory/binding.go +++ b/pkg/bindings/AVSDirectory/binding.go @@ -39,7 +39,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryMetaData contains all meta data concerning the AVSDirectory contract. var AVSDirectoryMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"enumIAVSDirectory.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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"InvalidAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b50604051611a17380380611a1783398101604081905261002f9161010e565b6001600160a01b03811660805261004461004e565b504660a05261013e565b600054610100900460ff16156100ba5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010c576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561012057600080fd5b81516001600160a01b038116811461013757600080fd5b9392505050565b60805160a0516118ad61016a6000396000610bff015260008181610324015261085f01526118ad6000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b1461037a578063f698da251461038d578063fabc1cbc1461039557600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a610155366004611406565b6103a8565b005b61015a61016a36600461142a565b61045c565b61015a61017d366004611443565b610547565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611484565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b6102286102083660046114b0565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906114ff565b61015a610676565b6101ea61024b366004611527565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a61073e565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba3660046115ba565b610752565b6101a96102cd3660046116af565b61099d565b61015a6102e0366004611406565b610a56565b61015a6102f33660046116f5565b610b3e565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000000000000000000000000000000000000000000081565b61015a61035436600461142a565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b61015a610388366004611406565b610b85565b6101a9610bfb565b61015a6103a336600461142a565b610c38565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041f9190611769565b6001600160a01b0316336001600160a01b0316146104505760405163794821ff60e01b815260040160405180910390fd5b61045981610d40565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190611786565b6104e557604051631d77d47760e21b815260040160405180910390fd5b606654818116146105095760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105675750600054600160ff909116105b806105815750303b158015610581575060005460ff166001145b6105e95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561060c576000805461ff0019166101001790555b6106168383610dd0565b61061e610e55565b60975561062a84610eec565b8015610670576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e29190611786565b6106ff57604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610746610f3e565b6107506000610eec565b565b60665460009060019081160361077b5760405163840a48d560e01b815260040160405180910390fd5b42826040015110156107a057604051630819bdcd60e01b815260040160405180910390fd5b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156107da576107da6114e9565b036107f85760405163ccea9e6f60e01b815260040160405180910390fd5b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff161561084057604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca9190611786565b6108e7576040516325ec6c1f60e01b815260040160405180910390fd5b60006108fd84338560200151866040015161099d565b905061090e84828560000151610f98565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b419161098f91906114ff565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610a13610bfb565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b606654600090600190811603610a7f5760405163840a48d560e01b815260040160405180910390fd5b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610ab957610ab96114e9565b14610ad75760405163ccea9e6f60e01b815260040160405180910390fd5b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b3291906114ff565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610b799291906117a8565b60405180910390a25050565b610b8d610f3e565b6001600160a01b038116610bf25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105e0565b61045981610eec565b60007f00000000000000000000000000000000000000000000000000000000000000004603610c2b575060975490565b610c33610e55565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caf9190611769565b6001600160a01b0316336001600160a01b031614610ce05760405163794821ff60e01b815260040160405180910390fd5b606654198119606654191614610d095760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161053c565b6001600160a01b038116610d67576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b0316158015610df157506001600160a01b03821615155b610e0e576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610e5182610d40565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e0565b6001600160a01b0383163b1561104657604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90610fd890869086906004016117d7565b602060405180830381865afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611019919061182c565b6001600160e01b031916146110415760405163026aa43360e31b815260040160405180910390fd5b505050565b826001600160a01b031661105a8383611081565b6001600160a01b03161461104157604051636d20896160e11b815260040160405180910390fd5b600080600061109085856110a7565b9150915061109d81611115565b5090505b92915050565b60008082516041036110dd5760208301516040840151606085015160001a6110d1878285856112cb565b9450945050505061110e565b825160400361110657602083015160408401516110fb8683836113b8565b93509350505061110e565b506000905060025b9250929050565b6000816004811115611129576111296114e9565b036111315750565b6001816004811115611145576111456114e9565b036111925760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016105e0565b60028160048111156111a6576111a66114e9565b036111f35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016105e0565b6003816004811115611207576112076114e9565b0361125f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016105e0565b6004816004811115611273576112736114e9565b036104595760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016105e0565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561130257506000905060036113af565b8460ff16601b1415801561131a57508460ff16601c14155b1561132b57506000905060046113af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561137f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a8576000600192509250506113af565b9150600090505b94509492505050565b6000806001600160ff1b038316816113d560ff86901c601b611856565b90506113e3878288856112cb565b935093505050935093915050565b6001600160a01b038116811461045957600080fd5b60006020828403121561141857600080fd5b8135611423816113f1565b9392505050565b60006020828403121561143c57600080fd5b5035919050565b60008060006060848603121561145857600080fd5b8335611463816113f1565b92506020840135611473816113f1565b929592945050506040919091013590565b6000806040838503121561149757600080fd5b82356114a2816113f1565b946020939093013593505050565b600080604083850312156114c357600080fd5b82356114ce816113f1565b915060208301356114de816113f1565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061152157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561153957600080fd5b813560ff8116811461142357600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156115835761158361154a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156115b2576115b261154a565b604052919050565b600080604083850312156115cd57600080fd5b82356115d8816113f1565b9150602083013567ffffffffffffffff8111156115f457600080fd5b83016060818603121561160657600080fd5b61160e611560565b813567ffffffffffffffff81111561162557600080fd5b8201601f8101871361163657600080fd5b803567ffffffffffffffff8111156116505761165061154a565b611663601f8201601f1916602001611589565b81815288602083850101111561167857600080fd5b8160208401602083013760006020928201830152835283810135908301525060409182013591810191909152919491935090915050565b600080600080608085870312156116c557600080fd5b84356116d0816113f1565b935060208501356116e0816113f1565b93969395505050506040820135916060013590565b6000806020838503121561170857600080fd5b823567ffffffffffffffff81111561171f57600080fd5b8301601f8101851361173057600080fd5b803567ffffffffffffffff81111561174757600080fd5b85602082840101111561175957600080fd5b6020919091019590945092505050565b60006020828403121561177b57600080fd5b8151611423816113f1565b60006020828403121561179857600080fd5b8151801515811461142357600080fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b828152604060208201526000825180604084015260005b8181101561180b57602081860181015160608684010152016117ee565b506000606082850101526060601f19601f8301168401019150509392505050565b60006020828403121561183e57600080fd5b81516001600160e01b03198116811461142357600080fd5b808201808211156110a157634e487b7160e01b600052601160045260246000fdfea2646970667358221220ec5dda6065c56e8f281dcafe4a6a7573434268c5ff2f6b31caeff6628bc8fa5664736f6c634300081b0033", + Bin: "0x60c060405234801561001057600080fd5b50604051611a17380380611a1783398101604081905261002f9161010e565b6001600160a01b03811660805261004461004e565b504660a05261013e565b600054610100900460ff16156100ba5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010c576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561012057600080fd5b81516001600160a01b038116811461013757600080fd5b9392505050565b60805160a0516118ad61016a6000396000610bff015260008181610324015261085f01526118ad6000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b1461037a578063f698da251461038d578063fabc1cbc1461039557600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a610155366004611406565b6103a8565b005b61015a61016a36600461142a565b61045c565b61015a61017d366004611443565b610547565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611484565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b6102286102083660046114b0565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906114ff565b61015a610676565b6101ea61024b366004611527565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a61073e565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba3660046115ba565b610752565b6101a96102cd3660046116af565b61099d565b61015a6102e0366004611406565b610a56565b61015a6102f33660046116f5565b610b3e565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000000000000000000000000000000000000000000081565b61015a61035436600461142a565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b61015a610388366004611406565b610b85565b6101a9610bfb565b61015a6103a336600461142a565b610c38565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041f9190611769565b6001600160a01b0316336001600160a01b0316146104505760405163794821ff60e01b815260040160405180910390fd5b61045981610d40565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190611786565b6104e557604051631d77d47760e21b815260040160405180910390fd5b606654818116146105095760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105675750600054600160ff909116105b806105815750303b158015610581575060005460ff166001145b6105e95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561060c576000805461ff0019166101001790555b6106168383610dd0565b61061e610e55565b60975561062a84610eec565b8015610670576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e29190611786565b6106ff57604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610746610f3e565b6107506000610eec565b565b60665460009060019081160361077b5760405163840a48d560e01b815260040160405180910390fd5b42826040015110156107a057604051630819bdcd60e01b815260040160405180910390fd5b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156107da576107da6114e9565b036107f85760405163ccea9e6f60e01b815260040160405180910390fd5b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff161561084057604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca9190611786565b6108e7576040516325ec6c1f60e01b815260040160405180910390fd5b60006108fd84338560200151866040015161099d565b905061090e84828560000151610f98565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b419161098f91906114ff565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610a13610bfb565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b606654600090600190811603610a7f5760405163840a48d560e01b815260040160405180910390fd5b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610ab957610ab96114e9565b14610ad75760405163ccea9e6f60e01b815260040160405180910390fd5b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b3291906114ff565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610b799291906117a8565b60405180910390a25050565b610b8d610f3e565b6001600160a01b038116610bf25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105e0565b61045981610eec565b60007f00000000000000000000000000000000000000000000000000000000000000004603610c2b575060975490565b610c33610e55565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caf9190611769565b6001600160a01b0316336001600160a01b031614610ce05760405163794821ff60e01b815260040160405180910390fd5b606654198119606654191614610d095760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161053c565b6001600160a01b038116610d67576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b0316158015610df157506001600160a01b03821615155b610e0e576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610e5182610d40565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e0565b6001600160a01b0383163b1561104657604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90610fd890869086906004016117d7565b602060405180830381865afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611019919061182c565b6001600160e01b031916146110415760405163026aa43360e31b815260040160405180910390fd5b505050565b826001600160a01b031661105a8383611081565b6001600160a01b03161461104157604051636d20896160e11b815260040160405180910390fd5b600080600061109085856110a7565b9150915061109d81611115565b5090505b92915050565b60008082516041036110dd5760208301516040840151606085015160001a6110d1878285856112cb565b9450945050505061110e565b825160400361110657602083015160408401516110fb8683836113b8565b93509350505061110e565b506000905060025b9250929050565b6000816004811115611129576111296114e9565b036111315750565b6001816004811115611145576111456114e9565b036111925760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016105e0565b60028160048111156111a6576111a66114e9565b036111f35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016105e0565b6003816004811115611207576112076114e9565b0361125f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016105e0565b6004816004811115611273576112736114e9565b036104595760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016105e0565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561130257506000905060036113af565b8460ff16601b1415801561131a57508460ff16601c14155b1561132b57506000905060046113af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561137f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a8576000600192509250506113af565b9150600090505b94509492505050565b6000806001600160ff1b038316816113d560ff86901c601b611856565b90506113e3878288856112cb565b935093505050935093915050565b6001600160a01b038116811461045957600080fd5b60006020828403121561141857600080fd5b8135611423816113f1565b9392505050565b60006020828403121561143c57600080fd5b5035919050565b60008060006060848603121561145857600080fd5b8335611463816113f1565b92506020840135611473816113f1565b929592945050506040919091013590565b6000806040838503121561149757600080fd5b82356114a2816113f1565b946020939093013593505050565b600080604083850312156114c357600080fd5b82356114ce816113f1565b915060208301356114de816113f1565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061152157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561153957600080fd5b813560ff8116811461142357600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156115835761158361154a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156115b2576115b261154a565b604052919050565b600080604083850312156115cd57600080fd5b82356115d8816113f1565b9150602083013567ffffffffffffffff8111156115f457600080fd5b83016060818603121561160657600080fd5b61160e611560565b813567ffffffffffffffff81111561162557600080fd5b8201601f8101871361163657600080fd5b803567ffffffffffffffff8111156116505761165061154a565b611663601f8201601f1916602001611589565b81815288602083850101111561167857600080fd5b8160208401602083013760006020928201830152835283810135908301525060409182013591810191909152919491935090915050565b600080600080608085870312156116c557600080fd5b84356116d0816113f1565b935060208501356116e0816113f1565b93969395505050506040820135916060013590565b6000806020838503121561170857600080fd5b823567ffffffffffffffff81111561171f57600080fd5b8301601f8101851361173057600080fd5b803567ffffffffffffffff81111561174757600080fd5b85602082840101111561175957600080fd5b6020919091019590945092505050565b60006020828403121561177b57600080fd5b8151611423816113f1565b60006020828403121561179857600080fd5b8151801515811461142357600080fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b828152604060208201526000825180604084015260005b8181101561180b57602081860181015160608684010152016117ee565b506000606082850101526060601f19601f8301168401019150509392505050565b60006020828403121561183e57600080fd5b81516001600160e01b03198116811461142357600080fd5b808201808211156110a157634e487b7160e01b600052601160045260246000fdfea2646970667358221220c74af5bb9516ee82aa09e6a5df65994aa3815df73ae3243b3a01ccae91a3408b64736f6c634300081b0033", } // AVSDirectoryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/DelegationManager/binding.go b/pkg/bindings/DelegationManager/binding.go index e0db457b5..1e2bd72ed 100644 --- a/pkg/bindings/DelegationManager/binding.go +++ b/pkg/bindings/DelegationManager/binding.go @@ -62,8 +62,8 @@ type ISignatureUtilsSignatureWithExpiry 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\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"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\":\"StakerOptOutWindowBlocksCannotDecrease\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotStaker\",\"inputs\":[]}]", - Bin: "0x61010060405234801561001157600080fd5b50604051614fd0380380614fd083398101604081905261003091610135565b6001600160a01b0380841660805280821660c052821660a05261005161005d565b50504660e05250610182565b600054610100900460ff16156100c95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013257600080fd5b50565b60008060006060848603121561014a57600080fd5b83516101558161011d565b60208501519093506101668161011d565b60408501519092506101778161011d565b809150509250925092565b60805160a05160c05160e051614dba61021660003960006120e50152600081816105b101528181610f0401528181611232015281816118fa01528181612312015281816134cb01526138e1015260006107620152600081816104f901528181610ed2015281816112000152818161198e015281816123df015281816124b3015281816135f101526139870152614dba6000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a610355366004613d90565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a2366004613df6565b6109c8565b6103ba6103b5366004613d90565b610a8a565b6040516103649190613e51565b6103da6103d5366004613ee2565b610d36565b005b6103da6103ea366004613f35565b610e13565b6103da6103fd366004613f59565b610ec7565b6103da610410366004613f9a565b610f7f565b6103da610423366004613fb3565b61106a565b61035a610436366004613f35565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004613f59565b61107e565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614022565b6110ac565b6103da6104bc366004613f59565b6111f5565b61035a6104cf366004613f35565b609b6020526000908152604090205481565b6103da6104ef3660046140cd565b6112a6565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b610541366004613f35565b6001600160a01b039081166000908152609960205260409020600101541690565b610575610570366004613f35565b6113da565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da6113fa565b61035a6105f33660046143e4565b6114c2565b610575610606366004614420565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614451565b6114f2565b6103da610644366004613f9a565b61158c565b61051b610657366004613f35565b609a602052600090815260409020546001600160a01b031681565b610575610680366004613f35565b61159d565b6103da6115d4565b61035a61069b3660046144e1565b609860209081526000928352604080842090915290825290205481565b6103da6106c63660046145c5565b6115e8565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd366004614659565b6116db565b60405161036491906146e4565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da6107383660046146f7565b6117ad565b61035a61074b366004613f35565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004613f9a565b609e6020526000908152604090205460ff1681565b6105756107b536600461472c565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec366004613f35565b60a16020526000908152604090205481565b61086e61080c366004613f35565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b2366004614758565b61181a565b61035a62034bc081565b6108d46108cf366004613f35565b6118d3565b6040516103649291906147db565b6103ba6108f0366004613f35565b611c8a565b6103da610903366004614800565b611fe2565b6103da610916366004614859565b61203b565b6103da610929366004613f35565b61206b565b61035a6120e1565b6103da610944366004613f9a565b61211e565b609d54600090815b838110156109be57600060a1600087878581811061097157610971614875565b90506020020160208101906109869190613f35565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b50600101610951565b5090505b92915050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a466120e1565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b606654606090600190600290811603610ab65760405163840a48d560e01b815260040160405180910390fd5b6000836001600160401b03811115610ad057610ad0614180565b604051908082528060200260200182016040528015610af9578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610d2b57868682818110610b3457610b34614875565b9050602002810190610b46919061488b565b610b549060208101906148ab565b9050878783818110610b6857610b68614875565b9050602002810190610b7a919061488b565b610b8490806148ab565b905014610ba4576040516343714afd60e01b815260040160405180910390fd5b33878783818110610bb757610bb7614875565b9050602002810190610bc9919061488b565b610bda906060810190604001613f35565b6001600160a01b031614610c01576040516330c4716960e21b815260040160405180910390fd5b610d063383898985818110610c1857610c18614875565b9050602002810190610c2a919061488b565b610c3b906060810190604001613f35565b8a8a86818110610c4d57610c4d614875565b9050602002810190610c5f919061488b565b610c6990806148ab565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610caf57610caf614875565b9050602002810190610cc1919061488b565b610ccf9060208101906148ab565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061222692505050565b838281518110610d1857610d18614875565b6020908102919091010152600101610b1a565b509095945050505050565b610d3f336113da565b15610d5d57604051633bf2b50360e11b815260040160405180910390fd5b610d673384612660565b604080518082019091526060815260006020820152610d893380836000612853565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610dc291906148f4565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610e0592919061494b565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a919061497a565b6001600160a01b0316336001600160a01b031614610ebb5760405163794821ff60e01b815260040160405180910390fd5b610ec481612a3f565b50565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610f265750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610f435760405163045206a560e21b815260040160405180910390fd5b610f4c836113da565b15610f7a576001600160a01b038084166000908152609a602052604090205416610f7881858585612acf565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190614997565b61100857604051631d77d47760e21b815260040160405180910390fd5b6066548181161461102c5760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b611072612b4a565b610f7884848484612ba4565b6001600160a01b0383166000908152609b60205260408120546110a38582868661181a565b95945050505050565b600054610100900460ff16158080156110cc5750600054600160ff909116105b806110e65750303b1580156110e6575060005460ff166001145b61114e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015611171576000805461ff0019166101001790555b61117b8888612dc4565b611183612e49565b60975561118f89612ee0565b61119886612f32565b6111a485858585612ba4565b80156111ea576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112545750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6112715760405163045206a560e21b815260040160405180910390fd5b61127a836113da565b15610f7a576001600160a01b038084166000908152609a602052604090205416610f788185858561302c565b6066546002906004908116036112cf5760405163840a48d560e01b815260040160405180910390fd5b600260c954036113215760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611145565b600260c95560005b888110156113c9576113c18a8a8381811061134657611346614875565b905060200281019061135891906149b4565b89898481811061136a5761136a614875565b905060200281019061137c91906148ab565b89898681811061138e5761138e614875565b905060200201358888878181106113a7576113a7614875565b90506020020160208101906113bc91906149ca565b6130a7565b600101611329565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190614997565b61148357604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016114d59190614a66565b604051602081830303815290604052805190602001209050919050565b60665460029060049081160361151b5760405163840a48d560e01b815260040160405180910390fd5b600260c9540361156d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611145565b600260c95561157f86868686866130a7565b5050600160c95550505050565b611594612b4a565b610ec481612f32565b60006001600160a01b038216158015906109c25750506001600160a01b039081166000818152609a60205260409020549091161490565b6115dc612b4a565b6115e66000612ee0565b565b428360200151101561160d57604051630819bdcd60e01b815260040160405180910390fd5b611616856113da565b1561163457604051633bf2b50360e11b815260040160405180910390fd5b61163d8461159d565b61165a576040516325ec6c1f60e01b815260040160405180910390fd5b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611696878388886020015161181a565b6001600160a01b0388166000908152609b6020526040902060018401905585519091506116c690889083906137c2565b6116d287878686612853565b50505050505050565b6060600082516001600160401b038111156116f8576116f8614180565b604051908082528060200260200182016040528015611721578160200160208202803683370190505b50905060005b83518110156109be576001600160a01b0385166000908152609860205260408120855190919086908490811061175f5761175f614875565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061179a5761179a614875565b6020908102919091010152600101611727565b6117b63361159d565b6117d3576040516325ec6c1f60e01b815260040160405180910390fd5b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090838360405161180e92919061494b565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c09092019092528051910120600090816118906120e1565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119679190614a79565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa1580156119d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119ff9190810190614af0565b9150915060008313611a1657909590945092505050565b6060808351600003611acf576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611a8a57611a8a614875565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611abe57611abe614875565b602002602001018181525050611c7d565b8351611adc906001614bc7565b6001600160401b03811115611af357611af3614180565b604051908082528060200260200182016040528015611b1c578160200160208202803683370190505b50915081516001600160401b03811115611b3857611b38614180565b604051908082528060200260200182016040528015611b61578160200160208202803683370190505b50905060005b8451811015611bfb57848181518110611b8257611b82614875565b6020026020010151838281518110611b9c57611b9c614875565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611bce57611bce614875565b6020026020010151828281518110611be857611be8614875565b6020908102919091010152600101611b67565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611c209190614bda565b81518110611c3057611c30614875565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611c609190614bda565b81518110611c7057611c70614875565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811603611cb65760405163840a48d560e01b815260040160405180910390fd5b611cbf836113da565b611cdc5760405163a5c7c44560e01b815260040160405180910390fd5b611ce58361159d565b15611d03576040516311ca333560e31b815260040160405180910390fd5b6001600160a01b038316611d2a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b038084166000818152609a602052604090205490911690331480611d5d5750336001600160a01b038216145b80611d8457506001600160a01b038181166000908152609960205260409020600101541633145b611da157604051631e499a2360e11b815260040160405180910390fd5b600080611dad866118d3565b9092509050336001600160a01b03871614611e0357826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040812080546001600160a01b031916905582519003611e87576040805160008152602081019091529450611fd9565b81516001600160401b03811115611ea057611ea0614180565b604051908082528060200260200182016040528015611ec9578160200160208202803683370190505b50945060005b8251811015611fd757604080516001808252818301909252600091602080830190803683375050604080516001808252818301909252929350600092915060208083019080368337019050509050848381518110611f2f57611f2f614875565b602002602001015182600081518110611f4a57611f4a614875565b60200260200101906001600160a01b031690816001600160a01b031681525050838381518110611f7c57611f7c614875565b602002602001015181600081518110611f9757611f97614875565b602002602001018181525050611fb089878b8585612226565b888481518110611fc257611fc2614875565b60209081029190910101525050600101611ecf565b505b50505050919050565b611feb336113da565b1561200957604051633bf2b50360e11b815260040160405180910390fd5b6120128361159d565b61202f576040516325ec6c1f60e01b815260040160405180910390fd5b610f7a33848484612853565b6120443361159d565b612061576040516325ec6c1f60e01b815260040160405180910390fd5b610ec43382612660565b612073612b4a565b6001600160a01b0381166120d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611145565b610ec481612ee0565b60007f00000000000000000000000000000000000000000000000000000000000000004603612111575060975490565b612119612e49565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612195919061497a565b6001600160a01b0316336001600160a01b0316146121c65760405163794821ff60e01b815260040160405180910390fd5b6066541981196066541916146121ef5760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161105f565b60006001600160a01b03861661224f576040516339b190bb60e11b815260040160405180910390fd5b82516000036122715760405163796cc52560e01b815260040160405180910390fd5b60005b835181101561256e576001600160a01b038616156122ca576122ca86888684815181106122a3576122a3614875565b60200260200101518685815181106122bd576122bd614875565b6020026020010151612acf565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106122fa576122fa614875565b60200260200101516001600160a01b0316036123c2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb898885848151811061235257612352614875565b60200260200101516040518363ffffffff1660e01b815260040161238b9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b1580156123a557600080fd5b505af11580156123b9573d6000803e3d6000fd5b50505050612566565b846001600160a01b0316876001600160a01b0316148061249457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d85838151811061241e5761241e614875565b60200260200101516040518263ffffffff1660e01b815260040161245191906001600160a01b0391909116815260200190565b602060405180830381865afa15801561246e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124929190614997565b155b6124b1576040516330c4716960e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e5888684815181106124f3576124f3614875565b602002602001015186858151811061250d5761250d614875565b60200260200101516040518463ffffffff1660e01b815260040161253393929190614bed565b600060405180830381600087803b15801561254d57600080fd5b505af1158015612561573d6000803e3d6000fd5b505050505b600101612274565b506001600160a01b0386166000908152609f6020526040812080549182919061259683614c11565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff16815260200186815260200185815250905060006125fe826114c2565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f99061264c9083908590614c2a565b60405180910390a198975050505050505050565b6213c6806126746060830160408401614c43565b63ffffffff1611156127295760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401611145565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff16906127659060608401908401614c43565b63ffffffff1610156127fb5760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401611145565b6001600160a01b0382166000908152609960205260409020819061281f8282614c80565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac9061180e9084906148f4565b60665460009060019081160361287c5760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b038085166000908152609960205260409020600101541680158015906128b25750336001600160a01b03821614155b80156128c75750336001600160a01b03861614155b1561298a5742846020015110156128f157604051630819bdcd60e01b815260040160405180910390fd5b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff161561293657604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516129779088908890859088906109c8565b9050612988828287600001516137c2565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806129e9886118d3565b9150915060005b82518110156111ea57612a37888a858481518110612a1057612a10614875565b6020026020010151858581518110612a2a57612a2a614875565b602002602001015161302c565b6001016129f0565b6001600160a01b038116612a66576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290612b06908490614bda565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610e0593929190614bed565b6033546001600160a01b031633146115e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611145565b828114612c2c5760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401611145565b8260005b81811015612dbc576000868683818110612c4c57612c4c614875565b9050602002016020810190612c619190613f35565b6001600160a01b038116600090815260a16020526040812054919250868685818110612c8f57612c8f614875565b90506020020135905062034bc0811115612d535760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401611145565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806001019050612c30565b505050505050565b6065546001600160a01b0316158015612de557506001600160a01b03821615155b612e02576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2612e4582612a3f565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc0811115612feb5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401611145565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613063908490614bc7565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610e0593929190614bed565b60006130b56105f387614ce3565b6000818152609e602052604090205490915060ff166130e7576040516387c9d21960e01b815260040160405180910390fd5b609d5443906130fc60a0890160808a01614c43565b63ffffffff1661310c9190614bc7565b111561312b576040516378f67ae160e11b815260040160405180910390fd5b61313b6060870160408801613f35565b6001600160a01b0316336001600160a01b03161461316c576040516316110d3560e21b815260040160405180910390fd5b81156131a05761317f60a08701876148ab565b851490506131a0576040516343714afd60e01b815260040160405180910390fd5b6000818152609e60205260409020805460ff1916905581156133065760005b6131cc60a08801886148ab565b9050811015613300574360a160006131e760a08b018b6148ab565b858181106131f7576131f7614875565b905060200201602081019061320c9190613f35565b6001600160a01b0316815260208101919091526040016000205461323660a08a0160808b01614c43565b63ffffffff166132469190614bc7565b1115613265576040516378f67ae160e11b815260040160405180910390fd5b6132f86132756020890189613f35565b3361328360a08b018b6148ab565b8581811061329357613293614875565b90506020020160208101906132a89190613f35565b6132b560c08c018c6148ab565b868181106132c5576132c5614875565b905060200201358a8a878181106132de576132de614875565b90506020020160208101906132f39190613f35565b6138a6565b6001016131bf565b50613787565b336000908152609a60205260408120546001600160a01b0316905b61332e60a08901896148ab565b9050811015613784574360a1600061334960a08c018c6148ab565b8581811061335957613359614875565b905060200201602081019061336e9190613f35565b6001600160a01b0316815260208101919091526040016000205461339860a08b0160808c01614c43565b63ffffffff166133a89190614bc7565b11156134595760405162461bcd60e51b815260206004820152606e60248201527f44656c65676174696f6e4d616e616765722e5f636f6d706c657465517565756560448201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360648201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260848201526d207468697320737472617465677960901b60a482015260c401611145565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061347b60a08a018a6148ab565b8381811061348b5761348b614875565b90506020020160208101906134a09190613f35565b6001600160a01b0316036135ef5760006134bd60208a018a613f35565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c836134fe60c08e018e6148ab565b8781811061350e5761350e614875565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135869190614a79565b6001600160a01b038084166000908152609a60205260409020549192501680156135e7576135e781846135bc60a08f018f6148ab565b888181106135cc576135cc614875565b90506020020160208101906135e19190613f35565b8561302c565b50505061377c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061363157613631614875565b90506020020160208101906136469190613f35565b61365360a08d018d6148ab565b8681811061366357613663614875565b90506020020160208101906136789190613f35565b61368560c08e018e6148ab565b8781811061369557613695614875565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156136f557600080fd5b505af1158015613709573d6000803e3d6000fd5b505050506001600160a01b0382161561377c5761377c823361372e60a08c018c6148ab565b8581811061373e5761373e614875565b90506020020160208101906137539190613f35565b61376060c08d018d6148ab565b8681811061377057613770614875565b9050602002013561302c565b600101613321565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b1561386b57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906138029086908690600401614cef565b602060405180830381865afa15801561381f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138439190614d44565b6001600160e01b03191614610f7a5760405163026aa43360e31b815260040160405180910390fd5b826001600160a01b031661387f83836139e6565b6001600160a01b031614610f7a57604051636d20896160e11b815260040160405180910390fd5b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b038416016139515760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b13009061391a90889088908790600401614bed565b600060405180830381600087803b15801561393457600080fd5b505af1158015613948573d6000803e3d6000fd5b505050506139df565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b1580156139cb57600080fd5b505af11580156111ea573d6000803e3d6000fd5b5050505050565b60008060006139f58585613a02565b915091506109be81613a70565b6000808251604103613a385760208301516040840151606085015160001a613a2c87828585613c26565b94509450505050613a69565b8251604003613a615760208301516040840151613a56868383613d13565b935093505050613a69565b506000905060025b9250929050565b6000816004811115613a8457613a84614d6e565b03613a8c5750565b6001816004811115613aa057613aa0614d6e565b03613aed5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611145565b6002816004811115613b0157613b01614d6e565b03613b4e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611145565b6003816004811115613b6257613b62614d6e565b03613bba5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611145565b6004816004811115613bce57613bce614d6e565b03610ec45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401611145565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613c5d5750600090506003613d0a565b8460ff16601b14158015613c7557508460ff16601c14155b15613c865750600090506004613d0a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613cda573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613d0357600060019250925050613d0a565b9150600090505b94509492505050565b6000806001600160ff1b03831681613d3060ff86901c601b614bc7565b9050613d3e87828885613c26565b935093505050935093915050565b60008083601f840112613d5e57600080fd5b5081356001600160401b03811115613d7557600080fd5b6020830191508360208260051b8501011115613a6957600080fd5b60008060208385031215613da357600080fd5b82356001600160401b03811115613db957600080fd5b613dc585828601613d4c565b90969095509350505050565b6001600160a01b0381168114610ec457600080fd5b8035613df181613dd1565b919050565b600080600080600060a08688031215613e0e57600080fd5b8535613e1981613dd1565b94506020860135613e2981613dd1565b93506040860135613e3981613dd1565b94979396509394606081013594506080013592915050565b602080825282518282018190526000918401906040840190835b81811015610d2b578351835260209384019390920191600101613e6b565b600060608284031215613e9b57600080fd5b50919050565b60008083601f840112613eb357600080fd5b5081356001600160401b03811115613eca57600080fd5b602083019150836020828501011115613a6957600080fd5b600080600060808486031215613ef757600080fd5b613f018585613e89565b925060608401356001600160401b03811115613f1c57600080fd5b613f2886828701613ea1565b9497909650939450505050565b600060208284031215613f4757600080fd5b8135613f5281613dd1565b9392505050565b600080600060608486031215613f6e57600080fd5b8335613f7981613dd1565b92506020840135613f8981613dd1565b929592945050506040919091013590565b600060208284031215613fac57600080fd5b5035919050565b60008060008060408587031215613fc957600080fd5b84356001600160401b03811115613fdf57600080fd5b613feb87828801613d4c565b90955093505060208501356001600160401b0381111561400a57600080fd5b61401687828801613d4c565b95989497509550505050565b60008060008060008060008060c0898b03121561403e57600080fd5b883561404981613dd1565b9750602089013561405981613dd1565b9650604089013595506060890135945060808901356001600160401b0381111561408257600080fd5b61408e8b828c01613d4c565b90955093505060a08901356001600160401b038111156140ad57600080fd5b6140b98b828c01613d4c565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b0312156140e957600080fd5b88356001600160401b038111156140ff57600080fd5b61410b8b828c01613d4c565b90995097505060208901356001600160401b0381111561412a57600080fd5b6141368b828c01613d4c565b90975095505060408901356001600160401b0381111561415557600080fd5b6141618b828c01613d4c565b90955093505060608901356001600160401b038111156140ad57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b03811182821017156141b8576141b8614180565b60405290565b604080519081016001600160401b03811182821017156141b8576141b8614180565b604051601f8201601f191681016001600160401b038111828210171561420857614208614180565b604052919050565b63ffffffff81168114610ec457600080fd5b8035613df181614210565b60006001600160401b0382111561424657614246614180565b5060051b60200190565b600082601f83011261426157600080fd5b813561427461426f8261422d565b6141e0565b8082825260208201915060208360051b86010192508583111561429657600080fd5b602085015b838110156142bc5780356142ae81613dd1565b83526020928301920161429b565b5095945050505050565b600082601f8301126142d757600080fd5b81356142e561426f8261422d565b8082825260208201915060208360051b86010192508583111561430757600080fd5b602085015b838110156142bc57803583526020928301920161430c565b600060e0828403121561433657600080fd5b61433e614196565b905061434982613de6565b815261435760208301613de6565b602082015261436860408301613de6565b60408201526060828101359082015261438360808301614222565b608082015260a08201356001600160401b038111156143a157600080fd5b6143ad84828501614250565b60a08301525060c08201356001600160401b038111156143cc57600080fd5b6143d8848285016142c6565b60c08301525092915050565b6000602082840312156143f657600080fd5b81356001600160401b0381111561440c57600080fd5b61441884828501614324565b949350505050565b60006020828403121561443257600080fd5b813560ff81168114613f5257600080fd5b8015158114610ec457600080fd5b60008060008060006080868803121561446957600080fd5b85356001600160401b0381111561447f57600080fd5b860160e0818903121561449157600080fd5b945060208601356001600160401b038111156144ac57600080fd5b6144b888828901613d4c565b9095509350506040860135915060608601356144d381614443565b809150509295509295909350565b600080604083850312156144f457600080fd5b82356144ff81613dd1565b9150602083013561450f81613dd1565b809150509250929050565b60006040828403121561452c57600080fd5b6145346141be565b905081356001600160401b0381111561454c57600080fd5b8201601f8101841361455d57600080fd5b80356001600160401b0381111561457657614576614180565b614589601f8201601f19166020016141e0565b81815285602083850101111561459e57600080fd5b81602084016020830137600060209282018301528352928301359282019290925292915050565b600080600080600060a086880312156145dd57600080fd5b85356145e881613dd1565b945060208601356145f881613dd1565b935060408601356001600160401b0381111561461357600080fd5b61461f8882890161451a565b93505060608601356001600160401b0381111561463b57600080fd5b6146478882890161451a565b95989497509295608001359392505050565b6000806040838503121561466c57600080fd5b823561467781613dd1565b915060208301356001600160401b0381111561469257600080fd5b61469e85828601614250565b9150509250929050565b600081518084526020840193506020830160005b828110156146da5781518652602095860195909101906001016146bc565b5093949350505050565b602081526000613f5260208301846146a8565b6000806020838503121561470a57600080fd5b82356001600160401b0381111561472057600080fd5b613dc585828601613ea1565b6000806040838503121561473f57600080fd5b823561474a81613dd1565b946020939093013593505050565b6000806000806080858703121561476e57600080fd5b843561477981613dd1565b935060208501359250604085013561479081613dd1565b9396929550929360600135925050565b600081518084526020840193506020830160005b828110156146da5781516001600160a01b03168652602095860195909101906001016147b4565b6040815260006147ee60408301856147a0565b82810360208401526110a381856146a8565b60008060006060848603121561481557600080fd5b833561482081613dd1565b925060208401356001600160401b0381111561483b57600080fd5b6148478682870161451a565b93969395505050506040919091013590565b60006060828403121561486b57600080fd5b613f528383613e89565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126148a157600080fd5b9190910192915050565b6000808335601e198436030181126148c257600080fd5b8301803591506001600160401b038211156148dc57600080fd5b6020019150600581901b3603821315613a6957600080fd5b60608101823561490381613dd1565b6001600160a01b03168252602083013561491c81613dd1565b6001600160a01b03166020830152604083013561493881614210565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561498c57600080fd5b8151613f5281613dd1565b6000602082840312156149a957600080fd5b8151613f5281614443565b6000823560de198336030181126148a157600080fd5b6000602082840312156149dc57600080fd5b8135613f5281614443565b80516001600160a01b0390811683526020808301518216908401526040808301519091169083015260608082015190830152608080820151600091614a339085018263ffffffff169052565b5060a082015160e060a0850152614a4d60e08501826147a0565b905060c083015184820360c08601526110a382826146a8565b602081526000613f5260208301846149e7565b600060208284031215614a8b57600080fd5b5051919050565b600082601f830112614aa357600080fd5b8151614ab161426f8261422d565b8082825260208201915060208360051b860101925085831115614ad357600080fd5b602085015b838110156142bc578051835260209283019201614ad8565b60008060408385031215614b0357600080fd5b82516001600160401b03811115614b1957600080fd5b8301601f81018513614b2a57600080fd5b8051614b3861426f8261422d565b8082825260208201915060208360051b850101925087831115614b5a57600080fd5b6020840193505b82841015614b85578351614b7481613dd1565b825260209384019390910190614b61565b8095505050505060208301516001600160401b03811115614ba557600080fd5b61469e85828601614a92565b634e487b7160e01b600052601160045260246000fd5b808201808211156109c2576109c2614bb1565b818103818111156109c2576109c2614bb1565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060018201614c2357614c23614bb1565b5060010190565b82815260406020820152600061441860408301846149e7565b600060208284031215614c5557600080fd5b8135613f5281614210565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135614c8b81613dd1565b614c958183614c60565b50600181016020830135614ca881613dd1565b614cb28183614c60565b506040830135614cc181614210565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006109c23683614324565b828152604060208201526000825180604084015260005b81811015614d235760208186018101516060868401015201614d06565b506000606082850101526060601f19601f8301168401019150509392505050565b600060208284031215614d5657600080fd5b81516001600160e01b031981168114613f5257600080fd5b634e487b7160e01b600052602160045260246000fdfea26469706673582212201dd04025af6000406356d526b571e26e33ee1c6c1126fe4e303d250f965df9b864736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotCurrentlyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureSaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksCannotDecrease\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotStaker\",\"inputs\":[]}]", + Bin: "0x61010060405234801561001157600080fd5b50604051614ca9380380614ca983398101604081905261003091610135565b6001600160a01b0380841660805280821660c052821660a05261005161005d565b50504660e05250610182565b600054610100900460ff16156100c95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013257600080fd5b50565b60008060006060848603121561014a57600080fd5b83516101558161011d565b60208501519093506101668161011d565b60408501519092506101778161011d565b809150509250925092565b60805160a05160c05160e051614a9361021660003960006120e50152600081816105b101528181610f0401528181611232015281816118fa01528181612312015281816131a401526135ba015260006107620152600081816104f901528181610ed2015281816112000152818161198e015281816123df015281816124b3015281816132ca01526136600152614a936000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a610355366004613a69565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a2366004613acf565b6109c8565b6103ba6103b5366004613a69565b610a8a565b6040516103649190613b2a565b6103da6103d5366004613bbb565b610d36565b005b6103da6103ea366004613c0e565b610e13565b6103da6103fd366004613c32565b610ec7565b6103da610410366004613c73565b610f7f565b6103da610423366004613c8c565b61106a565b61035a610436366004613c0e565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004613c32565b61107e565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004613cfb565b6110ac565b6103da6104bc366004613c32565b6111f5565b61035a6104cf366004613c0e565b609b6020526000908152604090205481565b6103da6104ef366004613da6565b6112a6565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b610541366004613c0e565b6001600160a01b039081166000908152609960205260409020600101541690565b610575610570366004613c0e565b6113da565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da6113fa565b61035a6105f33660046140bd565b6114c2565b6105756106063660046140f9565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da61063136600461412a565b6114f2565b6103da610644366004613c73565b61158c565b61051b610657366004613c0e565b609a602052600090815260409020546001600160a01b031681565b610575610680366004613c0e565b61159d565b6103da6115d4565b61035a61069b3660046141ba565b609860209081526000928352604080842090915290825290205481565b6103da6106c636600461429e565b6115e8565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd366004614332565b6116db565b60405161036491906143bd565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da6107383660046143d0565b6117ad565b61035a61074b366004613c0e565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004613c73565b609e6020526000908152604090205460ff1681565b6105756107b5366004614405565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec366004613c0e565b60a16020526000908152604090205481565b61086e61080c366004613c0e565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b2366004614431565b61181a565b61035a62034bc081565b6108d46108cf366004613c0e565b6118d3565b6040516103649291906144b4565b6103ba6108f0366004613c0e565b611c8a565b6103da6109033660046144d9565b611fe2565b6103da610916366004614532565b61203b565b6103da610929366004613c0e565b61206b565b61035a6120e1565b6103da610944366004613c73565b61211e565b609d54600090815b838110156109be57600060a160008787858181106109715761097161454e565b90506020020160208101906109869190613c0e565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b50600101610951565b5090505b92915050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a466120e1565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b606654606090600190600290811603610ab65760405163840a48d560e01b815260040160405180910390fd5b6000836001600160401b03811115610ad057610ad0613e59565b604051908082528060200260200182016040528015610af9578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610d2b57868682818110610b3457610b3461454e565b9050602002810190610b469190614564565b610b54906020810190614584565b9050878783818110610b6857610b6861454e565b9050602002810190610b7a9190614564565b610b849080614584565b905014610ba4576040516343714afd60e01b815260040160405180910390fd5b33878783818110610bb757610bb761454e565b9050602002810190610bc99190614564565b610bda906060810190604001613c0e565b6001600160a01b031614610c01576040516330c4716960e21b815260040160405180910390fd5b610d063383898985818110610c1857610c1861454e565b9050602002810190610c2a9190614564565b610c3b906060810190604001613c0e565b8a8a86818110610c4d57610c4d61454e565b9050602002810190610c5f9190614564565b610c699080614584565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610caf57610caf61454e565b9050602002810190610cc19190614564565b610ccf906020810190614584565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061222692505050565b838281518110610d1857610d1861454e565b6020908102919091010152600101610b1a565b509095945050505050565b610d3f336113da565b15610d5d57604051631a30c08d60e31b815260040160405180910390fd5b610d673384612660565b604080518082019091526060815260006020820152610d893380836000612752565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610dc291906145cd565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610e05929190614624565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a9190614653565b6001600160a01b0316336001600160a01b031614610ebb5760405163794821ff60e01b815260040160405180910390fd5b610ec48161293e565b50565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610f265750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610f4357604051635c427cd960e01b815260040160405180910390fd5b610f4c836113da565b15610f7a576001600160a01b038084166000908152609a602052604090205416610f78818585856129ce565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190614670565b61100857604051631d77d47760e21b815260040160405180910390fd5b6066548181161461102c5760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b611072612a49565b610f7884848484612aa3565b6001600160a01b0383166000908152609b60205260408120546110a38582868661181a565b95945050505050565b600054610100900460ff16158080156110cc5750600054600160ff909116105b806110e65750303b1580156110e6575060005460ff166001145b61114e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015611171576000805461ff0019166101001790555b61117b8888612bc4565b611183612c49565b60975561118f89612ce0565b61119886612d32565b6111a485858585612aa3565b80156111ea576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112545750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61127157604051635c427cd960e01b815260040160405180910390fd5b61127a836113da565b15610f7a576001600160a01b038084166000908152609a602052604090205416610f7881858585612d97565b6066546002906004908116036112cf5760405163840a48d560e01b815260040160405180910390fd5b600260c954036113215760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611145565b600260c95560005b888110156113c9576113c18a8a838181106113465761134661454e565b9050602002810190611358919061468d565b89898481811061136a5761136a61454e565b905060200281019061137c9190614584565b89898681811061138e5761138e61454e565b905060200201358888878181106113a7576113a761454e565b90506020020160208101906113bc91906146a3565b612e12565b600101611329565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190614670565b61148357604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016114d5919061473f565b604051602081830303815290604052805190602001209050919050565b60665460029060049081160361151b5760405163840a48d560e01b815260040160405180910390fd5b600260c9540361156d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611145565b600260c95561157f8686868686612e12565b5050600160c95550505050565b611594612a49565b610ec481612d32565b60006001600160a01b038216158015906109c25750506001600160a01b039081166000818152609a60205260409020549091161490565b6115dc612a49565b6115e66000612ce0565b565b428360200151101561160d57604051630819bdcd60e01b815260040160405180910390fd5b611616856113da565b1561163457604051631a30c08d60e31b815260040160405180910390fd5b61163d8461159d565b61165a576040516325878fa360e21b815260040160405180910390fd5b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611696878388886020015161181a565b6001600160a01b0388166000908152609b6020526040902060018401905585519091506116c6908890839061349b565b6116d287878686612752565b50505050505050565b6060600082516001600160401b038111156116f8576116f8613e59565b604051908082528060200260200182016040528015611721578160200160208202803683370190505b50905060005b83518110156109be576001600160a01b0385166000908152609860205260408120855190919086908490811061175f5761175f61454e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061179a5761179a61454e565b6020908102919091010152600101611727565b6117b63361159d565b6117d3576040516325878fa360e21b815260040160405180910390fd5b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090838360405161180e929190614624565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c09092019092528051910120600090816118906120e1565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119679190614752565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa1580156119d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119ff91908101906147c9565b9150915060008313611a1657909590945092505050565b6060808351600003611acf576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611a8a57611a8a61454e565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611abe57611abe61454e565b602002602001018181525050611c7d565b8351611adc9060016148a0565b6001600160401b03811115611af357611af3613e59565b604051908082528060200260200182016040528015611b1c578160200160208202803683370190505b50915081516001600160401b03811115611b3857611b38613e59565b604051908082528060200260200182016040528015611b61578160200160208202803683370190505b50905060005b8451811015611bfb57848181518110611b8257611b8261454e565b6020026020010151838281518110611b9c57611b9c61454e565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611bce57611bce61454e565b6020026020010151828281518110611be857611be861454e565b6020908102919091010152600101611b67565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611c2091906148b3565b81518110611c3057611c3061454e565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611c6091906148b3565b81518110611c7057611c7061454e565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811603611cb65760405163840a48d560e01b815260040160405180910390fd5b611cbf836113da565b611cdc57604051630b3d63f960e11b815260040160405180910390fd5b611ce58361159d565b15611d03576040516311ca333560e31b815260040160405180910390fd5b6001600160a01b038316611d2a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b038084166000818152609a602052604090205490911690331480611d5d5750336001600160a01b038216145b80611d8457506001600160a01b038181166000908152609960205260409020600101541633145b611da157604051635c427cd960e01b815260040160405180910390fd5b600080611dad866118d3565b9092509050336001600160a01b03871614611e0357826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040812080546001600160a01b031916905582519003611e87576040805160008152602081019091529450611fd9565b81516001600160401b03811115611ea057611ea0613e59565b604051908082528060200260200182016040528015611ec9578160200160208202803683370190505b50945060005b8251811015611fd757604080516001808252818301909252600091602080830190803683375050604080516001808252818301909252929350600092915060208083019080368337019050509050848381518110611f2f57611f2f61454e565b602002602001015182600081518110611f4a57611f4a61454e565b60200260200101906001600160a01b031690816001600160a01b031681525050838381518110611f7c57611f7c61454e565b602002602001015181600081518110611f9757611f9761454e565b602002602001018181525050611fb089878b8585612226565b888481518110611fc257611fc261454e565b60209081029190910101525050600101611ecf565b505b50505050919050565b611feb336113da565b1561200957604051631a30c08d60e31b815260040160405180910390fd5b6120128361159d565b61202f576040516325878fa360e21b815260040160405180910390fd5b610f7a33848484612752565b6120443361159d565b612061576040516325878fa360e21b815260040160405180910390fd5b610ec43382612660565b612073612a49565b6001600160a01b0381166120d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611145565b610ec481612ce0565b60007f00000000000000000000000000000000000000000000000000000000000000004603612111575060975490565b612119612c49565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121959190614653565b6001600160a01b0316336001600160a01b0316146121c65760405163794821ff60e01b815260040160405180910390fd5b6066541981196066541916146121ef5760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161105f565b60006001600160a01b03861661224f576040516339b190bb60e11b815260040160405180910390fd5b82516000036122715760405163796cc52560e01b815260040160405180910390fd5b60005b835181101561256e576001600160a01b038616156122ca576122ca86888684815181106122a3576122a361454e565b60200260200101518685815181106122bd576122bd61454e565b60200260200101516129ce565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106122fa576122fa61454e565b60200260200101516001600160a01b0316036123c2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb89888584815181106123525761235261454e565b60200260200101516040518363ffffffff1660e01b815260040161238b9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b1580156123a557600080fd5b505af11580156123b9573d6000803e3d6000fd5b50505050612566565b846001600160a01b0316876001600160a01b0316148061249457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d85838151811061241e5761241e61454e565b60200260200101516040518263ffffffff1660e01b815260040161245191906001600160a01b0391909116815260200190565b602060405180830381865afa15801561246e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124929190614670565b155b6124b1576040516330c4716960e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e5888684815181106124f3576124f361454e565b602002602001015186858151811061250d5761250d61454e565b60200260200101516040518463ffffffff1660e01b8152600401612533939291906148c6565b600060405180830381600087803b15801561254d57600080fd5b505af1158015612561573d6000803e3d6000fd5b505050505b600101612274565b506001600160a01b0386166000908152609f60205260408120805491829190612596836148ea565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff16815260200186815260200185815250905060006125fe826114c2565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f99061264c9083908590614903565b60405180910390a198975050505050505050565b6213c680612674606083016040840161491c565b63ffffffff16111561269957604051638b11ba2f60e01b815260040160405180910390fd5b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff16906126d5906060840190840161491c565b63ffffffff1610156126fa5760405163102b92a760e01b815260040160405180910390fd5b6001600160a01b0382166000908152609960205260409020819061271e8282614959565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac9061180e9084906145cd565b60665460009060019081160361277b5760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b038085166000908152609960205260409020600101541680158015906127b15750336001600160a01b03821614155b80156127c65750336001600160a01b03861614155b156128895742846020015110156127f057604051630819bdcd60e01b815260040160405180910390fd5b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff161561283557604051639a5afeb760e01b815260040160405180910390fd5b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516128769088908890859088906109c8565b90506128878282876000015161349b565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806128e8886118d3565b9150915060005b82518110156111ea57612936888a85848151811061290f5761290f61454e565b60200260200101518585815181106129295761292961454e565b6020026020010151612d97565b6001016128ef565b6001600160a01b038116612965576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290612a059084906148b3565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610e05939291906148c6565b6033546001600160a01b031633146115e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611145565b828114612ac3576040516343714afd60e01b815260040160405180910390fd5b8260005b81811015612bbc576000868683818110612ae357612ae361454e565b9050602002016020810190612af89190613c0e565b6001600160a01b038116600090815260a16020526040812054919250868685818110612b2657612b2661454e565b90506020020135905062034bc0811115612b5357604051639373e7cf60e01b815260040160405180910390fd5b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806001019050612ac7565b505050505050565b6065546001600160a01b0316158015612be557506001600160a01b03821615155b612c02576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2612c458261293e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc0811115612d5657604051639373e7cf60e01b815260040160405180910390fd5b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290612dce9084906148a0565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610e05939291906148c6565b6000612e206105f3876149bc565b6000818152609e602052604090205490915060ff16612e525760405163295a66e160e11b815260040160405180910390fd5b609d544390612e6760a0890160808a0161491c565b63ffffffff16612e7791906148a0565b1115612e96576040516378f67ae160e11b815260040160405180910390fd5b612ea66060870160408801613c0e565b6001600160a01b0316336001600160a01b031614612ed757604051635c427cd960e01b815260040160405180910390fd5b8115612f0b57612eea60a0870187614584565b85149050612f0b576040516343714afd60e01b815260040160405180910390fd5b6000818152609e60205260409020805460ff1916905581156130715760005b612f3760a0880188614584565b905081101561306b574360a16000612f5260a08b018b614584565b85818110612f6257612f6261454e565b9050602002016020810190612f779190613c0e565b6001600160a01b03168152602081019190915260400160002054612fa160a08a0160808b0161491c565b63ffffffff16612fb191906148a0565b1115612fd0576040516378f67ae160e11b815260040160405180910390fd5b613063612fe06020890189613c0e565b33612fee60a08b018b614584565b85818110612ffe57612ffe61454e565b90506020020160208101906130139190613c0e565b61302060c08c018c614584565b868181106130305761303061454e565b905060200201358a8a878181106130495761304961454e565b905060200201602081019061305e9190613c0e565b61357f565b600101612f2a565b50613460565b336000908152609a60205260408120546001600160a01b0316905b61309960a0890189614584565b905081101561345d574360a160006130b460a08c018c614584565b858181106130c4576130c461454e565b90506020020160208101906130d99190613c0e565b6001600160a01b0316815260208101919091526040016000205461310360a08b0160808c0161491c565b63ffffffff1661311391906148a0565b1115613132576040516378f67ae160e11b815260040160405180910390fd5b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061315460a08a018a614584565b838181106131645761316461454e565b90506020020160208101906131799190613c0e565b6001600160a01b0316036132c857600061319660208a018a613c0e565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c836131d760c08e018e614584565b878181106131e7576131e761454e565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af115801561323b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325f9190614752565b6001600160a01b038084166000908152609a60205260409020549192501680156132c0576132c0818461329560a08f018f614584565b888181106132a5576132a561454e565b90506020020160208101906132ba9190613c0e565b85612d97565b505050613455565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061330a5761330a61454e565b905060200201602081019061331f9190613c0e565b61332c60a08d018d614584565b8681811061333c5761333c61454e565b90506020020160208101906133519190613c0e565b61335e60c08e018e614584565b8781811061336e5761336e61454e565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156133ce57600080fd5b505af11580156133e2573d6000803e3d6000fd5b505050506001600160a01b0382161561345557613455823361340760a08c018c614584565b858181106134175761341761454e565b905060200201602081019061342c9190613c0e565b61343960c08d018d614584565b868181106134495761344961454e565b90506020020135612d97565b60010161308c565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b1561354457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906134db90869086906004016149c8565b602060405180830381865afa1580156134f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351c9190614a1d565b6001600160e01b03191614610f7a5760405163026aa43360e31b815260040160405180910390fd5b826001600160a01b031661355883836136bf565b6001600160a01b031614610f7a57604051636d20896160e11b815260040160405180910390fd5b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b0384160161362a5760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b1300906135f3908890889087906004016148c6565b600060405180830381600087803b15801561360d57600080fd5b505af1158015613621573d6000803e3d6000fd5b505050506136b8565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b1580156136a457600080fd5b505af11580156111ea573d6000803e3d6000fd5b5050505050565b60008060006136ce85856136db565b915091506109be81613749565b60008082516041036137115760208301516040840151606085015160001a613705878285856138ff565b94509450505050613742565b825160400361373a576020830151604084015161372f8683836139ec565b935093505050613742565b506000905060025b9250929050565b600081600481111561375d5761375d614a47565b036137655750565b600181600481111561377957613779614a47565b036137c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611145565b60028160048111156137da576137da614a47565b036138275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611145565b600381600481111561383b5761383b614a47565b036138935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611145565b60048160048111156138a7576138a7614a47565b03610ec45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401611145565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561393657506000905060036139e3565b8460ff16601b1415801561394e57508460ff16601c14155b1561395f57506000905060046139e3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156139b3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166139dc576000600192509250506139e3565b9150600090505b94509492505050565b6000806001600160ff1b03831681613a0960ff86901c601b6148a0565b9050613a17878288856138ff565b935093505050935093915050565b60008083601f840112613a3757600080fd5b5081356001600160401b03811115613a4e57600080fd5b6020830191508360208260051b850101111561374257600080fd5b60008060208385031215613a7c57600080fd5b82356001600160401b03811115613a9257600080fd5b613a9e85828601613a25565b90969095509350505050565b6001600160a01b0381168114610ec457600080fd5b8035613aca81613aaa565b919050565b600080600080600060a08688031215613ae757600080fd5b8535613af281613aaa565b94506020860135613b0281613aaa565b93506040860135613b1281613aaa565b94979396509394606081013594506080013592915050565b602080825282518282018190526000918401906040840190835b81811015610d2b578351835260209384019390920191600101613b44565b600060608284031215613b7457600080fd5b50919050565b60008083601f840112613b8c57600080fd5b5081356001600160401b03811115613ba357600080fd5b60208301915083602082850101111561374257600080fd5b600080600060808486031215613bd057600080fd5b613bda8585613b62565b925060608401356001600160401b03811115613bf557600080fd5b613c0186828701613b7a565b9497909650939450505050565b600060208284031215613c2057600080fd5b8135613c2b81613aaa565b9392505050565b600080600060608486031215613c4757600080fd5b8335613c5281613aaa565b92506020840135613c6281613aaa565b929592945050506040919091013590565b600060208284031215613c8557600080fd5b5035919050565b60008060008060408587031215613ca257600080fd5b84356001600160401b03811115613cb857600080fd5b613cc487828801613a25565b90955093505060208501356001600160401b03811115613ce357600080fd5b613cef87828801613a25565b95989497509550505050565b60008060008060008060008060c0898b031215613d1757600080fd5b8835613d2281613aaa565b97506020890135613d3281613aaa565b9650604089013595506060890135945060808901356001600160401b03811115613d5b57600080fd5b613d678b828c01613a25565b90955093505060a08901356001600160401b03811115613d8657600080fd5b613d928b828c01613a25565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215613dc257600080fd5b88356001600160401b03811115613dd857600080fd5b613de48b828c01613a25565b90995097505060208901356001600160401b03811115613e0357600080fd5b613e0f8b828c01613a25565b90975095505060408901356001600160401b03811115613e2e57600080fd5b613e3a8b828c01613a25565b90955093505060608901356001600160401b03811115613d8657600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715613e9157613e91613e59565b60405290565b604080519081016001600160401b0381118282101715613e9157613e91613e59565b604051601f8201601f191681016001600160401b0381118282101715613ee157613ee1613e59565b604052919050565b63ffffffff81168114610ec457600080fd5b8035613aca81613ee9565b60006001600160401b03821115613f1f57613f1f613e59565b5060051b60200190565b600082601f830112613f3a57600080fd5b8135613f4d613f4882613f06565b613eb9565b8082825260208201915060208360051b860101925085831115613f6f57600080fd5b602085015b83811015613f95578035613f8781613aaa565b835260209283019201613f74565b5095945050505050565b600082601f830112613fb057600080fd5b8135613fbe613f4882613f06565b8082825260208201915060208360051b860101925085831115613fe057600080fd5b602085015b83811015613f95578035835260209283019201613fe5565b600060e0828403121561400f57600080fd5b614017613e6f565b905061402282613abf565b815261403060208301613abf565b602082015261404160408301613abf565b60408201526060828101359082015261405c60808301613efb565b608082015260a08201356001600160401b0381111561407a57600080fd5b61408684828501613f29565b60a08301525060c08201356001600160401b038111156140a557600080fd5b6140b184828501613f9f565b60c08301525092915050565b6000602082840312156140cf57600080fd5b81356001600160401b038111156140e557600080fd5b6140f184828501613ffd565b949350505050565b60006020828403121561410b57600080fd5b813560ff81168114613c2b57600080fd5b8015158114610ec457600080fd5b60008060008060006080868803121561414257600080fd5b85356001600160401b0381111561415857600080fd5b860160e0818903121561416a57600080fd5b945060208601356001600160401b0381111561418557600080fd5b61419188828901613a25565b9095509350506040860135915060608601356141ac8161411c565b809150509295509295909350565b600080604083850312156141cd57600080fd5b82356141d881613aaa565b915060208301356141e881613aaa565b809150509250929050565b60006040828403121561420557600080fd5b61420d613e97565b905081356001600160401b0381111561422557600080fd5b8201601f8101841361423657600080fd5b80356001600160401b0381111561424f5761424f613e59565b614262601f8201601f1916602001613eb9565b81815285602083850101111561427757600080fd5b81602084016020830137600060209282018301528352928301359282019290925292915050565b600080600080600060a086880312156142b657600080fd5b85356142c181613aaa565b945060208601356142d181613aaa565b935060408601356001600160401b038111156142ec57600080fd5b6142f8888289016141f3565b93505060608601356001600160401b0381111561431457600080fd5b614320888289016141f3565b95989497509295608001359392505050565b6000806040838503121561434557600080fd5b823561435081613aaa565b915060208301356001600160401b0381111561436b57600080fd5b61437785828601613f29565b9150509250929050565b600081518084526020840193506020830160005b828110156143b3578151865260209586019590910190600101614395565b5093949350505050565b602081526000613c2b6020830184614381565b600080602083850312156143e357600080fd5b82356001600160401b038111156143f957600080fd5b613a9e85828601613b7a565b6000806040838503121561441857600080fd5b823561442381613aaa565b946020939093013593505050565b6000806000806080858703121561444757600080fd5b843561445281613aaa565b935060208501359250604085013561446981613aaa565b9396929550929360600135925050565b600081518084526020840193506020830160005b828110156143b35781516001600160a01b031686526020958601959091019060010161448d565b6040815260006144c76040830185614479565b82810360208401526110a38185614381565b6000806000606084860312156144ee57600080fd5b83356144f981613aaa565b925060208401356001600160401b0381111561451457600080fd5b614520868287016141f3565b93969395505050506040919091013590565b60006060828403121561454457600080fd5b613c2b8383613b62565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261457a57600080fd5b9190910192915050565b6000808335601e1984360301811261459b57600080fd5b8301803591506001600160401b038211156145b557600080fd5b6020019150600581901b360382131561374257600080fd5b6060810182356145dc81613aaa565b6001600160a01b0316825260208301356145f581613aaa565b6001600160a01b03166020830152604083013561461181613ee9565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561466557600080fd5b8151613c2b81613aaa565b60006020828403121561468257600080fd5b8151613c2b8161411c565b6000823560de1983360301811261457a57600080fd5b6000602082840312156146b557600080fd5b8135613c2b8161411c565b80516001600160a01b039081168352602080830151821690840152604080830151909116908301526060808201519083015260808082015160009161470c9085018263ffffffff169052565b5060a082015160e060a085015261472660e0850182614479565b905060c083015184820360c08601526110a38282614381565b602081526000613c2b60208301846146c0565b60006020828403121561476457600080fd5b5051919050565b600082601f83011261477c57600080fd5b815161478a613f4882613f06565b8082825260208201915060208360051b8601019250858311156147ac57600080fd5b602085015b83811015613f955780518352602092830192016147b1565b600080604083850312156147dc57600080fd5b82516001600160401b038111156147f257600080fd5b8301601f8101851361480357600080fd5b8051614811613f4882613f06565b8082825260208201915060208360051b85010192508783111561483357600080fd5b6020840193505b8284101561485e57835161484d81613aaa565b82526020938401939091019061483a565b8095505050505060208301516001600160401b0381111561487e57600080fd5b6143778582860161476b565b634e487b7160e01b600052601160045260246000fd5b808201808211156109c2576109c261488a565b818103818111156109c2576109c261488a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000600182016148fc576148fc61488a565b5060010190565b8281526040602082015260006140f160408301846146c0565b60006020828403121561492e57600080fd5b8135613c2b81613ee9565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561496481613aaa565b61496e8183614939565b5060018101602083013561498181613aaa565b61498b8183614939565b50604083013561499a81613ee9565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006109c23683613ffd565b828152604060208201526000825180604084015260005b818110156149fc57602081860181015160608684010152016149df565b506000606082850101526060601f19601f8301168401019150509392505050565b600060208284031215614a2f57600080fd5b81516001600160e01b031981168114613c2b57600080fd5b634e487b7160e01b600052602160045260246000fdfea264697066735822122060f42e0d820098db4247013bf6e62a8bf7ebcc0389ba32d5bc5de4169fb8f70264736f6c634300081b0033", } // 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 f6fb6b9dc..4b84442e1 100644 --- a/pkg/bindings/DelegationManagerStorage/binding.go +++ b/pkg/bindings/DelegationManagerStorage/binding.go @@ -62,7 +62,7 @@ type ISignatureUtilsSignatureWithExpiry 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\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"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\":\"StakerOptOutWindowBlocksCannotDecrease\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotStaker\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotCurrentlyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureSaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksCannotDecrease\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotStaker\",\"inputs\":[]}]", } // DelegationManagerStorageABI 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 ec4c5afff..5ff23a0da 100644 --- a/pkg/bindings/EigenPod/binding.go +++ b/pkg/bindings/EigenPod/binding.go @@ -73,7 +73,7 @@ type IEigenPodValidatorInfo 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\":\"_GENESIS_TIME\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"GENESIS_TIME\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsWithdrawableRestakedExecutionLayerGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountMustBeMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncompletePreviousCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBlockRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorFieldsLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoints\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofLengthNotMultipleOf32\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofOlderThanLastCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExiting\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNoPendingActivation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawCredentialsNotForEigenPod\",\"inputs\":[]}]", - Bin: "0x60e060405234801561001057600080fd5b50604051613ce3380380613ce383398101604081905261002f91610137565b6001600160a01b03808416608052821660a0526001600160401b03811660c05261005761005f565b505050610190565b600054610100900460ff16156100cb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013457600080fd5b50565b60008060006060848603121561014c57600080fd5b83516101578161011f565b60208501519093506101688161011f565b60408501519092506001600160401b038116811461018557600080fd5b809150509250925092565b60805160a05160c051613ad761020c60003960006105ff0152600081816102bd0152818161063a015281816106e4015281816109af01528181610b7601528181610e5f01528181610f0801528181611146015281816114af015281816115e601526126a90152600081816104b80152610f710152613ad76000f3fe60806040526004361061016a5760003560e01c80636fcd0e53116100d1578063c49074421161008a578063dda3346c11610064578063dda3346c1461058d578063ee94d67c146105ad578063f074ba62146105cd578063f2882461146105ed57600080fd5b8063c49074421461052d578063c4d66de81461054d578063d06d55871461056d57600080fd5b80636fcd0e53146104425780637439841f1461046f57806374cdd798146104a657806388676cad146104da5780639b4e4634146104fa578063b522538a1461050d57600080fd5b80634665bcda116101235780634665bcda146102ab57806347d28372146102df57806352396a591461039f57806358753357146103d557806358eaee79146103f55780636c0d2d5a1461042257600080fd5b8063039157d2146101a95780630b18ff66146101cb5780632340e8d3146102085780633474aa161461022c5780633f65cf191461026457806342ecff2a1461028457600080fd5b366101a4576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101b557600080fd5b506101c96101c4366004612fd3565b610621565b005b3480156101d757600080fd5b506033546101eb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561021457600080fd5b5061021e60395481565b6040519081526020016101ff565b34801561023857600080fd5b5060345461024c906001600160401b031681565b6040516001600160401b0390911681526020016101ff565b34801561027057600080fd5b506101c961027f366004613095565b610956565b34801561029057600080fd5b50603a5461024c90600160401b90046001600160401b031681565b3480156102b757600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102eb57600080fd5b5061035b6040805160808101825260008082526020820181905291810182905260608101919091525060408051608081018252603c548152603d5462ffffff811660208301526001600160401b03630100000082041692820192909252600160581b909104600f0b606082015290565b6040516101ff91908151815260208083015162ffffff16908201526040808301516001600160401b031690820152606091820151600f0b9181019190915260800190565b3480156103ab57600080fd5b5061024c6103ba366004613173565b603b602052600090815260409020546001600160401b031681565b3480156103e157600080fd5b50603e546101eb906001600160a01b031681565b34801561040157600080fd5b506104156104103660046131cf565b610be0565b6040516101ff9190613248565b34801561042e57600080fd5b5061021e61043d366004613173565b610c45565b34801561044e57600080fd5b5061046261045d366004613256565b610d59565b6040516101ff919061326f565b34801561047b57600080fd5b5061041561048a366004613256565b600090815260366020526040902054600160c01b900460ff1690565b3480156104b257600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e657600080fd5b506101c96104f53660046132d1565b610e06565b6101c96105083660046132ee565b610efd565b34801561051957600080fd5b506104626105283660046131cf565b611048565b34801561053957600080fd5b506101c9610548366004613385565b61113b565b34801561055957600080fd5b506101c96105683660046133b1565b611287565b34801561057957600080fd5b506101c96105883660046133b1565b6113d7565b34801561059957600080fd5b506101c96105a83660046134a4565b61146b565b3480156105b957600080fd5b50603a5461024c906001600160401b031681565b3480156105d957600080fd5b506101c96105e836600461357d565b6115cd565b3480156105f957600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad91906135e9565b156106cb5760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610733573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075791906135e9565b156107755760405163840a48d560e01b815260040160405180910390fd5b60006107bb6107848580613606565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061199f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561082a5761082a613210565b600281111561083b5761083b613210565b81525050905080604001516001600160401b0316876001600160401b03161161087757604051630767e73160e41b815260040160405180910390fd5b60018160600151600281111561088f5761088f613210565b146108ad576040516353670afb60e11b815260040160405180910390fd5b6108f16108ba8680613606565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506119c392505050565b61090e576040516321b6a8f960e11b815260040160405180910390fd5b61092061091a88610c45565b876119ed565b610943863561092f8780613606565b61093c60208a018a61364f565b8651611a93565b61094d6000611bbe565b50505050505050565b6033546001600160a01b03163314806109795750603e546001600160a01b031633145b6109965760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2291906135e9565b15610a405760405163840a48d560e01b815260040160405180910390fd5b8584148015610a4e57508382145b610a6b576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610aa1576040516337e07ffd60e01b815260040160405180910390fd5b610ab3610aad8a610c45565b896119ed565b6000805b87811015610b4c57610b388a358a8a84818110610ad657610ad6613695565b9050602002016020810190610aeb91906136ab565b898985818110610afd57610afd613695565b9050602002810190610b0f919061364f565b898987818110610b2157610b21613695565b9050602002810190610b339190613606565b611d38565b610b4290836136e8565b9150600101610ab7565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b158015610bbc57600080fd5b505af1158015610bd0573d6000803e3d6000fd5b5050505050505050505050505050565b600080610c2284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121a792505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b6000610c54611fff600c6136fb565b610c676001600160401b03841642613712565b10610c8557604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201526000918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f1981840301815290829052610ccd91613749565b600060405180830381855afa9150503d8060008114610d08576040519150601f19603f3d011682016040523d82523d6000602084013e610d0d565b606091505b5091509150818015610d20575060008151115b610d3d5760405163e01c3f9560e01b815260040160405180910390fd5b80806020019051810190610d519190613765565b949350505050565b610d816040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610dec57610dec613210565b6002811115610dfd57610dfd613210565b90525092915050565b6033546001600160a01b0316331480610e295750603e546001600160a01b031633145b610e465760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed291906135e9565b15610ef05760405163840a48d560e01b815260040160405180910390fd5b610ef982611bbe565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f4657604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec80000014610f6f5760405163049696b360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787610fb261223c565b8888886040518863ffffffff1660e01b8152600401610fd6969594939291906137d3565b6000604051808303818588803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051611039929190613822565b60405180910390a15050505050565b6110706040805160808101825260008082526020820181905291810182905290606082015290565b603660006110b385858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121a792505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561112057611120613210565b600281111561113157611131613210565b9052509392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461118457604051633213a66160e21b815260040160405180910390fd5b611192633b9aca008261384c565b156111b0576040516321ddeb1760e21b815260040160405180910390fd5b60006111c0633b9aca0083613860565b6034549091506001600160401b0390811690821611156111f35760405163786be08d60e01b815260040160405180910390fd5b603480548291906000906112119084906001600160401b0316613874565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161127091815260200190565b60405180910390a26112828383612281565b505050565b600054610100900460ff16158080156112a75750600054600160ff909116105b806112c15750303b1580156112c1575060005460ff166001145b6113295760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561134c576000805461ff0019166101001790555b6001600160a01b038216611373576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0384161790558015610ef9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b031633146114025760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146114965760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156114fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152291906135e9565b156115405760405163840a48d560e01b815260040160405180910390fd5b8251845114611562576040516343714afd60e01b815260040160405180910390fd5b60005b84518110156115c6576115be8385838151811061158457611584613695565b602002602001015187848151811061159e5761159e613695565b60200260200101516001600160a01b031661239a9092919063ffffffff16565b600101611565565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165991906135e9565b156116775760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b031660008190036116ab57604051620e680d60e11b815260040160405180910390fd5b60408051608081018252603c54808252603d5462ffffff811660208401526001600160401b03630100000082041693830193909352600160581b909204600f0b6060820152906116fb90876123ec565b6000805b85811015611945573687878381811061171a5761171a613695565b905060200281019061172c9190613893565b80356000908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561179d5761179d613210565b60028111156117ae576117ae613210565b90525090506001816060015160028111156117cb576117cb613210565b146117d757505061193d565b856001600160401b031681604001516001600160401b0316106117fb57505061193d565b60008061180b83898e358761249e565b602089018051929450909250611820826138a9565b62ffffff1690525060608701805183919061183c9083906138c8565b600f0b90525061184c81876138f5565b84356000908152603660209081526040918290208651815492880151938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060870151939950869390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156118f1576118f1613210565b021790555050835160405164ffffffffff90911691506001600160401b038a16907fa91c59033c3423e18b54d0acecebb4972f9ea95aedf5f4cae3b677b02eaf3a3f90600090a3505050505b6001016116ff565b506001600160401b038084166000908152603b6020526040812080548493919291611972918591166138f5565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061094d826125c3565b6000816000815181106119b4576119b4613695565b60200260200101519050919050565b6000816003815181106119d8576119d8613695565b60200260200101516000801b14159050919050565b6119f9600360206136fb565b611a06602083018361364f565b905014611a26576040516313717da960e21b815260040160405180910390fd5b611a76611a36602083018361364f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250508435905060036127cd565b610ef9576040516309bde33960e01b815260040160405180910390fd5b60088414611ab45760405163200591bd60e01b815260040160405180910390fd5b6005611ac2602860016136e8565b611acc91906136e8565b611ad79060206136fb565b8214611af6576040516313717da960e21b815260040160405180910390fd5b6000611b348686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127e592505050565b9050600064ffffffffff8316611b4c602860016136e8565b600b901b179050611b9785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508691508590506127cd565b611bb4576040516309bde33960e01b815260040160405180910390fd5b5050505050505050565b603a54600160401b90046001600160401b031615611bef57604051630e2d94e160e31b815260040160405180910390fd5b603a546001600160401b03428116911603611c1d576040516367db5b8b60e01b815260040160405180910390fd5b6034546000906001600160401b0316611c3a633b9aca0047613860565b611c449190613874565b9050818015611c5a57506001600160401b038116155b15611c78576040516332dea95960e21b815260040160405180910390fd5b60006040518060800160405280611c8e42610c45565b815260200160395462ffffff168152602001836001600160401b031681526020016000600f0b815250905042603a60086101000a8154816001600160401b0302191690836001600160401b03160217905550611ce9816125c3565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b600080611d7784848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061199f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611de657611de6613210565b6002811115611df757611df7613210565b9052509050600081606001516002811115611e1457611e14613210565b14611e32576040516343f8f5e960e01b815260040160405180910390fd5b6001600160401b038016611e78868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7e92505050565b6001600160401b031603611e9f5760405163ab42cfd960e01b815260040160405180910390fd5b6001600160401b038016611ee5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612aa392505050565b6001600160401b031614611f0c5760405163b64ec9a760e01b815260040160405180910390fd5b611f1461223c565b611f1d90613914565b611f59868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612abb92505050565b14611f7757604051632230566760e11b815260040160405180910390fd5b6000611fb5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612ad092505050565b9050611fc58a87878b8b8e611a93565b60398054906000611fd583613938565b9091555050603a54600090600160401b90046001600160401b03161561200d57603a54600160401b90046001600160401b031661201a565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190526000858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156120f0576120f0613210565b02179055505060405164ffffffffff8c1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a16040805164ffffffffff8c1681526001600160401b03838116602083015284168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a1612198633b9aca006001600160401b0384166136fb565b9b9a5050505050505050505050565b600081516030146121cb576040516350b541b960e11b815260040160405180910390fd5b6040516002906121e2908490600090602001613951565b60408051601f19818403018152908290526121fc91613749565b602060405180830381855afa158015612219573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c3f9190613765565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b804710156122d15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611320565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b50509050806112825760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611320565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611282908490612ae8565b6123f8600560036136e8565b6124039060206136fb565b612410602083018361364f565b905014612430576040516313717da960e21b815260040160405180910390fd5b606c612481612442602084018461364f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792505085359050846127cd565b611282576040516309bde33960e01b815260040160405180910390fd5b835160208501516000918291826124b6878488612bba565b9050816001600160401b0316816001600160401b031614612530576124db8183612c9d565b6040805164ffffffffff861681526001600160401b038b8116602083015284168183015290519196507f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df919081900360600190a15b6001600160401b0380821660208b0181905290891660408b01526000036125b7576039805490600061256183613980565b9091555050600260608a015261257685613997565b93508264ffffffffff16886001600160401b03167f2a02361ffa66cf2c2da4682c2355a6adcaa9f6c227b6e6563e68480f9587626a60405160405180910390a35b50505094509492505050565b806020015162ffffff1660000361274d576000633b9aca00826060015183604001516001600160401b03166125f891906138c8565b600f0b61260591906139bd565b604083015160348054929350909160009061262a9084906001600160401b03166138f5565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b81049092166001600160801b0319909216919091179055506000603c55603d80546001600160d81b031916905560335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b1580156126ef57600080fd5b505af1158015612703573d6000803e3d6000fd5b5050603a546040518481526001600160401b0390911692507f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e44915060200160405180910390a25050565b8051603c556020810151603d8054604084015160608501516fffffffffffffffffffffffffffffffff16600160581b026fffffffffffffffffffffffffffffffff60581b196001600160401b039092166301000000026affffffffffffffffffffff1990931662ffffff9095169490941791909117169190911790555b50565b6000836127db868585612cb5565b1495945050505050565b600080600283516127f69190613860565b90506000816001600160401b03811115612812576128126133ce565b60405190808252806020026020018201604052801561283b578160200160208202803683370190505b50905060005b828110156129385760028561285683836136fb565b8151811061286657612866613695565b60200260200101518683600261287c91906136fb565b6128879060016136e8565b8151811061289757612897613695565b60200260200101516040516020016128b9929190918252602082015260400190565b60408051601f19818403018152908290526128d391613749565b602060405180830381855afa1580156128f0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906129139190613765565b82828151811061292557612925613695565b6020908102919091010152600101612841565b50612944600283613860565b91505b8115612a5a5760005b82811015612a475760028261296583836136fb565b8151811061297557612975613695565b60200260200101518383600261298b91906136fb565b6129969060016136e8565b815181106129a6576129a6613695565b60200260200101516040516020016129c8929190918252602082015260400190565b60408051601f19818403018152908290526129e291613749565b602060405180830381855afa1580156129ff573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612a229190613765565b828281518110612a3457612a34613695565b6020908102919091010152600101612950565b50612a53600283613860565b9150612947565b80600081518110612a6d57612a6d613695565b602002602001015192505050919050565b6000610c3f82600581518110612a9657612a96613695565b6020026020010151612d92565b6000610c3f82600681518110612a9657612a96613695565b6000816001815181106119b4576119b4613695565b6000610c3f82600281518110612a9657612a96613695565b6000612b3d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612df99092919063ffffffff16565b8051909150156112825780806020019051810190612b5b91906135e9565b6112825760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611320565b6000612bc8602660016136e8565b612bd39060206136fb565b612be0604084018461364f565b905014612c00576040516313717da960e21b815260040160405180910390fd5b6000612c0d6004856139ed565b64ffffffffff169050612c67612c26604085018561364f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050506020860135846127cd565b612c84576040516309bde33960e01b815260040160405180910390fd5b612c92836020013585612e08565b9150505b9392505050565b6000612c966001600160401b03808416908516613a17565b60008351600014158015612cd4575060208451612cd2919061384c565b155b612cf157604051630228be0560e31b815260040160405180910390fd5b604080516020808201909252848152905b85518111612d8857612d1560028561384c565b600003612d4b578151600052808601516020526020826040600060026107d05a03fa612d4057600080fd5b600284049350612d76565b8086015160005281516020526020826040600060026107d05a03fa612d6f57600080fd5b6002840493505b612d816020826136e8565b9050612d02565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6060610d518484600085612e35565b600080612e16600484613a44565b612e21906040613a6e565b64ffffffffff169050610d5184821b612d92565b606082471015612e965760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611320565b6001600160a01b0385163b612eed5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611320565b600080866001600160a01b03168587604051612f099190613749565b60006040518083038185875af1925050503d8060008114612f46576040519150601f19603f3d011682016040523d82523d6000602084013e612f4b565b606091505b5091509150612f5b828286612f66565b979650505050505050565b60608315612f75575081612c96565b825115612f855782518084602001fd5b8160405162461bcd60e51b81526004016113209190613a8e565b80356001600160401b0381168114612fb657600080fd5b919050565b600060408284031215612fcd57600080fd5b50919050565b600080600060608486031215612fe857600080fd5b612ff184612f9f565b925060208401356001600160401b0381111561300c57600080fd5b61301886828701612fbb565b92505060408401356001600160401b0381111561303457600080fd5b61304086828701612fbb565b9150509250925092565b60008083601f84011261305c57600080fd5b5081356001600160401b0381111561307357600080fd5b6020830191508360208260051b850101111561308e57600080fd5b9250929050565b60008060008060008060008060a0898b0312156130b157600080fd5b6130ba89612f9f565b975060208901356001600160401b038111156130d557600080fd5b6130e18b828c01612fbb565b97505060408901356001600160401b038111156130fd57600080fd5b6131098b828c0161304a565b90975095505060608901356001600160401b0381111561312857600080fd5b6131348b828c0161304a565b90955093505060808901356001600160401b0381111561315357600080fd5b61315f8b828c0161304a565b999c989b5096995094979396929594505050565b60006020828403121561318557600080fd5b612c9682612f9f565b60008083601f8401126131a057600080fd5b5081356001600160401b038111156131b757600080fd5b60208301915083602082850101111561308e57600080fd5b600080602083850312156131e257600080fd5b82356001600160401b038111156131f857600080fd5b6132048582860161318e565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b6003811061324457634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c3f8284613226565b60006020828403121561326857600080fd5b5035919050565b60006080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b03604084015116604083015260608301516132bc6060840182613226565b5092915050565b80151581146127ca57600080fd5b6000602082840312156132e357600080fd5b8135612c96816132c3565b60008060008060006060868803121561330657600080fd5b85356001600160401b0381111561331c57600080fd5b6133288882890161318e565b90965094505060208601356001600160401b0381111561334757600080fd5b6133538882890161318e565b96999598509660400135949350505050565b6001600160a01b03811681146127ca57600080fd5b8035612fb681613365565b6000806040838503121561339857600080fd5b82356133a381613365565b946020939093013593505050565b6000602082840312156133c357600080fd5b8135612c9681613365565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561340c5761340c6133ce565b604052919050565b60006001600160401b0382111561342d5761342d6133ce565b5060051b60200190565b600082601f83011261344857600080fd5b813561345b61345682613414565b6133e4565b8082825260208201915060208360051b86010192508583111561347d57600080fd5b602085015b8381101561349a578035835260209283019201613482565b5095945050505050565b6000806000606084860312156134b957600080fd5b83356001600160401b038111156134cf57600080fd5b8401601f810186136134e057600080fd5b80356134ee61345682613414565b8082825260208201915060208360051b85010192508883111561351057600080fd5b6020840193505b8284101561353b57833561352a81613365565b825260209384019390910190613517565b955050505060208401356001600160401b0381111561355957600080fd5b61356586828701613437565b9250506135746040850161337a565b90509250925092565b60008060006040848603121561359257600080fd5b83356001600160401b038111156135a857600080fd5b6135b486828701612fbb565b93505060208401356001600160401b038111156135d057600080fd5b6135dc8682870161304a565b9497909650939450505050565b6000602082840312156135fb57600080fd5b8151612c96816132c3565b6000808335601e1984360301811261361d57600080fd5b8301803591506001600160401b0382111561363757600080fd5b6020019150600581901b360382131561308e57600080fd5b6000808335601e1984360301811261366657600080fd5b8301803591506001600160401b0382111561368057600080fd5b60200191503681900382131561308e57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156136bd57600080fd5b813564ffffffffff81168114612c9657600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610c3f57610c3f6136d2565b8082028115828204841417610c3f57610c3f6136d2565b81810381811115610c3f57610c3f6136d2565b60005b83811015613740578181015183820152602001613728565b50506000910152565b6000825161375b818460208701613725565b9190910192915050565b60006020828403121561377757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526137bf816020860160208601613725565b601f01601f19169290920160200192915050565b6080815260006137e760808301888a61377e565b82810360208401526137f981886137a7565b9050828103604084015261380e81868861377e565b915050826060830152979650505050505050565b602081526000610d5160208301848661377e565b634e487b7160e01b600052601260045260246000fd5b60008261385b5761385b613836565b500690565b60008261386f5761386f613836565b500490565b6001600160401b038281168282160390811115610c3f57610c3f6136d2565b60008235605e1983360301811261375b57600080fd5b600062ffffff8216806138be576138be6136d2565b6000190192915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715610c3f57610c3f6136d2565b6001600160401b038181168382160190811115610c3f57610c3f6136d2565b80516020808301519190811015612fcd5760001960209190910360031b1b16919050565b60006001820161394a5761394a6136d2565b5060010190565b60008351613963818460208801613725565b6001600160801b0319939093169190920190815260100192915050565b60008161398f5761398f6136d2565b506000190190565b600081600f0b60016001607f1b031981036139b4576139b46136d2565b60000392915050565b80820260008212600160ff1b841416156139d9576139d96136d2565b8181058314821517610c3f57610c3f6136d2565b600064ffffffffff831680613a0457613a04613836565b8064ffffffffff84160491505092915050565b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610c3f57610c3f6136d2565b600064ffffffffff831680613a5b57613a5b613836565b8064ffffffffff84160691505092915050565b64ffffffffff81811683821602908116908181146132bc576132bc6136d2565b602081526000612c9660208301846137a756fea26469706673582212200aca9940e7697c006ed15f7d95485db78ef79ebc107d8c19461f199952e732b064736f6c634300081b0033", + Bin: "0x60e060405234801561001057600080fd5b50604051613ce3380380613ce383398101604081905261002f91610137565b6001600160a01b03808416608052821660a0526001600160401b03811660c05261005761005f565b505050610190565b600054610100900460ff16156100cb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013457600080fd5b50565b60008060006060848603121561014c57600080fd5b83516101578161011f565b60208501519093506101688161011f565b60408501519092506001600160401b038116811461018557600080fd5b809150509250925092565b60805160a05160c051613ad761020c60003960006105ff0152600081816102bd0152818161063a015281816106e4015281816109af01528181610b7601528181610e5f01528181610f0801528181611146015281816114af015281816115e601526126a90152600081816104b80152610f710152613ad76000f3fe60806040526004361061016a5760003560e01c80636fcd0e53116100d1578063c49074421161008a578063dda3346c11610064578063dda3346c1461058d578063ee94d67c146105ad578063f074ba62146105cd578063f2882461146105ed57600080fd5b8063c49074421461052d578063c4d66de81461054d578063d06d55871461056d57600080fd5b80636fcd0e53146104425780637439841f1461046f57806374cdd798146104a657806388676cad146104da5780639b4e4634146104fa578063b522538a1461050d57600080fd5b80634665bcda116101235780634665bcda146102ab57806347d28372146102df57806352396a591461039f57806358753357146103d557806358eaee79146103f55780636c0d2d5a1461042257600080fd5b8063039157d2146101a95780630b18ff66146101cb5780632340e8d3146102085780633474aa161461022c5780633f65cf191461026457806342ecff2a1461028457600080fd5b366101a4576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101b557600080fd5b506101c96101c4366004612fd3565b610621565b005b3480156101d757600080fd5b506033546101eb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561021457600080fd5b5061021e60395481565b6040519081526020016101ff565b34801561023857600080fd5b5060345461024c906001600160401b031681565b6040516001600160401b0390911681526020016101ff565b34801561027057600080fd5b506101c961027f366004613095565b610956565b34801561029057600080fd5b50603a5461024c90600160401b90046001600160401b031681565b3480156102b757600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102eb57600080fd5b5061035b6040805160808101825260008082526020820181905291810182905260608101919091525060408051608081018252603c548152603d5462ffffff811660208301526001600160401b03630100000082041692820192909252600160581b909104600f0b606082015290565b6040516101ff91908151815260208083015162ffffff16908201526040808301516001600160401b031690820152606091820151600f0b9181019190915260800190565b3480156103ab57600080fd5b5061024c6103ba366004613173565b603b602052600090815260409020546001600160401b031681565b3480156103e157600080fd5b50603e546101eb906001600160a01b031681565b34801561040157600080fd5b506104156104103660046131cf565b610be0565b6040516101ff9190613248565b34801561042e57600080fd5b5061021e61043d366004613173565b610c45565b34801561044e57600080fd5b5061046261045d366004613256565b610d59565b6040516101ff919061326f565b34801561047b57600080fd5b5061041561048a366004613256565b600090815260366020526040902054600160c01b900460ff1690565b3480156104b257600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e657600080fd5b506101c96104f53660046132d1565b610e06565b6101c96105083660046132ee565b610efd565b34801561051957600080fd5b506104626105283660046131cf565b611048565b34801561053957600080fd5b506101c9610548366004613385565b61113b565b34801561055957600080fd5b506101c96105683660046133b1565b611287565b34801561057957600080fd5b506101c96105883660046133b1565b6113d7565b34801561059957600080fd5b506101c96105a83660046134a4565b61146b565b3480156105b957600080fd5b50603a5461024c906001600160401b031681565b3480156105d957600080fd5b506101c96105e836600461357d565b6115cd565b3480156105f957600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad91906135e9565b156106cb5760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610733573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075791906135e9565b156107755760405163840a48d560e01b815260040160405180910390fd5b60006107bb6107848580613606565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061199f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561082a5761082a613210565b600281111561083b5761083b613210565b81525050905080604001516001600160401b0316876001600160401b03161161087757604051630767e73160e41b815260040160405180910390fd5b60018160600151600281111561088f5761088f613210565b146108ad576040516353670afb60e11b815260040160405180910390fd5b6108f16108ba8680613606565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506119c392505050565b61090e576040516321b6a8f960e11b815260040160405180910390fd5b61092061091a88610c45565b876119ed565b610943863561092f8780613606565b61093c60208a018a61364f565b8651611a93565b61094d6000611bbe565b50505050505050565b6033546001600160a01b03163314806109795750603e546001600160a01b031633145b6109965760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2291906135e9565b15610a405760405163840a48d560e01b815260040160405180910390fd5b8584148015610a4e57508382145b610a6b576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610aa1576040516337e07ffd60e01b815260040160405180910390fd5b610ab3610aad8a610c45565b896119ed565b6000805b87811015610b4c57610b388a358a8a84818110610ad657610ad6613695565b9050602002016020810190610aeb91906136ab565b898985818110610afd57610afd613695565b9050602002810190610b0f919061364f565b898987818110610b2157610b21613695565b9050602002810190610b339190613606565b611d38565b610b4290836136e8565b9150600101610ab7565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b158015610bbc57600080fd5b505af1158015610bd0573d6000803e3d6000fd5b5050505050505050505050505050565b600080610c2284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121a792505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b6000610c54611fff600c6136fb565b610c676001600160401b03841642613712565b10610c8557604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201526000918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f1981840301815290829052610ccd91613749565b600060405180830381855afa9150503d8060008114610d08576040519150601f19603f3d011682016040523d82523d6000602084013e610d0d565b606091505b5091509150818015610d20575060008151115b610d3d5760405163e01c3f9560e01b815260040160405180910390fd5b80806020019051810190610d519190613765565b949350505050565b610d816040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610dec57610dec613210565b6002811115610dfd57610dfd613210565b90525092915050565b6033546001600160a01b0316331480610e295750603e546001600160a01b031633145b610e465760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed291906135e9565b15610ef05760405163840a48d560e01b815260040160405180910390fd5b610ef982611bbe565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f4657604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec80000014610f6f5760405163049696b360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787610fb261223c565b8888886040518863ffffffff1660e01b8152600401610fd6969594939291906137d3565b6000604051808303818588803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051611039929190613822565b60405180910390a15050505050565b6110706040805160808101825260008082526020820181905291810182905290606082015290565b603660006110b385858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121a792505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561112057611120613210565b600281111561113157611131613210565b9052509392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461118457604051633213a66160e21b815260040160405180910390fd5b611192633b9aca008261384c565b156111b0576040516321ddeb1760e21b815260040160405180910390fd5b60006111c0633b9aca0083613860565b6034549091506001600160401b0390811690821611156111f35760405163786be08d60e01b815260040160405180910390fd5b603480548291906000906112119084906001600160401b0316613874565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161127091815260200190565b60405180910390a26112828383612281565b505050565b600054610100900460ff16158080156112a75750600054600160ff909116105b806112c15750303b1580156112c1575060005460ff166001145b6113295760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561134c576000805461ff0019166101001790555b6001600160a01b038216611373576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0384161790558015610ef9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b031633146114025760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146114965760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156114fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152291906135e9565b156115405760405163840a48d560e01b815260040160405180910390fd5b8251845114611562576040516343714afd60e01b815260040160405180910390fd5b60005b84518110156115c6576115be8385838151811061158457611584613695565b602002602001015187848151811061159e5761159e613695565b60200260200101516001600160a01b031661239a9092919063ffffffff16565b600101611565565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165991906135e9565b156116775760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b031660008190036116ab57604051620e680d60e11b815260040160405180910390fd5b60408051608081018252603c54808252603d5462ffffff811660208401526001600160401b03630100000082041693830193909352600160581b909204600f0b6060820152906116fb90876123ec565b6000805b85811015611945573687878381811061171a5761171a613695565b905060200281019061172c9190613893565b80356000908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561179d5761179d613210565b60028111156117ae576117ae613210565b90525090506001816060015160028111156117cb576117cb613210565b146117d757505061193d565b856001600160401b031681604001516001600160401b0316106117fb57505061193d565b60008061180b83898e358761249e565b602089018051929450909250611820826138a9565b62ffffff1690525060608701805183919061183c9083906138c8565b600f0b90525061184c81876138f5565b84356000908152603660209081526040918290208651815492880151938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060870151939950869390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156118f1576118f1613210565b021790555050835160405164ffffffffff90911691506001600160401b038a16907fa91c59033c3423e18b54d0acecebb4972f9ea95aedf5f4cae3b677b02eaf3a3f90600090a3505050505b6001016116ff565b506001600160401b038084166000908152603b6020526040812080548493919291611972918591166138f5565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061094d826125c3565b6000816000815181106119b4576119b4613695565b60200260200101519050919050565b6000816003815181106119d8576119d8613695565b60200260200101516000801b14159050919050565b6119f9600360206136fb565b611a06602083018361364f565b905014611a26576040516313717da960e21b815260040160405180910390fd5b611a76611a36602083018361364f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250508435905060036127cd565b610ef9576040516309bde33960e01b815260040160405180910390fd5b60088414611ab45760405163200591bd60e01b815260040160405180910390fd5b6005611ac2602860016136e8565b611acc91906136e8565b611ad79060206136fb565b8214611af6576040516313717da960e21b815260040160405180910390fd5b6000611b348686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127e592505050565b9050600064ffffffffff8316611b4c602860016136e8565b600b901b179050611b9785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508691508590506127cd565b611bb4576040516309bde33960e01b815260040160405180910390fd5b5050505050505050565b603a54600160401b90046001600160401b031615611bef57604051630e2d94e160e31b815260040160405180910390fd5b603a546001600160401b03428116911603611c1d576040516367db5b8b60e01b815260040160405180910390fd5b6034546000906001600160401b0316611c3a633b9aca0047613860565b611c449190613874565b9050818015611c5a57506001600160401b038116155b15611c78576040516332dea95960e21b815260040160405180910390fd5b60006040518060800160405280611c8e42610c45565b815260200160395462ffffff168152602001836001600160401b031681526020016000600f0b815250905042603a60086101000a8154816001600160401b0302191690836001600160401b03160217905550611ce9816125c3565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b600080611d7784848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061199f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611de657611de6613210565b6002811115611df757611df7613210565b9052509050600081606001516002811115611e1457611e14613210565b14611e32576040516343f8f5e960e01b815260040160405180910390fd5b6001600160401b038016611e78868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7e92505050565b6001600160401b031603611e9f5760405163ab42cfd960e01b815260040160405180910390fd5b6001600160401b038016611ee5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612aa392505050565b6001600160401b031614611f0c5760405163b64ec9a760e01b815260040160405180910390fd5b611f1461223c565b611f1d90613914565b611f59868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612abb92505050565b14611f7757604051632230566760e11b815260040160405180910390fd5b6000611fb5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612ad092505050565b9050611fc58a87878b8b8e611a93565b60398054906000611fd583613938565b9091555050603a54600090600160401b90046001600160401b03161561200d57603a54600160401b90046001600160401b031661201a565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190526000858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156120f0576120f0613210565b02179055505060405164ffffffffff8c1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a16040805164ffffffffff8c1681526001600160401b03838116602083015284168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a1612198633b9aca006001600160401b0384166136fb565b9b9a5050505050505050505050565b600081516030146121cb576040516350b541b960e11b815260040160405180910390fd5b6040516002906121e2908490600090602001613951565b60408051601f19818403018152908290526121fc91613749565b602060405180830381855afa158015612219573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c3f9190613765565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b804710156122d15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611320565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b50509050806112825760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611320565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611282908490612ae8565b6123f8600560036136e8565b6124039060206136fb565b612410602083018361364f565b905014612430576040516313717da960e21b815260040160405180910390fd5b606c612481612442602084018461364f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792505085359050846127cd565b611282576040516309bde33960e01b815260040160405180910390fd5b835160208501516000918291826124b6878488612bba565b9050816001600160401b0316816001600160401b031614612530576124db8183612c9d565b6040805164ffffffffff861681526001600160401b038b8116602083015284168183015290519196507f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df919081900360600190a15b6001600160401b0380821660208b0181905290891660408b01526000036125b7576039805490600061256183613980565b9091555050600260608a015261257685613997565b93508264ffffffffff16886001600160401b03167f2a02361ffa66cf2c2da4682c2355a6adcaa9f6c227b6e6563e68480f9587626a60405160405180910390a35b50505094509492505050565b806020015162ffffff1660000361274d576000633b9aca00826060015183604001516001600160401b03166125f891906138c8565b600f0b61260591906139bd565b604083015160348054929350909160009061262a9084906001600160401b03166138f5565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b81049092166001600160801b0319909216919091179055506000603c55603d80546001600160d81b031916905560335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b1580156126ef57600080fd5b505af1158015612703573d6000803e3d6000fd5b5050603a546040518481526001600160401b0390911692507f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e44915060200160405180910390a25050565b8051603c556020810151603d8054604084015160608501516fffffffffffffffffffffffffffffffff16600160581b026fffffffffffffffffffffffffffffffff60581b196001600160401b039092166301000000026affffffffffffffffffffff1990931662ffffff9095169490941791909117169190911790555b50565b6000836127db868585612cb5565b1495945050505050565b600080600283516127f69190613860565b90506000816001600160401b03811115612812576128126133ce565b60405190808252806020026020018201604052801561283b578160200160208202803683370190505b50905060005b828110156129385760028561285683836136fb565b8151811061286657612866613695565b60200260200101518683600261287c91906136fb565b6128879060016136e8565b8151811061289757612897613695565b60200260200101516040516020016128b9929190918252602082015260400190565b60408051601f19818403018152908290526128d391613749565b602060405180830381855afa1580156128f0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906129139190613765565b82828151811061292557612925613695565b6020908102919091010152600101612841565b50612944600283613860565b91505b8115612a5a5760005b82811015612a475760028261296583836136fb565b8151811061297557612975613695565b60200260200101518383600261298b91906136fb565b6129969060016136e8565b815181106129a6576129a6613695565b60200260200101516040516020016129c8929190918252602082015260400190565b60408051601f19818403018152908290526129e291613749565b602060405180830381855afa1580156129ff573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612a229190613765565b828281518110612a3457612a34613695565b6020908102919091010152600101612950565b50612a53600283613860565b9150612947565b80600081518110612a6d57612a6d613695565b602002602001015192505050919050565b6000610c3f82600581518110612a9657612a96613695565b6020026020010151612d92565b6000610c3f82600681518110612a9657612a96613695565b6000816001815181106119b4576119b4613695565b6000610c3f82600281518110612a9657612a96613695565b6000612b3d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612df99092919063ffffffff16565b8051909150156112825780806020019051810190612b5b91906135e9565b6112825760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611320565b6000612bc8602660016136e8565b612bd39060206136fb565b612be0604084018461364f565b905014612c00576040516313717da960e21b815260040160405180910390fd5b6000612c0d6004856139ed565b64ffffffffff169050612c67612c26604085018561364f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050506020860135846127cd565b612c84576040516309bde33960e01b815260040160405180910390fd5b612c92836020013585612e08565b9150505b9392505050565b6000612c966001600160401b03808416908516613a17565b60008351600014158015612cd4575060208451612cd2919061384c565b155b612cf157604051630228be0560e31b815260040160405180910390fd5b604080516020808201909252848152905b85518111612d8857612d1560028561384c565b600003612d4b578151600052808601516020526020826040600060026107d05a03fa612d4057600080fd5b600284049350612d76565b8086015160005281516020526020826040600060026107d05a03fa612d6f57600080fd5b6002840493505b612d816020826136e8565b9050612d02565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6060610d518484600085612e35565b600080612e16600484613a44565b612e21906040613a6e565b64ffffffffff169050610d5184821b612d92565b606082471015612e965760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611320565b6001600160a01b0385163b612eed5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611320565b600080866001600160a01b03168587604051612f099190613749565b60006040518083038185875af1925050503d8060008114612f46576040519150601f19603f3d011682016040523d82523d6000602084013e612f4b565b606091505b5091509150612f5b828286612f66565b979650505050505050565b60608315612f75575081612c96565b825115612f855782518084602001fd5b8160405162461bcd60e51b81526004016113209190613a8e565b80356001600160401b0381168114612fb657600080fd5b919050565b600060408284031215612fcd57600080fd5b50919050565b600080600060608486031215612fe857600080fd5b612ff184612f9f565b925060208401356001600160401b0381111561300c57600080fd5b61301886828701612fbb565b92505060408401356001600160401b0381111561303457600080fd5b61304086828701612fbb565b9150509250925092565b60008083601f84011261305c57600080fd5b5081356001600160401b0381111561307357600080fd5b6020830191508360208260051b850101111561308e57600080fd5b9250929050565b60008060008060008060008060a0898b0312156130b157600080fd5b6130ba89612f9f565b975060208901356001600160401b038111156130d557600080fd5b6130e18b828c01612fbb565b97505060408901356001600160401b038111156130fd57600080fd5b6131098b828c0161304a565b90975095505060608901356001600160401b0381111561312857600080fd5b6131348b828c0161304a565b90955093505060808901356001600160401b0381111561315357600080fd5b61315f8b828c0161304a565b999c989b5096995094979396929594505050565b60006020828403121561318557600080fd5b612c9682612f9f565b60008083601f8401126131a057600080fd5b5081356001600160401b038111156131b757600080fd5b60208301915083602082850101111561308e57600080fd5b600080602083850312156131e257600080fd5b82356001600160401b038111156131f857600080fd5b6132048582860161318e565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b6003811061324457634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c3f8284613226565b60006020828403121561326857600080fd5b5035919050565b60006080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b03604084015116604083015260608301516132bc6060840182613226565b5092915050565b80151581146127ca57600080fd5b6000602082840312156132e357600080fd5b8135612c96816132c3565b60008060008060006060868803121561330657600080fd5b85356001600160401b0381111561331c57600080fd5b6133288882890161318e565b90965094505060208601356001600160401b0381111561334757600080fd5b6133538882890161318e565b96999598509660400135949350505050565b6001600160a01b03811681146127ca57600080fd5b8035612fb681613365565b6000806040838503121561339857600080fd5b82356133a381613365565b946020939093013593505050565b6000602082840312156133c357600080fd5b8135612c9681613365565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561340c5761340c6133ce565b604052919050565b60006001600160401b0382111561342d5761342d6133ce565b5060051b60200190565b600082601f83011261344857600080fd5b813561345b61345682613414565b6133e4565b8082825260208201915060208360051b86010192508583111561347d57600080fd5b602085015b8381101561349a578035835260209283019201613482565b5095945050505050565b6000806000606084860312156134b957600080fd5b83356001600160401b038111156134cf57600080fd5b8401601f810186136134e057600080fd5b80356134ee61345682613414565b8082825260208201915060208360051b85010192508883111561351057600080fd5b6020840193505b8284101561353b57833561352a81613365565b825260209384019390910190613517565b955050505060208401356001600160401b0381111561355957600080fd5b61356586828701613437565b9250506135746040850161337a565b90509250925092565b60008060006040848603121561359257600080fd5b83356001600160401b038111156135a857600080fd5b6135b486828701612fbb565b93505060208401356001600160401b038111156135d057600080fd5b6135dc8682870161304a565b9497909650939450505050565b6000602082840312156135fb57600080fd5b8151612c96816132c3565b6000808335601e1984360301811261361d57600080fd5b8301803591506001600160401b0382111561363757600080fd5b6020019150600581901b360382131561308e57600080fd5b6000808335601e1984360301811261366657600080fd5b8301803591506001600160401b0382111561368057600080fd5b60200191503681900382131561308e57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156136bd57600080fd5b813564ffffffffff81168114612c9657600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610c3f57610c3f6136d2565b8082028115828204841417610c3f57610c3f6136d2565b81810381811115610c3f57610c3f6136d2565b60005b83811015613740578181015183820152602001613728565b50506000910152565b6000825161375b818460208701613725565b9190910192915050565b60006020828403121561377757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526137bf816020860160208601613725565b601f01601f19169290920160200192915050565b6080815260006137e760808301888a61377e565b82810360208401526137f981886137a7565b9050828103604084015261380e81868861377e565b915050826060830152979650505050505050565b602081526000610d5160208301848661377e565b634e487b7160e01b600052601260045260246000fd5b60008261385b5761385b613836565b500690565b60008261386f5761386f613836565b500490565b6001600160401b038281168282160390811115610c3f57610c3f6136d2565b60008235605e1983360301811261375b57600080fd5b600062ffffff8216806138be576138be6136d2565b6000190192915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715610c3f57610c3f6136d2565b6001600160401b038181168382160190811115610c3f57610c3f6136d2565b80516020808301519190811015612fcd5760001960209190910360031b1b16919050565b60006001820161394a5761394a6136d2565b5060010190565b60008351613963818460208801613725565b6001600160801b0319939093169190920190815260100192915050565b60008161398f5761398f6136d2565b506000190190565b600081600f0b60016001607f1b031981036139b4576139b46136d2565b60000392915050565b80820260008212600160ff1b841416156139d9576139d96136d2565b8181058314821517610c3f57610c3f6136d2565b600064ffffffffff831680613a0457613a04613836565b8064ffffffffff84160491505092915050565b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610c3f57610c3f6136d2565b600064ffffffffff831680613a5b57613a5b613836565b8064ffffffffff84160691505092915050565b64ffffffffff81811683821602908116908181146132bc576132bc6136d2565b602081526000612c9660208301846137a756fea2646970667358221220b4610270d194abb013c8f07f39c7cb97be61bfeacd17e2dcdd4b12d850abfef064736f6c634300081b0033", } // EigenPodABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenPodManager/binding.go b/pkg/bindings/EigenPodManager/binding.go index 638d991e3..5ae4f0e4d 100644 --- a/pkg/bindings/EigenPodManager/binding.go +++ b/pkg/bindings/EigenPodManager/binding.go @@ -32,7 +32,7 @@ var ( // 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\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]}]", - Bin: "0x61012060405234801561001157600080fd5b5060405161296b38038061296b83398101604081905261003091610140565b6001600160a01b0380861660805280851660a05280841660c05280831660e05281166101005261005e610068565b50505050506101b5565b600054610100900460ff16156100d45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610126576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013d57600080fd5b50565b600080600080600060a0868803121561015857600080fd5b855161016381610128565b602087015190955061017481610128565b604087015190945061018581610128565b606087015190935061019681610128565b60808701519092506101a781610128565b809150509295509295909350565b60805160a05160c05160e0516101005161274161022a60003960008181610551015281816105fb01528181610a2d01528181610fda015281816112430152611333015260006104dd015260006102cf01526000818161026301528181610f5901526117c8015260006103af01526127416000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b1461053f578063f2fde38b14610573578063f6848d2414610593578063fabc1cbc146105ce57600080fd5b8063b1344271146104cb578063beffbb89146104ff578063c2c51c401461051f57600080fd5b80639b4e4634116100c65780639b4e46341461044c5780639ba062751461045f578063a38406a314610495578063a6a509be146104b557600080fd5b8063886f1195146103e65780638da5cb5b146104065780639104c3191461042457600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461035b578063715018a61461038857806374cdd7981461039d57806384d81062146103d157600080fd5b8063595c6a67146102f15780635ac86ab7146103065780635c975abb1461034657600080fd5b80631794bb3c116101955780631794bb3c14610231578063292b7b2b14610251578063387b13001461029d57806339b70e38146102bd57600080fd5b80630e81073c146101bc57806310d67a2f146101ef578063136439dd14610211575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004611a63565b6105ee565b6040519081526020015b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004611a8f565b61075f565b005b34801561021d57600080fd5b5061020f61022c366004611aac565b610813565b34801561023d57600080fd5b5061020f61024c366004611ac5565b6108fe565b34801561025d57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e6565b3480156102a957600080fd5b5061020f6102b8366004611ac5565b610a22565b3480156102c957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fd57600080fd5b5061020f610ceb565b34801561031257600080fd5b50610336610321366004611b06565b606654600160ff9092169190911b9081161490565b60405190151581526020016101e6565b34801561035257600080fd5b506066546101dc565b34801561036757600080fd5b506101dc610376366004611a8f565b609b6020526000908152604090205481565b34801561039457600080fd5b5061020f610db3565b3480156103a957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b50610285610dc7565b3480156103f257600080fd5b50606554610285906001600160a01b031681565b34801561041257600080fd5b506033546001600160a01b0316610285565b34801561043057600080fd5b5061028573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61020f61045a366004611b72565b610e3a565b34801561046b57600080fd5b5061028561047a366004611a8f565b6098602052600090815260409020546001600160a01b031681565b3480156104a157600080fd5b506102856104b0366004611a8f565b610efd565b3480156104c157600080fd5b506101dc60995481565b3480156104d757600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061020f61051a366004611a63565b610fcf565b34801561052b57600080fd5b5061020f61053a366004611a63565b6110f6565b34801561054b57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b5061020f61058e366004611a8f565b6113ff565b34801561059f57600080fd5b506103366105ae366004611a8f565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105da57600080fd5b5061020f6105e9366004611aac565b611475565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106395760405163f739589b60e01b815260040160405180910390fd5b6001600160a01b038316610660576040516339b190bb60e11b815260040160405180910390fd5b60008212156106825760405163ef147de160e01b815260040160405180910390fd5b610690633b9aca0083611c01565b156106ae576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b6020526040812054906106d28483611c2b565b6001600160a01b0386166000818152609b60205260409081902083905551919250906000805160206126ec833981519152906107119087815260200190565b60405180910390a2846001600160a01b0316600080516020611dbe8339815191528260405161074291815260200190565b60405180910390a2610754828261157d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d69190611c53565b6001600160a01b0316336001600160a01b0316146108075760405163794821ff60e01b815260040160405180910390fd5b610810816115bf565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561085b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087f9190611c70565b61089c57604051631d77d47760e21b815260040160405180910390fd5b606654818116146108c05760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff161580801561091e5750600054600160ff909116105b806109385750303b158015610938575060005460ff166001145b6109a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156109c3576000805461ff0019166101001790555b6109cc8461164f565b6109d683836116a1565b8015610a1c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6b5760405163f739589b60e01b815260040160405180910390fd5b6001600160a01b038316610a92576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b038216610ab9576040516339b190bb60e11b815260040160405180910390fd5b6000811215610adb5760405163ef147de160e01b815260040160405180910390fd5b610ae9633b9aca0082611c01565b15610b07576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b602052604081205490811215610c70576000610b3382611c92565b905080831115610bca576001600160a01b0385166000908152609b6020526040812055610b608184611cae565b9250846001600160a01b03166000805160206126ec83398151915282604051610b8b91815260200190565b60405180910390a2846001600160a01b0316600080516020611dbe8339815191526000604051610bbd91815260200190565b60405180910390a2610c6e565b6001600160a01b0385166000908152609b6020526040812054610bee908590611c2b565b6001600160a01b0387166000818152609b60205260409081902083905551919250906000805160206126ec83398151915290610c2d9087815260200190565b60405180910390a2856001600160a01b0316600080516020611dbe83398151915282604051610c5e91815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610ccd57600080fd5b505af1158015610ce1573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190611c70565b610d7457604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610dbb611726565b610dc5600061164f565b565b6066546000908190600190811603610df25760405163840a48d560e01b815260040160405180910390fd5b336000908152609860205260409020546001600160a01b031615610e295760405163031a852160e21b815260040160405180910390fd5b6000610e33611780565b9250505090565b606654600090600190811603610e635760405163840a48d560e01b815260040160405180910390fd5b336000908152609860205260409020546001600160a01b031680610e8c57610e89611780565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610ec2908b908b908b908b908b90600401611cea565b6000604051808303818588803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061075957610fc8836001600160a01b031660001b60405180610940016040528061090e8152602001611dde61090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052610fad9291602001611d54565b604051602081830303815290604052805190602001206118e5565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110185760405163f739589b60e01b815260040160405180910390fd5b600081121561103a5760405163ef147de160e01b815260040160405180910390fd5b611048633b9aca0082611c01565b15611066576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0382166000908152609b602052604081205461108a908390611d69565b905060008112156110ae5760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0383166000818152609b60205260409081902083905551600080516020611dbe833981519152906110e99084815260200190565b60405180910390a2505050565b6001600160a01b038083166000908152609860205260409020548391163314611132576040516312e16d7160e11b815260040160405180910390fd5b600260c954036111845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610997565b600260c9556001600160a01b0383166111b0576040516339b190bb60e11b815260040160405180910390fd5b6111be633b9aca0083611d90565b156111dc576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b6020526040812054906112008483611c2b565b6001600160a01b0386166000908152609b60205260408120829055909150611228838361157d565b905080156113905760008112156112f3576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061128785611c92565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156112d657600080fd5b505af11580156112ea573d6000803e3d6000fd5b50505050611390565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b15801561137757600080fd5b505af115801561138b573d6000803e3d6000fd5b505050505b856001600160a01b03166000805160206126ec833981519152866040516113b991815260200190565b60405180910390a2856001600160a01b0316600080516020611dbe833981519152836040516113ea91815260200190565b60405180910390a25050600160c95550505050565b611407611726565b6001600160a01b03811661146c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610997565b6108108161164f565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ec9190611c53565b6001600160a01b0316336001600160a01b03161461151d5760405163794821ff60e01b815260040160405180910390fd5b6066541981196066541916146115465760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016108f3565b600080831361159d576000821361159657506000610759565b5080610759565b600082136115b5576115ae83611c92565b9050610759565b6115ae8383611d69565b6001600160a01b0381166115e6576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b03161580156116c257506001600160a01b03821615155b6116df576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611722826115bf565b5050565b6033546001600160a01b03163314610dc55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610997565b600060996000815461179190611da4565b9091555060408051610940810190915261090e8082526000916118309183913391611dde6020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f198184030181529082905261181c9291602001611d54565b604051602081830303815290604052611941565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b15801561187457600080fd5b505af1158015611888573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090610fc8565b600080844710156119945760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610997565b82516000036119e55760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610997565b8383516020850187f590506001600160a01b038116611a465760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610997565b949350505050565b6001600160a01b038116811461081057600080fd5b60008060408385031215611a7657600080fd5b8235611a8181611a4e565b946020939093013593505050565b600060208284031215611aa157600080fd5b8135610fc881611a4e565b600060208284031215611abe57600080fd5b5035919050565b600080600060608486031215611ada57600080fd5b8335611ae581611a4e565b92506020840135611af581611a4e565b929592945050506040919091013590565b600060208284031215611b1857600080fd5b813560ff81168114610fc857600080fd5b60008083601f840112611b3b57600080fd5b50813567ffffffffffffffff811115611b5357600080fd5b602083019150836020828501011115611b6b57600080fd5b9250929050565b600080600080600060608688031215611b8a57600080fd5b853567ffffffffffffffff811115611ba157600080fd5b611bad88828901611b29565b909650945050602086013567ffffffffffffffff811115611bcd57600080fd5b611bd988828901611b29565b96999598509660400135949350505050565b634e487b7160e01b600052601260045260246000fd5b600082611c1057611c10611beb565b500690565b634e487b7160e01b600052601160045260246000fd5b8082018281126000831280158216821582161715611c4b57611c4b611c15565b505092915050565b600060208284031215611c6557600080fd5b8151610fc881611a4e565b600060208284031215611c8257600080fd5b81518015158114610fc857600080fd5b6000600160ff1b8201611ca757611ca7611c15565b5060000390565b8181038181111561075957610759611c15565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000611cfe606083018789611cc1565b8281036020840152611d11818688611cc1565b9150508260408301529695505050505050565b6000815160005b81811015611d455760208185018101518683015201611d2b565b50600093019283525090919050565b6000611a46611d638386611d24565b84611d24565b8181036000831280158383131683831282161715611d8957611d89611c15565b5092915050565b600082611d9f57611d9f611beb565b500790565b600060018201611db657611db6611c15565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193a2646970667358221220df1d9e9d820a012de04366c57d0d6c8e201316f871e60ad5fd71000be137bc1864736f6c634300081b0033", + Bin: "0x61012060405234801561001157600080fd5b5060405161296b38038061296b83398101604081905261003091610140565b6001600160a01b0380861660805280851660a05280841660c05280831660e05281166101005261005e610068565b50505050506101b5565b600054610100900460ff16156100d45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610126576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013d57600080fd5b50565b600080600080600060a0868803121561015857600080fd5b855161016381610128565b602087015190955061017481610128565b604087015190945061018581610128565b606087015190935061019681610128565b60808701519092506101a781610128565b809150509295509295909350565b60805160a05160c05160e0516101005161274161022a60003960008181610551015281816105fb01528181610a2d01528181610fda015281816112430152611333015260006104dd015260006102cf01526000818161026301528181610f5901526117c8015260006103af01526127416000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b1461053f578063f2fde38b14610573578063f6848d2414610593578063fabc1cbc146105ce57600080fd5b8063b1344271146104cb578063beffbb89146104ff578063c2c51c401461051f57600080fd5b80639b4e4634116100c65780639b4e46341461044c5780639ba062751461045f578063a38406a314610495578063a6a509be146104b557600080fd5b8063886f1195146103e65780638da5cb5b146104065780639104c3191461042457600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461035b578063715018a61461038857806374cdd7981461039d57806384d81062146103d157600080fd5b8063595c6a67146102f15780635ac86ab7146103065780635c975abb1461034657600080fd5b80631794bb3c116101955780631794bb3c14610231578063292b7b2b14610251578063387b13001461029d57806339b70e38146102bd57600080fd5b80630e81073c146101bc57806310d67a2f146101ef578063136439dd14610211575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004611a63565b6105ee565b6040519081526020015b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004611a8f565b61075f565b005b34801561021d57600080fd5b5061020f61022c366004611aac565b610813565b34801561023d57600080fd5b5061020f61024c366004611ac5565b6108fe565b34801561025d57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e6565b3480156102a957600080fd5b5061020f6102b8366004611ac5565b610a22565b3480156102c957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fd57600080fd5b5061020f610ceb565b34801561031257600080fd5b50610336610321366004611b06565b606654600160ff9092169190911b9081161490565b60405190151581526020016101e6565b34801561035257600080fd5b506066546101dc565b34801561036757600080fd5b506101dc610376366004611a8f565b609b6020526000908152604090205481565b34801561039457600080fd5b5061020f610db3565b3480156103a957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b50610285610dc7565b3480156103f257600080fd5b50606554610285906001600160a01b031681565b34801561041257600080fd5b506033546001600160a01b0316610285565b34801561043057600080fd5b5061028573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61020f61045a366004611b72565b610e3a565b34801561046b57600080fd5b5061028561047a366004611a8f565b6098602052600090815260409020546001600160a01b031681565b3480156104a157600080fd5b506102856104b0366004611a8f565b610efd565b3480156104c157600080fd5b506101dc60995481565b3480156104d757600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061020f61051a366004611a63565b610fcf565b34801561052b57600080fd5b5061020f61053a366004611a63565b6110f6565b34801561054b57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b5061020f61058e366004611a8f565b6113ff565b34801561059f57600080fd5b506103366105ae366004611a8f565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105da57600080fd5b5061020f6105e9366004611aac565b611475565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106395760405163f739589b60e01b815260040160405180910390fd5b6001600160a01b038316610660576040516339b190bb60e11b815260040160405180910390fd5b60008212156106825760405163ef147de160e01b815260040160405180910390fd5b610690633b9aca0083611c01565b156106ae576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b6020526040812054906106d28483611c2b565b6001600160a01b0386166000818152609b60205260409081902083905551919250906000805160206126ec833981519152906107119087815260200190565b60405180910390a2846001600160a01b0316600080516020611dbe8339815191528260405161074291815260200190565b60405180910390a2610754828261157d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d69190611c53565b6001600160a01b0316336001600160a01b0316146108075760405163794821ff60e01b815260040160405180910390fd5b610810816115bf565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561085b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087f9190611c70565b61089c57604051631d77d47760e21b815260040160405180910390fd5b606654818116146108c05760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff161580801561091e5750600054600160ff909116105b806109385750303b158015610938575060005460ff166001145b6109a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156109c3576000805461ff0019166101001790555b6109cc8461164f565b6109d683836116a1565b8015610a1c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6b5760405163f739589b60e01b815260040160405180910390fd5b6001600160a01b038316610a92576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b038216610ab9576040516339b190bb60e11b815260040160405180910390fd5b6000811215610adb5760405163ef147de160e01b815260040160405180910390fd5b610ae9633b9aca0082611c01565b15610b07576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b602052604081205490811215610c70576000610b3382611c92565b905080831115610bca576001600160a01b0385166000908152609b6020526040812055610b608184611cae565b9250846001600160a01b03166000805160206126ec83398151915282604051610b8b91815260200190565b60405180910390a2846001600160a01b0316600080516020611dbe8339815191526000604051610bbd91815260200190565b60405180910390a2610c6e565b6001600160a01b0385166000908152609b6020526040812054610bee908590611c2b565b6001600160a01b0387166000818152609b60205260409081902083905551919250906000805160206126ec83398151915290610c2d9087815260200190565b60405180910390a2856001600160a01b0316600080516020611dbe83398151915282604051610c5e91815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610ccd57600080fd5b505af1158015610ce1573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190611c70565b610d7457604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610dbb611726565b610dc5600061164f565b565b6066546000908190600190811603610df25760405163840a48d560e01b815260040160405180910390fd5b336000908152609860205260409020546001600160a01b031615610e295760405163031a852160e21b815260040160405180910390fd5b6000610e33611780565b9250505090565b606654600090600190811603610e635760405163840a48d560e01b815260040160405180910390fd5b336000908152609860205260409020546001600160a01b031680610e8c57610e89611780565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610ec2908b908b908b908b908b90600401611cea565b6000604051808303818588803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061075957610fc8836001600160a01b031660001b60405180610940016040528061090e8152602001611dde61090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052610fad9291602001611d54565b604051602081830303815290604052805190602001206118e5565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110185760405163f739589b60e01b815260040160405180910390fd5b600081121561103a5760405163ef147de160e01b815260040160405180910390fd5b611048633b9aca0082611c01565b15611066576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0382166000908152609b602052604081205461108a908390611d69565b905060008112156110ae5760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0383166000818152609b60205260409081902083905551600080516020611dbe833981519152906110e99084815260200190565b60405180910390a2505050565b6001600160a01b038083166000908152609860205260409020548391163314611132576040516312e16d7160e11b815260040160405180910390fd5b600260c954036111845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610997565b600260c9556001600160a01b0383166111b0576040516339b190bb60e11b815260040160405180910390fd5b6111be633b9aca0083611d90565b156111dc576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b6020526040812054906112008483611c2b565b6001600160a01b0386166000908152609b60205260408120829055909150611228838361157d565b905080156113905760008112156112f3576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061128785611c92565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156112d657600080fd5b505af11580156112ea573d6000803e3d6000fd5b50505050611390565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b15801561137757600080fd5b505af115801561138b573d6000803e3d6000fd5b505050505b856001600160a01b03166000805160206126ec833981519152866040516113b991815260200190565b60405180910390a2856001600160a01b0316600080516020611dbe833981519152836040516113ea91815260200190565b60405180910390a25050600160c95550505050565b611407611726565b6001600160a01b03811661146c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610997565b6108108161164f565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ec9190611c53565b6001600160a01b0316336001600160a01b03161461151d5760405163794821ff60e01b815260040160405180910390fd5b6066541981196066541916146115465760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016108f3565b600080831361159d576000821361159657506000610759565b5080610759565b600082136115b5576115ae83611c92565b9050610759565b6115ae8383611d69565b6001600160a01b0381166115e6576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b03161580156116c257506001600160a01b03821615155b6116df576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611722826115bf565b5050565b6033546001600160a01b03163314610dc55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610997565b600060996000815461179190611da4565b9091555060408051610940810190915261090e8082526000916118309183913391611dde6020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f198184030181529082905261181c9291602001611d54565b604051602081830303815290604052611941565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b15801561187457600080fd5b505af1158015611888573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090610fc8565b600080844710156119945760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610997565b82516000036119e55760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610997565b8383516020850187f590506001600160a01b038116611a465760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610997565b949350505050565b6001600160a01b038116811461081057600080fd5b60008060408385031215611a7657600080fd5b8235611a8181611a4e565b946020939093013593505050565b600060208284031215611aa157600080fd5b8135610fc881611a4e565b600060208284031215611abe57600080fd5b5035919050565b600080600060608486031215611ada57600080fd5b8335611ae581611a4e565b92506020840135611af581611a4e565b929592945050506040919091013590565b600060208284031215611b1857600080fd5b813560ff81168114610fc857600080fd5b60008083601f840112611b3b57600080fd5b50813567ffffffffffffffff811115611b5357600080fd5b602083019150836020828501011115611b6b57600080fd5b9250929050565b600080600080600060608688031215611b8a57600080fd5b853567ffffffffffffffff811115611ba157600080fd5b611bad88828901611b29565b909650945050602086013567ffffffffffffffff811115611bcd57600080fd5b611bd988828901611b29565b96999598509660400135949350505050565b634e487b7160e01b600052601260045260246000fd5b600082611c1057611c10611beb565b500690565b634e487b7160e01b600052601160045260246000fd5b8082018281126000831280158216821582161715611c4b57611c4b611c15565b505092915050565b600060208284031215611c6557600080fd5b8151610fc881611a4e565b600060208284031215611c8257600080fd5b81518015158114610fc857600080fd5b6000600160ff1b8201611ca757611ca7611c15565b5060000390565b8181038181111561075957610759611c15565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000611cfe606083018789611cc1565b8281036020840152611d11818688611cc1565b9150508260408301529695505050505050565b6000815160005b81811015611d455760208185018101518683015201611d2b565b50600093019283525090919050565b6000611a46611d638386611d24565b84611d24565b8181036000831280158383131683831282161715611d8957611d89611c15565b5092915050565b600082611d9f57611d9f611beb565b500790565b600060018201611db657611db6611c15565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193a2646970667358221220e4ffeebe0cfc3dbe2c2146c1f161bd9a2b47ecfcc79aafee8e07bb3e86f51f6964736f6c634300081b0033", } // EigenPodManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenStrategy/binding.go b/pkg/bindings/EigenStrategy/binding.go index 18a5accf4..114931469 100644 --- a/pkg/bindings/EigenStrategy/binding.go +++ b/pkg/bindings/EigenStrategy/binding.go @@ -32,7 +32,7 @@ var ( // EigenStrategyMetaData contains all meta data concerning the EigenStrategy contract. var EigenStrategyMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_EIGEN\",\"type\":\"address\",\"internalType\":\"contractIEigen\"},{\"name\":\"_bEIGEN\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"WithdrawalAmountExceedsDeposit\",\"inputs\":[]}]", - Bin: "0x60a060405234801561001057600080fd5b5060405161193638038061193683398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b6080516117ca61016c600039600081816101af015281816105240152818161098f0152610a2e01526117ca6000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80637a8b2637116100c3578063ce7c2ac21161007c578063ce7c2ac2146102da578063d9caed12146102ed578063e3dae51c14610300578063f3e7387514610313578063fabc1cbc14610326578063fdc371ce1461033957600080fd5b80637a8b263714610260578063886f1195146102735780638c8710191461028c5780638f6a62401461029f578063ab5921e1146102b2578063c0c53b8b146102c757600080fd5b806347e7ef241161011557806347e7ef24146101e8578063485cc955146101fb578063553ca5f81461020e578063595c6a67146102215780635ac86ab7146102295780635c975abb1461025857600080fd5b806310d67a2f14610152578063136439dd146101675780632495a5991461017a57806339b70e38146101aa5780633a98ef39146101d1575b600080fd5b610165610160366004611449565b61034c565b005b610165610175366004611466565b610400565b60325461018d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61018d7f000000000000000000000000000000000000000000000000000000000000000081565b6101da60335481565b6040519081526020016101a1565b6101da6101f636600461147f565b6104f0565b6101656102093660046114ab565b610641565b6101da61021c366004611449565b610718565b61016561072c565b6102486102373660046114f3565b6001805460ff9092161b9081161490565b60405190151581526020016101a1565b6001546101da565b6101da61026e366004611466565b6107f9565b60005461018d906201000090046001600160a01b031681565b6101da61029a366004611466565b610844565b6101da6102ad366004611449565b61084f565b6102ba61085d565b6040516101a19190611534565b6101656102d5366004611567565b61087d565b6101da6102e8366004611449565b610967565b6101656102fb3660046115b2565b6109fc565b6101da61030e366004611466565b610b1c565b6101da610321366004611466565b610b55565b610165610334366004611466565b610b60565b60645461018d906001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c391906115f3565b6001600160a01b0316336001600160a01b0316146103f45760405163794821ff60e01b815260040160405180910390fd5b6103fd81610c68565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561044d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104719190611610565b61048e57604051631d77d47760e21b815260040160405180910390fd5b600154818116146104b25760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036105195760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610562576040516348da714f60e01b815260040160405180910390fd5b61056c8484610d06565b603354600061057d6103e883611648565b905060006103e861058c610dc5565b6105969190611648565b905060006105a4878361165b565b9050806105b1848961166e565b6105bb9190611685565b9550856000036105de57604051630c392ed360e11b815260040160405180910390fd5b6105e88685611648565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561061d57604051632f14e8a360e11b815260040160405180910390fd5b610636826103e86033546106319190611648565b610e37565b505050505092915050565b600054610100900460ff16158080156106615750600054600160ff909116105b8061067b5750303b15801561067b575060005460ff166001145b6106a05760405162461bcd60e51b8152600401610697906116a7565b60405180910390fd5b6000805460ff1916600117905580156106c3576000805461ff0019166101001790555b6106cd8383610e8b565b8015610713576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061072661026e83610967565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079d9190611610565b6107ba57604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e860335461080c9190611648565b905060006103e861081b610dc5565b6108259190611648565b905081610832858361166e565b61083c9190611685565b949350505050565b600061072682610b1c565b600061072661032183610967565b60606040518060800160405280604d8152602001611748604d9139905090565b600054610100900460ff161580801561089d5750600054600160ff909116105b806108b75750303b1580156108b7575060005460ff166001145b6108d35760405162461bcd60e51b8152600401610697906116a7565b6000805460ff1916600117905580156108f6576000805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03861617905561091b8383610e8b565b8015610961576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072691906116f5565b60018054600290811603610a235760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6c576040516348da714f60e01b815260040160405180910390fd5b610a77848484610fd6565b60335480831115610a9b57604051633a5d3b0160e21b815260040160405180910390fd5b6000610aa96103e883611648565b905060006103e8610ab8610dc5565b610ac29190611648565b9050600082610ad1878461166e565b610adb9190611685565b9050610ae7868561165b565b603355610b07610af7828461165b565b6103e86033546106319190611648565b610b1288888361101c565b5050505050505050565b6000806103e8603354610b2f9190611648565b905060006103e8610b3e610dc5565b610b489190611648565b905080610832838661166e565b6000610726826107f9565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd791906115f3565b6001600160a01b0316336001600160a01b031614610c085760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610c315760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104e5565b6001600160a01b038116610c8f576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b0383811691161480610d2f57506064546001600160a01b038381169116145b610d4c57604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610dc157606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e90602401600060405180830381600087803b158015610da857600080fd5b505af1158015610dbc573d6000803e3d6000fd5b505050505b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3291906116f5565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610e6b84670de0b6b3a764000061166e565b610e759190611685565b6040519081526020015b60405180910390a15050565b600054610100900460ff16610ef65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610697565b603280546001600160a01b0319166001600160a01b038416179055610f1c81600061111d565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb5919061170e565b604080516001600160a01b03909316835260ff909116602083015201610e7f565b6032546001600160a01b0383811691161480610fff57506064546001600160a01b038381169116145b61071357604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b03908116908316036111095760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015611085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a99190611610565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb090602401600060405180830381600087803b1580156110f057600080fd5b505af1158015611104573d6000803e3d6000fd5b505050505b6107136001600160a01b03831684836111a4565b6000546201000090046001600160a01b031615801561114457506001600160a01b03821615155b611161576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610dc182610c68565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610713928692916000916112349185169084906112b1565b80519091501561071357808060200190518101906112529190611610565b6107135760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610697565b60606112c084846000856112ca565b90505b9392505050565b60608247101561132b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610697565b6001600160a01b0385163b6113825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b600080866001600160a01b0316858760405161139e919061172b565b60006040518083038185875af1925050503d80600081146113db576040519150601f19603f3d011682016040523d82523d6000602084013e6113e0565b606091505b50915091506113f08282866113fb565b979650505050505050565b6060831561140a5750816112c3565b82511561141a5782518084602001fd5b8160405162461bcd60e51b81526004016106979190611534565b6001600160a01b03811681146103fd57600080fd5b60006020828403121561145b57600080fd5b81356112c381611434565b60006020828403121561147857600080fd5b5035919050565b6000806040838503121561149257600080fd5b823561149d81611434565b946020939093013593505050565b600080604083850312156114be57600080fd5b82356114c981611434565b915060208301356114d981611434565b809150509250929050565b60ff811681146103fd57600080fd5b60006020828403121561150557600080fd5b81356112c3816114e4565b60005b8381101561152b578181015183820152602001611513565b50506000910152565b6020815260008251806020840152611553816040850160208701611510565b601f01601f19169190910160400192915050565b60008060006060848603121561157c57600080fd5b833561158781611434565b9250602084013561159781611434565b915060408401356115a781611434565b809150509250925092565b6000806000606084860312156115c757600080fd5b83356115d281611434565b925060208401356115e281611434565b929592945050506040919091013590565b60006020828403121561160557600080fd5b81516112c381611434565b60006020828403121561162257600080fd5b815180151581146112c357600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072657610726611632565b8181038181111561072657610726611632565b808202811582820484141761072657610726611632565b6000826116a257634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60006020828403121561170757600080fd5b5051919050565b60006020828403121561172057600080fd5b81516112c3816114e4565b6000825161173d818460208701611510565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220f8544abf321dcdbe9561b78dc03e01ee260e55de4f4f8a7e823fc885c8e73ad364736f6c634300081b0033", + Bin: "0x60a060405234801561001057600080fd5b5060405161193638038061193683398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b6080516117ca61016c600039600081816101af015281816105240152818161098f0152610a2e01526117ca6000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80637a8b2637116100c3578063ce7c2ac21161007c578063ce7c2ac2146102da578063d9caed12146102ed578063e3dae51c14610300578063f3e7387514610313578063fabc1cbc14610326578063fdc371ce1461033957600080fd5b80637a8b263714610260578063886f1195146102735780638c8710191461028c5780638f6a62401461029f578063ab5921e1146102b2578063c0c53b8b146102c757600080fd5b806347e7ef241161011557806347e7ef24146101e8578063485cc955146101fb578063553ca5f81461020e578063595c6a67146102215780635ac86ab7146102295780635c975abb1461025857600080fd5b806310d67a2f14610152578063136439dd146101675780632495a5991461017a57806339b70e38146101aa5780633a98ef39146101d1575b600080fd5b610165610160366004611449565b61034c565b005b610165610175366004611466565b610400565b60325461018d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61018d7f000000000000000000000000000000000000000000000000000000000000000081565b6101da60335481565b6040519081526020016101a1565b6101da6101f636600461147f565b6104f0565b6101656102093660046114ab565b610641565b6101da61021c366004611449565b610718565b61016561072c565b6102486102373660046114f3565b6001805460ff9092161b9081161490565b60405190151581526020016101a1565b6001546101da565b6101da61026e366004611466565b6107f9565b60005461018d906201000090046001600160a01b031681565b6101da61029a366004611466565b610844565b6101da6102ad366004611449565b61084f565b6102ba61085d565b6040516101a19190611534565b6101656102d5366004611567565b61087d565b6101da6102e8366004611449565b610967565b6101656102fb3660046115b2565b6109fc565b6101da61030e366004611466565b610b1c565b6101da610321366004611466565b610b55565b610165610334366004611466565b610b60565b60645461018d906001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c391906115f3565b6001600160a01b0316336001600160a01b0316146103f45760405163794821ff60e01b815260040160405180910390fd5b6103fd81610c68565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561044d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104719190611610565b61048e57604051631d77d47760e21b815260040160405180910390fd5b600154818116146104b25760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036105195760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610562576040516348da714f60e01b815260040160405180910390fd5b61056c8484610d06565b603354600061057d6103e883611648565b905060006103e861058c610dc5565b6105969190611648565b905060006105a4878361165b565b9050806105b1848961166e565b6105bb9190611685565b9550856000036105de57604051630c392ed360e11b815260040160405180910390fd5b6105e88685611648565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561061d57604051632f14e8a360e11b815260040160405180910390fd5b610636826103e86033546106319190611648565b610e37565b505050505092915050565b600054610100900460ff16158080156106615750600054600160ff909116105b8061067b5750303b15801561067b575060005460ff166001145b6106a05760405162461bcd60e51b8152600401610697906116a7565b60405180910390fd5b6000805460ff1916600117905580156106c3576000805461ff0019166101001790555b6106cd8383610e8b565b8015610713576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061072661026e83610967565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079d9190611610565b6107ba57604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e860335461080c9190611648565b905060006103e861081b610dc5565b6108259190611648565b905081610832858361166e565b61083c9190611685565b949350505050565b600061072682610b1c565b600061072661032183610967565b60606040518060800160405280604d8152602001611748604d9139905090565b600054610100900460ff161580801561089d5750600054600160ff909116105b806108b75750303b1580156108b7575060005460ff166001145b6108d35760405162461bcd60e51b8152600401610697906116a7565b6000805460ff1916600117905580156108f6576000805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03861617905561091b8383610e8b565b8015610961576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072691906116f5565b60018054600290811603610a235760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6c576040516348da714f60e01b815260040160405180910390fd5b610a77848484610fd6565b60335480831115610a9b57604051633a5d3b0160e21b815260040160405180910390fd5b6000610aa96103e883611648565b905060006103e8610ab8610dc5565b610ac29190611648565b9050600082610ad1878461166e565b610adb9190611685565b9050610ae7868561165b565b603355610b07610af7828461165b565b6103e86033546106319190611648565b610b1288888361101c565b5050505050505050565b6000806103e8603354610b2f9190611648565b905060006103e8610b3e610dc5565b610b489190611648565b905080610832838661166e565b6000610726826107f9565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd791906115f3565b6001600160a01b0316336001600160a01b031614610c085760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610c315760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104e5565b6001600160a01b038116610c8f576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b0383811691161480610d2f57506064546001600160a01b038381169116145b610d4c57604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610dc157606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e90602401600060405180830381600087803b158015610da857600080fd5b505af1158015610dbc573d6000803e3d6000fd5b505050505b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3291906116f5565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610e6b84670de0b6b3a764000061166e565b610e759190611685565b6040519081526020015b60405180910390a15050565b600054610100900460ff16610ef65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610697565b603280546001600160a01b0319166001600160a01b038416179055610f1c81600061111d565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb5919061170e565b604080516001600160a01b03909316835260ff909116602083015201610e7f565b6032546001600160a01b0383811691161480610fff57506064546001600160a01b038381169116145b61071357604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b03908116908316036111095760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015611085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a99190611610565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb090602401600060405180830381600087803b1580156110f057600080fd5b505af1158015611104573d6000803e3d6000fd5b505050505b6107136001600160a01b03831684836111a4565b6000546201000090046001600160a01b031615801561114457506001600160a01b03821615155b611161576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610dc182610c68565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610713928692916000916112349185169084906112b1565b80519091501561071357808060200190518101906112529190611610565b6107135760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610697565b60606112c084846000856112ca565b90505b9392505050565b60608247101561132b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610697565b6001600160a01b0385163b6113825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b600080866001600160a01b0316858760405161139e919061172b565b60006040518083038185875af1925050503d80600081146113db576040519150601f19603f3d011682016040523d82523d6000602084013e6113e0565b606091505b50915091506113f08282866113fb565b979650505050505050565b6060831561140a5750816112c3565b82511561141a5782518084602001fd5b8160405162461bcd60e51b81526004016106979190611534565b6001600160a01b03811681146103fd57600080fd5b60006020828403121561145b57600080fd5b81356112c381611434565b60006020828403121561147857600080fd5b5035919050565b6000806040838503121561149257600080fd5b823561149d81611434565b946020939093013593505050565b600080604083850312156114be57600080fd5b82356114c981611434565b915060208301356114d981611434565b809150509250929050565b60ff811681146103fd57600080fd5b60006020828403121561150557600080fd5b81356112c3816114e4565b60005b8381101561152b578181015183820152602001611513565b50506000910152565b6020815260008251806020840152611553816040850160208701611510565b601f01601f19169190910160400192915050565b60008060006060848603121561157c57600080fd5b833561158781611434565b9250602084013561159781611434565b915060408401356115a781611434565b809150509250925092565b6000806000606084860312156115c757600080fd5b83356115d281611434565b925060208401356115e281611434565b929592945050506040919091013590565b60006020828403121561160557600080fd5b81516112c381611434565b60006020828403121561162257600080fd5b815180151581146112c357600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072657610726611632565b8181038181111561072657610726611632565b808202811582820484141761072657610726611632565b6000826116a257634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60006020828403121561170757600080fd5b5051919050565b60006020828403121561172057600080fd5b81516112c3816114e4565b6000825161173d818460208701611510565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220dac3a527174fe3504d7e81657b13de972a5eae57c5eb675c467868166380ef9664736f6c634300081b0033", } // EigenStrategyABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IDelegationManager/binding.go b/pkg/bindings/IDelegationManager/binding.go index 6475ed648..2f5320df7 100644 --- a/pkg/bindings/IDelegationManager/binding.go +++ b/pkg/bindings/IDelegationManager/binding.go @@ -62,7 +62,7 @@ type ISignatureUtilsSignatureWithExpiry 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\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"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\":\"StakerOptOutWindowBlocksCannotDecrease\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalExeedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotStaker\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotCurrentlyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureSaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksCannotDecrease\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotStaker\",\"inputs\":[]}]", } // IDelegationManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/RewardsCoordinator/binding.go b/pkg/bindings/RewardsCoordinator/binding.go index 0343f698e..5acdccbb3 100644 --- a/pkg/bindings/RewardsCoordinator/binding.go +++ b/pkg/bindings/RewardsCoordinator/binding.go @@ -78,7 +78,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf struct { // RewardsCoordinatorMetaData contains all meta data concerning the RewardsCoordinator contract. var RewardsCoordinatorMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"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\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"AmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CommissionBipsExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsForAllSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofLengthNotMultipleOf32\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]}]", - Bin: "0x61018060405234801561001157600080fd5b506040516137c73803806137c7833981016040819052610030916102d0565b86868686868686610041858261035b565b63ffffffff16156100e55760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b6100f2620151808661035b565b63ffffffff16156101915760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a4016100dc565b6001600160a01b0396871661012052949095166101405263ffffffff92831660805290821660a052811660c05291821660e05216610100526101d16101e3565b50504661016052506103919350505050565b600054610100900460ff161561024b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100dc565b60005460ff908116101561029d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146102b457600080fd5b50565b805163ffffffff811681146102cb57600080fd5b919050565b600080600080600080600060e0888a0312156102eb57600080fd5b87516102f68161029f565b60208901519097506103078161029f565b9550610315604089016102b7565b9450610323606089016102b7565b9350610331608089016102b7565b925061033f60a089016102b7565b915061034d60c089016102b7565b905092959891949750929550565b600063ffffffff83168061037f57634e487b7160e01b600052601260045260246000fd5b8063ffffffff84160691505092915050565b60805160a05160c05160e051610100516101205161014051610160516133a061042760003960006118150152600081816104f501526121d8015260006107b501526000818161040c01526120c301526000818161033201526121120152600081816104ce01526120720152600081816107140152611f4701526000818161068c01528181611f9e0152611ffd01526133a06000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c80637b8f8b051161019d578063d4540a55116100e9578063f698da25116100a2578063fabc1cbc1161007c578063fabc1cbc14610818578063fbf1e2c11461082b578063fce36c7d1461083e578063ff9f6cce1461085157600080fd5b8063f698da25146107ea578063f8cd8448146107f2578063f96abf2e1461080557600080fd5b8063d4540a5514610764578063de02e50314610777578063e221b2451461078a578063e810ce211461079d578063ea4d3c9b146107b0578063f2fde38b146107d757600080fd5b80639be3d4e411610156578063aebd8bae11610130578063aebd8bae146106c1578063bb7e451f146106ef578063bf21a8aa1461070f578063c46db6061461073657600080fd5b80639be3d4e41461067f5780639d45c28114610687578063a0169ddd146106ae57600080fd5b80637b8f8b05146105fa578063863cb9a914610602578063865c695314610615578063886f1195146106405780638da5cb5b146106535780639104c3191461066457600080fd5b806337838ed01161025c57806358baaa3e116102155780635c975abb116101ef5780635c975abb146105a95780635e9d8348146105b15780636d21117e146105c4578063715018a6146105f257600080fd5b806358baaa3e1461056b578063595c6a671461057e5780635ac86ab71461058657600080fd5b806337838ed0146104c957806339b70e38146104f05780633a8c0786146105175780633ccc861d1461052e5780633efe1db6146105415780634d18cc351461055457600080fd5b8063131433b4116102ae578063131433b414610407578063136439dd1461042e578063149bc8721461044157806322f19a64146104625780632b9f64a41461047557806336af41fa146104b657600080fd5b806218572c146102f557806304a0c5021461032d578063092db007146103695780630e9a53cf146103915780630eb38345146103df57806310d67a2f146103f4575b600080fd5b610318610303366004612bc0565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103547f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610324565b60cb5461037e90600160e01b900461ffff1681565b60405161ffff9091168152602001610324565b610399610864565b604051610324919060006080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b6103f26103ed366004612beb565b610943565b005b6103f2610402366004612bc0565b6109c5565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103f261043c366004612c24565b610a79565b61045461044f366004612c55565b610b64565b604051908152602001610324565b61037e610470366004612c71565b610bda565b61049e610483366004612bc0565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610324565b6103f26104c4366004612c9f565b610bef565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b61049e7f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461035490600160a01b900463ffffffff1681565b6103f261053c366004612d29565b610db7565b6103f261054f366004612d89565b6110a6565b60cb5461035490600160c01b900463ffffffff1681565b6103f2610579366004612db5565b61129c565b6103f26112ad565b610318610594366004612dd0565b606654600160ff9092169190911b9081161490565b606654610454565b6103186105bf366004612df3565b611375565b6103186105d2366004612e28565b60cf60209081526000928352604080842090915290825290205460ff1681565b6103f2611402565b60ca54610454565b6103f2610610366004612bc0565b611416565b610454610623366004612c71565b60cd60209081526000928352604080842090915290825290205481565b60655461049e906001600160a01b031681565b6033546001600160a01b031661049e565b61049e73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610399611427565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103f26106bc366004612bc0565b6114c5565b6103186106cf366004612e28565b60d260209081526000928352604080842090915290825290205460ff1681565b6104546106fd366004612bc0565b60ce6020526000908152604090205481565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b610318610744366004612e28565b60d060209081526000928352604080842090915290825290205460ff1681565b6103f2610772366004612e71565b611524565b610399610785366004612c24565b61166c565b6103f2610798366004612ee4565b6116fe565b6103546107ab366004612c24565b61170f565b61049e7f000000000000000000000000000000000000000000000000000000000000000081565b6103f26107e5366004612bc0565b61179b565b610454611811565b610454610800366004612c55565b61184e565b6103f2610813366004612db5565b61185f565b6103f2610826366004612c24565b6119b2565b60cb5461049e906001600160a01b031681565b6103f261084c366004612c9f565b611aba565b6103f261085f366004612c9f565b611c2d565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b801561093f57600060ca6108a1600184612f15565b815481106108b1576108b1612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615801560608301819052919250906109215750806040015163ffffffff164210155b1561092c5792915050565b508061093781612f3e565b91505061088c565b5090565b61094b611dd0565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3c9190612f55565b6001600160a01b0316336001600160a01b031614610a6d5760405163794821ff60e01b815260040160405180910390fd5b610a7681611e2a565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae59190612f72565b610b0257604051631d77d47760e21b815260040160405180910390fd5b60665481811614610b265760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610b746020840184612bc0565b8360200135604051602001610bbd9392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60cb54600160e01b900461ffff165b92915050565b606654600190600290811603610c185760405163840a48d560e01b815260040160405180910390fd5b33600090815260d1602052604090205460ff16610c485760405163289d7fb960e01b815260040160405180910390fd5b600260975403610c735760405162461bcd60e51b8152600401610c6a90612f8f565b60405180910390fd5b600260975560005b82811015610dac5736848483818110610c9657610c96612f28565b9050602002810190610ca89190612fc6565b33600081815260ce60209081526040808320549051949550939192610cd3929091859187910161310b565b604051602081830303815290604052805190602001209050610cf483611eba565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610d2790839061313b565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610d6f90889061314e565b60405180910390a4610da1333060408601803590610d909060208901612bc0565b6001600160a01b03169291906122ca565b505050600101610c7b565b505060016097555050565b606654600290600490811603610de05760405163840a48d560e01b815260040160405180910390fd5b600260975403610e025760405162461bcd60e51b8152600401610c6a90612f8f565b6002609755600060ca610e186020860186612db5565b63ffffffff1681548110610e2e57610e2e612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050610e8f848261233b565b6000610ea16080860160608701612bc0565b6001600160a01b03808216600090815260cc60205260409020549192501680610ec75750805b336001600160a01b03821614610eef576040516208978560e71b815260040160405180910390fd5b60005b610eff60a0880188613161565b90508110156110985736610f1660e08901896131b2565b83818110610f2657610f26612f28565b6001600160a01b038716600090815260cd602090815260408083209302949094019450929091508290610f5b90850185612bc0565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080826020013511610fa25760405163aa385e8160e01b815260040160405180910390fd5b6000610fb2826020850135612f15565b6001600160a01b038716600090815260cd60209081526040822092935085018035929190610fe09087612bc0565b6001600160a01b0316815260208082019290925260400160002091909155611022908a90839061101290870187612bc0565b6001600160a01b031691906124df565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31906110666020890189612bc0565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101610ef2565b505060016097555050505050565b6066546003906008908116036110cf5760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b031633146110fa5760405163f6f1e6f160e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161112d57604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff1610611153576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb5460009061117390600160a01b900463ffffffff16426131fc565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b6112a4611dd0565b610a768161250f565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190612f72565b61133657604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60006113fa8260ca61138a6020830183612db5565b63ffffffff16815481106113a0576113a0612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015261233b565b506001919050565b61140a611dd0565b6114146000612580565b565b61141e611dd0565b610a76816125d2565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461145b90600190612f15565b8154811061146b5761146b612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b600054610100900460ff16158080156115445750600054600160ff909116105b8061155e5750303b15801561155e575060005460ff166001145b6115c15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c6a565b6000805460ff1916600117905580156115e4576000805461ff0019166101001790555b6115ec61262e565b60c9556115f986866126c5565b61160287612580565b61160b846125d2565b6116148361250f565b61161d8261274a565b8015611663576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca82815481106116a3576116a3612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b611706611dd0565b610a768161274a565b60ca546000905b63ffffffff811615611781578260ca611730600184613218565b63ffffffff168154811061174657611746612f28565b9060005260206000209060020201600001540361176f57611768600182613218565b9392505050565b8061177981613234565b915050611716565b5060405163504570e360e01b815260040160405180910390fd5b6117a3611dd0565b6001600160a01b0381166118085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c6a565b610a7681612580565b60007f00000000000000000000000000000000000000000000000000000000000000004603611841575060c95490565b61184961262e565b905090565b60006001610b746020840184612bc0565b6066546003906008908116036118885760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b031633146118b35760405163f6f1e6f160e01b815260040160405180910390fd5b60ca5463ffffffff8316106118db576040516394a8d38960e01b815260040160405180910390fd5b600060ca8363ffffffff16815481106118f6576118f6612f28565b906000526020600020906002020190508060010160089054906101000a900460ff161561193657604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061196757604051631748afff60e01b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a299190612f55565b6001600160a01b0316336001600160a01b031614611a5a5760405163794821ff60e01b815260040160405180910390fd5b606654198119606654191614611a835760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610b59565b606654600090600190811603611ae35760405163840a48d560e01b815260040160405180910390fd5b600260975403611b055760405162461bcd60e51b8152600401610c6a90612f8f565b600260975560005b82811015610dac5736848483818110611b2857611b28612f28565b9050602002810190611b3a9190612fc6565b33600081815260ce60209081526040808320549051949550939192611b65929091859187910161310b565b604051602081830303815290604052805190602001209050611b8683611eba565b33600090815260cf602090815260408083208484529091529020805460ff19166001908117909155611bb990839061313b565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190611c0190889061314e565b60405180910390a4611c22333060408601803590610d909060208901612bc0565b505050600101611b0d565b606654600490601090811603611c565760405163840a48d560e01b815260040160405180910390fd5b33600090815260d1602052604090205460ff16611c865760405163289d7fb960e01b815260040160405180910390fd5b600260975403611ca85760405162461bcd60e51b8152600401610c6a90612f8f565b600260975560005b82811015610dac5736848483818110611ccb57611ccb612f28565b9050602002810190611cdd9190612fc6565b33600081815260ce60209081526040808320549051949550939192611d08929091859187910161310b565b604051602081830303815290604052805190602001209050611d2983611eba565b33600090815260d2602090815260408083208484529091529020805460ff19166001908117909155611d5c90839061313b565b33600081815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b90611da490889061314e565b60405180910390a4611dc5333060408601803590610d909060208901612bc0565b505050600101611cb0565b6033546001600160a01b031633146114145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c6a565b6001600160a01b038116611e51576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611ec682806131b2565b905011611ee65760405163796cc52560e01b815260040160405180910390fd5b6000816040013511611f0b576040516365e52d5160e11b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff81604001351115611f405760405163070b5a6f60e21b815260040160405180910390fd5b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611f7760a0830160808401612db5565b63ffffffff161115611f9c57604051630dd0b9f560e21b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000611fcd60a0830160808401612db5565b611fd7919061326a565b63ffffffff1615611ffb57604051632380fd2760e21b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061202c6080830160608401612db5565b612036919061326a565b63ffffffff161561205a57604051630ea11a0360e31b815260040160405180910390fd5b61206a6080820160608301612db5565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16426120a29190612f15565b111580156120eb57506120bb6080820160608301612db5565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b6121085760405163041aa75760e11b815260040160405180910390fd5b61213863ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164261313b565b6121486080830160608401612db5565b63ffffffff16111561216d57604051637ee2b44360e01b815260040160405180910390fd5b6000805b61217b83806131b2565b90508110156122c557600061219084806131b2565b838181106121a0576121a0612f28565b6121b69260206040909202019081019150612bc0565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015612221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122459190612f72565b8061226c57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61228957604051632711b74d60e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b0316106122bb5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101612171565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526123359085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526127b5565b50505050565b80606001511561235e57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff1642101561238957604051631437a2bb60e31b815260040160405180910390fd5b61239660c0830183613161565b90506123a560a0840184613161565b9050146123c5576040516343714afd60e01b815260040160405180910390fd5b6123d260e08301836131b2565b90506123e160c0840184613161565b905014612401576040516343714afd60e01b815260040160405180910390fd5b805161242d906124176040850160208601612db5565b6124246040860186613292565b86606001612887565b60005b61243d60a0840184613161565b90508110156122c5576124d7608084013561245b60a0860186613161565b8481811061246b5761246b612f28565b90506020020160208101906124809190612db5565b61248d60c0870187613161565b8581811061249d5761249d612f28565b90506020028101906124af9190613292565b6124bc60e08901896131b2565b878181106124cc576124cc612f28565b905060400201612936565b600101612430565b6040516001600160a01b0383166024820152604481018290526122c590849063a9059cbb60e01b906064016122fe565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156126e657506001600160a01b03821615155b612703576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261274682611e2a565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061280a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129759092919063ffffffff16565b8051909150156122c557808060200190518101906128289190612f72565b6122c55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c6a565b6128926020836132d9565b6001901b8463ffffffff16106128bb576040516369ca16c960e01b815260040160405180910390fd5b60006128c682610b64565b905061291184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff891661298c565b61292e576040516369ca16c960e01b815260040160405180910390fd5b505050505050565b6129416020836132d9565b6001901b8463ffffffff161061296a5760405163054ff4df60e51b815260040160405180910390fd5b60006128c68261184e565b606061298484846000856129a4565b949350505050565b60008361299a868585612ad5565b1495945050505050565b606082471015612a055760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c6a565b6001600160a01b0385163b612a5c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c6a565b600080866001600160a01b03168587604051612a789190613311565b60006040518083038185875af1925050503d8060008114612ab5576040519150601f19603f3d011682016040523d82523d6000602084013e612aba565b606091505b5091509150612aca828286612b72565b979650505050505050565b600060208451612ae59190613323565b15612b0357604051630228be0560e31b815260040160405180910390fd5b8260205b85518111612b6957612b1a600285613323565b600003612b3e57816000528086015160205260406000209150600284049350612b57565b8086015160005281602052604060002091506002840493505b612b6260208261313b565b9050612b07565b50949350505050565b60608315612b81575081611768565b825115612b915782518084602001fd5b8160405162461bcd60e51b8152600401610c6a9190613337565b6001600160a01b0381168114610a7657600080fd5b600060208284031215612bd257600080fd5b813561176881612bab565b8015158114610a7657600080fd5b60008060408385031215612bfe57600080fd5b8235612c0981612bab565b91506020830135612c1981612bdd565b809150509250929050565b600060208284031215612c3657600080fd5b5035919050565b600060408284031215612c4f57600080fd5b50919050565b600060408284031215612c6757600080fd5b6117688383612c3d565b60008060408385031215612c8457600080fd5b8235612c8f81612bab565b91506020830135612c1981612bab565b60008060208385031215612cb257600080fd5b823567ffffffffffffffff811115612cc957600080fd5b8301601f81018513612cda57600080fd5b803567ffffffffffffffff811115612cf157600080fd5b8560208260051b8401011115612d0657600080fd5b6020919091019590945092505050565b60006101008284031215612c4f57600080fd5b60008060408385031215612d3c57600080fd5b823567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612d16565b9250506020830135612c1981612bab565b803563ffffffff81168114612d8457600080fd5b919050565b60008060408385031215612d9c57600080fd5b82359150612dac60208401612d70565b90509250929050565b600060208284031215612dc757600080fd5b61176882612d70565b600060208284031215612de257600080fd5b813560ff8116811461176857600080fd5b600060208284031215612e0557600080fd5b813567ffffffffffffffff811115612e1c57600080fd5b61298484828501612d16565b60008060408385031215612e3b57600080fd5b8235612e4681612bab565b946020939093013593505050565b8035612d8481612bab565b803561ffff81168114612d8457600080fd5b60008060008060008060c08789031215612e8a57600080fd5b8635612e9581612bab565b95506020870135612ea581612bab565b9450604087013593506060870135612ebc81612bab565b9250612eca60808801612d70565b9150612ed860a08801612e5f565b90509295509295509295565b600060208284031215612ef657600080fd5b61176882612e5f565b634e487b7160e01b600052601160045260246000fd5b81810381811115610be957610be9612eff565b634e487b7160e01b600052603260045260246000fd5b600081612f4d57612f4d612eff565b506000190190565b600060208284031215612f6757600080fd5b815161176881612bab565b600060208284031215612f8457600080fd5b815161176881612bdd565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008235609e19833603018112612fdc57600080fd5b9190910192915050565b81835260208301925060008160005b8481101561304c57813561300881612bab565b6001600160a01b0316865260208201356bffffffffffffffffffffffff811680821461303357600080fd5b6020880152506040958601959190910190600101612ff5565b5093949350505050565b60008135601e1983360301811261306c57600080fd5b820160208101903567ffffffffffffffff81111561308957600080fd5b8060061b360382131561309b57600080fd5b60a085526130ad60a086018284612fe6565b9150506130bc60208401612e54565b6001600160a01b03166020850152604083810135908501526130e060608401612d70565b63ffffffff1660608501526130f760808401612d70565b63ffffffff81166080860152509392505050565b60018060a01b03841681528260208201526060604082015260006131326060830184613056565b95945050505050565b80820180821115610be957610be9612eff565b6020815260006117686020830184613056565b6000808335601e1984360301811261317857600080fd5b83018035915067ffffffffffffffff82111561319357600080fd5b6020019150600581901b36038213156131ab57600080fd5b9250929050565b6000808335601e198436030181126131c957600080fd5b83018035915067ffffffffffffffff8211156131e457600080fd5b6020019150600681901b36038213156131ab57600080fd5b63ffffffff8181168382160190811115610be957610be9612eff565b63ffffffff8281168282160390811115610be957610be9612eff565b600063ffffffff82168061324a5761324a612eff565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff83168061328057613280613254565b8063ffffffff84160691505092915050565b6000808335601e198436030181126132a957600080fd5b83018035915067ffffffffffffffff8211156132c457600080fd5b6020019150368190038213156131ab57600080fd5b6000826132e8576132e8613254565b500490565b60005b838110156133085781810151838201526020016132f0565b50506000910152565b60008251612fdc8184602087016132ed565b60008261333257613332613254565b500690565b60208152600082518060208401526133568160408501602087016132ed565b601f01601f1916919091016040019291505056fea26469706673582212204d712d4f6ff9110b77fc663e4996a77c6f04c30ffd894603074b122c34af00e364736f6c634300081b0033", + Bin: "0x61018060405234801561001157600080fd5b506040516137c73803806137c7833981016040819052610030916102d0565b86868686868686610041858261035b565b63ffffffff16156100e55760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b6100f2620151808661035b565b63ffffffff16156101915760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a4016100dc565b6001600160a01b0396871661012052949095166101405263ffffffff92831660805290821660a052811660c05291821660e05216610100526101d16101e3565b50504661016052506103919350505050565b600054610100900460ff161561024b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100dc565b60005460ff908116101561029d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146102b457600080fd5b50565b805163ffffffff811681146102cb57600080fd5b919050565b600080600080600080600060e0888a0312156102eb57600080fd5b87516102f68161029f565b60208901519097506103078161029f565b9550610315604089016102b7565b9450610323606089016102b7565b9350610331608089016102b7565b925061033f60a089016102b7565b915061034d60c089016102b7565b905092959891949750929550565b600063ffffffff83168061037f57634e487b7160e01b600052601260045260246000fd5b8063ffffffff84160691505092915050565b60805160a05160c05160e051610100516101205161014051610160516133a061042760003960006118150152600081816104f501526121d8015260006107b501526000818161040c01526120c301526000818161033201526121120152600081816104ce01526120720152600081816107140152611f4701526000818161068c01528181611f9e0152611ffd01526133a06000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c80637b8f8b051161019d578063d4540a55116100e9578063f698da25116100a2578063fabc1cbc1161007c578063fabc1cbc14610818578063fbf1e2c11461082b578063fce36c7d1461083e578063ff9f6cce1461085157600080fd5b8063f698da25146107ea578063f8cd8448146107f2578063f96abf2e1461080557600080fd5b8063d4540a5514610764578063de02e50314610777578063e221b2451461078a578063e810ce211461079d578063ea4d3c9b146107b0578063f2fde38b146107d757600080fd5b80639be3d4e411610156578063aebd8bae11610130578063aebd8bae146106c1578063bb7e451f146106ef578063bf21a8aa1461070f578063c46db6061461073657600080fd5b80639be3d4e41461067f5780639d45c28114610687578063a0169ddd146106ae57600080fd5b80637b8f8b05146105fa578063863cb9a914610602578063865c695314610615578063886f1195146106405780638da5cb5b146106535780639104c3191461066457600080fd5b806337838ed01161025c57806358baaa3e116102155780635c975abb116101ef5780635c975abb146105a95780635e9d8348146105b15780636d21117e146105c4578063715018a6146105f257600080fd5b806358baaa3e1461056b578063595c6a671461057e5780635ac86ab71461058657600080fd5b806337838ed0146104c957806339b70e38146104f05780633a8c0786146105175780633ccc861d1461052e5780633efe1db6146105415780634d18cc351461055457600080fd5b8063131433b4116102ae578063131433b414610407578063136439dd1461042e578063149bc8721461044157806322f19a64146104625780632b9f64a41461047557806336af41fa146104b657600080fd5b806218572c146102f557806304a0c5021461032d578063092db007146103695780630e9a53cf146103915780630eb38345146103df57806310d67a2f146103f4575b600080fd5b610318610303366004612bc0565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103547f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610324565b60cb5461037e90600160e01b900461ffff1681565b60405161ffff9091168152602001610324565b610399610864565b604051610324919060006080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b6103f26103ed366004612beb565b610943565b005b6103f2610402366004612bc0565b6109c5565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103f261043c366004612c24565b610a79565b61045461044f366004612c55565b610b64565b604051908152602001610324565b61037e610470366004612c71565b610bda565b61049e610483366004612bc0565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610324565b6103f26104c4366004612c9f565b610bef565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b61049e7f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461035490600160a01b900463ffffffff1681565b6103f261053c366004612d29565b610db7565b6103f261054f366004612d89565b6110a6565b60cb5461035490600160c01b900463ffffffff1681565b6103f2610579366004612db5565b61129c565b6103f26112ad565b610318610594366004612dd0565b606654600160ff9092169190911b9081161490565b606654610454565b6103186105bf366004612df3565b611375565b6103186105d2366004612e28565b60cf60209081526000928352604080842090915290825290205460ff1681565b6103f2611402565b60ca54610454565b6103f2610610366004612bc0565b611416565b610454610623366004612c71565b60cd60209081526000928352604080842090915290825290205481565b60655461049e906001600160a01b031681565b6033546001600160a01b031661049e565b61049e73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610399611427565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103f26106bc366004612bc0565b6114c5565b6103186106cf366004612e28565b60d260209081526000928352604080842090915290825290205460ff1681565b6104546106fd366004612bc0565b60ce6020526000908152604090205481565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b610318610744366004612e28565b60d060209081526000928352604080842090915290825290205460ff1681565b6103f2610772366004612e71565b611524565b610399610785366004612c24565b61166c565b6103f2610798366004612ee4565b6116fe565b6103546107ab366004612c24565b61170f565b61049e7f000000000000000000000000000000000000000000000000000000000000000081565b6103f26107e5366004612bc0565b61179b565b610454611811565b610454610800366004612c55565b61184e565b6103f2610813366004612db5565b61185f565b6103f2610826366004612c24565b6119b2565b60cb5461049e906001600160a01b031681565b6103f261084c366004612c9f565b611aba565b6103f261085f366004612c9f565b611c2d565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b801561093f57600060ca6108a1600184612f15565b815481106108b1576108b1612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615801560608301819052919250906109215750806040015163ffffffff164210155b1561092c5792915050565b508061093781612f3e565b91505061088c565b5090565b61094b611dd0565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3c9190612f55565b6001600160a01b0316336001600160a01b031614610a6d5760405163794821ff60e01b815260040160405180910390fd5b610a7681611e2a565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae59190612f72565b610b0257604051631d77d47760e21b815260040160405180910390fd5b60665481811614610b265760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610b746020840184612bc0565b8360200135604051602001610bbd9392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60cb54600160e01b900461ffff165b92915050565b606654600190600290811603610c185760405163840a48d560e01b815260040160405180910390fd5b33600090815260d1602052604090205460ff16610c485760405163289d7fb960e01b815260040160405180910390fd5b600260975403610c735760405162461bcd60e51b8152600401610c6a90612f8f565b60405180910390fd5b600260975560005b82811015610dac5736848483818110610c9657610c96612f28565b9050602002810190610ca89190612fc6565b33600081815260ce60209081526040808320549051949550939192610cd3929091859187910161310b565b604051602081830303815290604052805190602001209050610cf483611eba565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610d2790839061313b565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610d6f90889061314e565b60405180910390a4610da1333060408601803590610d909060208901612bc0565b6001600160a01b03169291906122ca565b505050600101610c7b565b505060016097555050565b606654600290600490811603610de05760405163840a48d560e01b815260040160405180910390fd5b600260975403610e025760405162461bcd60e51b8152600401610c6a90612f8f565b6002609755600060ca610e186020860186612db5565b63ffffffff1681548110610e2e57610e2e612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050610e8f848261233b565b6000610ea16080860160608701612bc0565b6001600160a01b03808216600090815260cc60205260409020549192501680610ec75750805b336001600160a01b03821614610eef576040516208978560e71b815260040160405180910390fd5b60005b610eff60a0880188613161565b90508110156110985736610f1660e08901896131b2565b83818110610f2657610f26612f28565b6001600160a01b038716600090815260cd602090815260408083209302949094019450929091508290610f5b90850185612bc0565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080826020013511610fa25760405163aa385e8160e01b815260040160405180910390fd5b6000610fb2826020850135612f15565b6001600160a01b038716600090815260cd60209081526040822092935085018035929190610fe09087612bc0565b6001600160a01b0316815260208082019290925260400160002091909155611022908a90839061101290870187612bc0565b6001600160a01b031691906124df565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31906110666020890189612bc0565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101610ef2565b505060016097555050505050565b6066546003906008908116036110cf5760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b031633146110fa5760405163f6f1e6f160e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161112d57604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff1610611153576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb5460009061117390600160a01b900463ffffffff16426131fc565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b6112a4611dd0565b610a768161250f565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190612f72565b61133657604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60006113fa8260ca61138a6020830183612db5565b63ffffffff16815481106113a0576113a0612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015261233b565b506001919050565b61140a611dd0565b6114146000612580565b565b61141e611dd0565b610a76816125d2565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461145b90600190612f15565b8154811061146b5761146b612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b600054610100900460ff16158080156115445750600054600160ff909116105b8061155e5750303b15801561155e575060005460ff166001145b6115c15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c6a565b6000805460ff1916600117905580156115e4576000805461ff0019166101001790555b6115ec61262e565b60c9556115f986866126c5565b61160287612580565b61160b846125d2565b6116148361250f565b61161d8261274a565b8015611663576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca82815481106116a3576116a3612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b611706611dd0565b610a768161274a565b60ca546000905b63ffffffff811615611781578260ca611730600184613218565b63ffffffff168154811061174657611746612f28565b9060005260206000209060020201600001540361176f57611768600182613218565b9392505050565b8061177981613234565b915050611716565b5060405163504570e360e01b815260040160405180910390fd5b6117a3611dd0565b6001600160a01b0381166118085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c6a565b610a7681612580565b60007f00000000000000000000000000000000000000000000000000000000000000004603611841575060c95490565b61184961262e565b905090565b60006001610b746020840184612bc0565b6066546003906008908116036118885760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b031633146118b35760405163f6f1e6f160e01b815260040160405180910390fd5b60ca5463ffffffff8316106118db576040516394a8d38960e01b815260040160405180910390fd5b600060ca8363ffffffff16815481106118f6576118f6612f28565b906000526020600020906002020190508060010160089054906101000a900460ff161561193657604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061196757604051631748afff60e01b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a299190612f55565b6001600160a01b0316336001600160a01b031614611a5a5760405163794821ff60e01b815260040160405180910390fd5b606654198119606654191614611a835760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610b59565b606654600090600190811603611ae35760405163840a48d560e01b815260040160405180910390fd5b600260975403611b055760405162461bcd60e51b8152600401610c6a90612f8f565b600260975560005b82811015610dac5736848483818110611b2857611b28612f28565b9050602002810190611b3a9190612fc6565b33600081815260ce60209081526040808320549051949550939192611b65929091859187910161310b565b604051602081830303815290604052805190602001209050611b8683611eba565b33600090815260cf602090815260408083208484529091529020805460ff19166001908117909155611bb990839061313b565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190611c0190889061314e565b60405180910390a4611c22333060408601803590610d909060208901612bc0565b505050600101611b0d565b606654600490601090811603611c565760405163840a48d560e01b815260040160405180910390fd5b33600090815260d1602052604090205460ff16611c865760405163289d7fb960e01b815260040160405180910390fd5b600260975403611ca85760405162461bcd60e51b8152600401610c6a90612f8f565b600260975560005b82811015610dac5736848483818110611ccb57611ccb612f28565b9050602002810190611cdd9190612fc6565b33600081815260ce60209081526040808320549051949550939192611d08929091859187910161310b565b604051602081830303815290604052805190602001209050611d2983611eba565b33600090815260d2602090815260408083208484529091529020805460ff19166001908117909155611d5c90839061313b565b33600081815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b90611da490889061314e565b60405180910390a4611dc5333060408601803590610d909060208901612bc0565b505050600101611cb0565b6033546001600160a01b031633146114145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c6a565b6001600160a01b038116611e51576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611ec682806131b2565b905011611ee65760405163796cc52560e01b815260040160405180910390fd5b6000816040013511611f0b576040516365e52d5160e11b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff81604001351115611f405760405163070b5a6f60e21b815260040160405180910390fd5b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611f7760a0830160808401612db5565b63ffffffff161115611f9c57604051630dd0b9f560e21b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000611fcd60a0830160808401612db5565b611fd7919061326a565b63ffffffff1615611ffb57604051632380fd2760e21b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061202c6080830160608401612db5565b612036919061326a565b63ffffffff161561205a57604051630ea11a0360e31b815260040160405180910390fd5b61206a6080820160608301612db5565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16426120a29190612f15565b111580156120eb57506120bb6080820160608301612db5565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b6121085760405163041aa75760e11b815260040160405180910390fd5b61213863ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164261313b565b6121486080830160608401612db5565b63ffffffff16111561216d57604051637ee2b44360e01b815260040160405180910390fd5b6000805b61217b83806131b2565b90508110156122c557600061219084806131b2565b838181106121a0576121a0612f28565b6121b69260206040909202019081019150612bc0565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015612221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122459190612f72565b8061226c57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61228957604051632711b74d60e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b0316106122bb5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101612171565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526123359085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526127b5565b50505050565b80606001511561235e57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff1642101561238957604051631437a2bb60e31b815260040160405180910390fd5b61239660c0830183613161565b90506123a560a0840184613161565b9050146123c5576040516343714afd60e01b815260040160405180910390fd5b6123d260e08301836131b2565b90506123e160c0840184613161565b905014612401576040516343714afd60e01b815260040160405180910390fd5b805161242d906124176040850160208601612db5565b6124246040860186613292565b86606001612887565b60005b61243d60a0840184613161565b90508110156122c5576124d7608084013561245b60a0860186613161565b8481811061246b5761246b612f28565b90506020020160208101906124809190612db5565b61248d60c0870187613161565b8581811061249d5761249d612f28565b90506020028101906124af9190613292565b6124bc60e08901896131b2565b878181106124cc576124cc612f28565b905060400201612936565b600101612430565b6040516001600160a01b0383166024820152604481018290526122c590849063a9059cbb60e01b906064016122fe565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156126e657506001600160a01b03821615155b612703576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261274682611e2a565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061280a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129759092919063ffffffff16565b8051909150156122c557808060200190518101906128289190612f72565b6122c55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c6a565b6128926020836132d9565b6001901b8463ffffffff16106128bb576040516369ca16c960e01b815260040160405180910390fd5b60006128c682610b64565b905061291184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff891661298c565b61292e576040516369ca16c960e01b815260040160405180910390fd5b505050505050565b6129416020836132d9565b6001901b8463ffffffff161061296a5760405163054ff4df60e51b815260040160405180910390fd5b60006128c68261184e565b606061298484846000856129a4565b949350505050565b60008361299a868585612ad5565b1495945050505050565b606082471015612a055760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c6a565b6001600160a01b0385163b612a5c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c6a565b600080866001600160a01b03168587604051612a789190613311565b60006040518083038185875af1925050503d8060008114612ab5576040519150601f19603f3d011682016040523d82523d6000602084013e612aba565b606091505b5091509150612aca828286612b72565b979650505050505050565b600060208451612ae59190613323565b15612b0357604051630228be0560e31b815260040160405180910390fd5b8260205b85518111612b6957612b1a600285613323565b600003612b3e57816000528086015160205260406000209150600284049350612b57565b8086015160005281602052604060002091506002840493505b612b6260208261313b565b9050612b07565b50949350505050565b60608315612b81575081611768565b825115612b915782518084602001fd5b8160405162461bcd60e51b8152600401610c6a9190613337565b6001600160a01b0381168114610a7657600080fd5b600060208284031215612bd257600080fd5b813561176881612bab565b8015158114610a7657600080fd5b60008060408385031215612bfe57600080fd5b8235612c0981612bab565b91506020830135612c1981612bdd565b809150509250929050565b600060208284031215612c3657600080fd5b5035919050565b600060408284031215612c4f57600080fd5b50919050565b600060408284031215612c6757600080fd5b6117688383612c3d565b60008060408385031215612c8457600080fd5b8235612c8f81612bab565b91506020830135612c1981612bab565b60008060208385031215612cb257600080fd5b823567ffffffffffffffff811115612cc957600080fd5b8301601f81018513612cda57600080fd5b803567ffffffffffffffff811115612cf157600080fd5b8560208260051b8401011115612d0657600080fd5b6020919091019590945092505050565b60006101008284031215612c4f57600080fd5b60008060408385031215612d3c57600080fd5b823567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612d16565b9250506020830135612c1981612bab565b803563ffffffff81168114612d8457600080fd5b919050565b60008060408385031215612d9c57600080fd5b82359150612dac60208401612d70565b90509250929050565b600060208284031215612dc757600080fd5b61176882612d70565b600060208284031215612de257600080fd5b813560ff8116811461176857600080fd5b600060208284031215612e0557600080fd5b813567ffffffffffffffff811115612e1c57600080fd5b61298484828501612d16565b60008060408385031215612e3b57600080fd5b8235612e4681612bab565b946020939093013593505050565b8035612d8481612bab565b803561ffff81168114612d8457600080fd5b60008060008060008060c08789031215612e8a57600080fd5b8635612e9581612bab565b95506020870135612ea581612bab565b9450604087013593506060870135612ebc81612bab565b9250612eca60808801612d70565b9150612ed860a08801612e5f565b90509295509295509295565b600060208284031215612ef657600080fd5b61176882612e5f565b634e487b7160e01b600052601160045260246000fd5b81810381811115610be957610be9612eff565b634e487b7160e01b600052603260045260246000fd5b600081612f4d57612f4d612eff565b506000190190565b600060208284031215612f6757600080fd5b815161176881612bab565b600060208284031215612f8457600080fd5b815161176881612bdd565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008235609e19833603018112612fdc57600080fd5b9190910192915050565b81835260208301925060008160005b8481101561304c57813561300881612bab565b6001600160a01b0316865260208201356bffffffffffffffffffffffff811680821461303357600080fd5b6020880152506040958601959190910190600101612ff5565b5093949350505050565b60008135601e1983360301811261306c57600080fd5b820160208101903567ffffffffffffffff81111561308957600080fd5b8060061b360382131561309b57600080fd5b60a085526130ad60a086018284612fe6565b9150506130bc60208401612e54565b6001600160a01b03166020850152604083810135908501526130e060608401612d70565b63ffffffff1660608501526130f760808401612d70565b63ffffffff81166080860152509392505050565b60018060a01b03841681528260208201526060604082015260006131326060830184613056565b95945050505050565b80820180821115610be957610be9612eff565b6020815260006117686020830184613056565b6000808335601e1984360301811261317857600080fd5b83018035915067ffffffffffffffff82111561319357600080fd5b6020019150600581901b36038213156131ab57600080fd5b9250929050565b6000808335601e198436030181126131c957600080fd5b83018035915067ffffffffffffffff8211156131e457600080fd5b6020019150600681901b36038213156131ab57600080fd5b63ffffffff8181168382160190811115610be957610be9612eff565b63ffffffff8281168282160390811115610be957610be9612eff565b600063ffffffff82168061324a5761324a612eff565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff83168061328057613280613254565b8063ffffffff84160691505092915050565b6000808335601e198436030181126132a957600080fd5b83018035915067ffffffffffffffff8211156132c457600080fd5b6020019150368190038213156131ab57600080fd5b6000826132e8576132e8613254565b500490565b60005b838110156133085781810151838201526020016132f0565b50506000910152565b60008251612fdc8184602087016132ed565b60008261333257613332613254565b500690565b60208152600082518060208401526133568160408501602087016132ed565b601f01601f1916919091016040019291505056fea26469706673582212200ced2d5bca1cb606ffb68c411b9ebfe082e7825398031d1abe1ad1dc0257114064736f6c634300081b0033", } // RewardsCoordinatorABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyBase/binding.go b/pkg/bindings/StrategyBase/binding.go index 502d82ad8..5a7dfc045 100644 --- a/pkg/bindings/StrategyBase/binding.go +++ b/pkg/bindings/StrategyBase/binding.go @@ -32,7 +32,7 @@ var ( // StrategyBaseMetaData contains all meta data concerning the StrategyBase contract. var StrategyBaseMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"WithdrawalAmountExceedsDeposit\",\"inputs\":[]}]", - Bin: "0x60a060405234801561001057600080fd5b5060405161162638038061162683398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b600054610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610108576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b6080516114bc61016a60003960008181610199015281816104e8015281816108ac015261094b01526114bc6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635c975abb116100b8578063ab5921e11161007c578063ab5921e11461029c578063ce7c2ac2146102b1578063d9caed12146102c4578063e3dae51c146102d7578063f3e73875146102ea578063fabc1cbc146102fd57600080fd5b80635c975abb146102425780637a8b26371461024a578063886f11951461025d5780638c871019146102765780638f6a62401461028957600080fd5b806347e7ef24116100ff57806347e7ef24146101d2578063485cc955146101e5578063553ca5f8146101f8578063595c6a671461020b5780635ac86ab71461021357600080fd5b806310d67a2f1461013c578063136439dd146101515780632495a5991461016457806339b70e38146101945780633a98ef39146101bb575b600080fd5b61014f61014a3660046111d4565b610310565b005b61014f61015f3660046111f1565b6103c4565b603254610177906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101777f000000000000000000000000000000000000000000000000000000000000000081565b6101c460335481565b60405190815260200161018b565b6101c46101e036600461120a565b6104b4565b61014f6101f3366004611236565b610605565b6101c46102063660046111d4565b61071f565b61014f610733565b61023261022136600461127e565b6001805460ff9092161b9081161490565b604051901515815260200161018b565b6001546101c4565b6101c46102583660046111f1565b610800565b600054610177906201000090046001600160a01b031681565b6101c46102843660046111f1565b61084b565b6101c46102973660046111d4565b610856565b6102a4610864565b60405161018b91906112bf565b6101c46102bf3660046111d4565b610884565b61014f6102d23660046112f2565b610919565b6101c46102e53660046111f1565b610a39565b6101c46102f83660046111f1565b610a72565b61014f61030b3660046111f1565b610a7d565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103879190611333565b6001600160a01b0316336001600160a01b0316146103b85760405163794821ff60e01b815260040160405180910390fd5b6103c181610b85565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104359190611350565b61045257604051631d77d47760e21b815260040160405180910390fd5b600154818116146104765760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036104dd5760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610526576040516348da714f60e01b815260040160405180910390fd5b6105308484610c23565b60335460006105416103e883611388565b905060006103e8610550610c55565b61055a9190611388565b90506000610568878361139b565b90508061057584896113ae565b61057f91906113c5565b9550856000036105a257604051630c392ed360e11b815260040160405180910390fd5b6105ac8685611388565b60338190556f4b3b4ca85a86c47a098a223fffffffff10156105e157604051632f14e8a360e11b815260040160405180910390fd5b6105fa826103e86033546105f59190611388565b610cc7565b505050505092915050565b600054610100900460ff16158080156106255750600054600160ff909116105b8061063f5750303b15801561063f575060005460ff166001145b6106a75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156106ca576000805461ff0019166101001790555b6106d48383610d1b565b801561071a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061072d61025883610884565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a49190611350565b6107c157604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e86033546108139190611388565b905060006103e8610822610c55565b61082c9190611388565b90508161083985836113ae565b61084391906113c5565b949350505050565b600061072d82610a39565b600061072d6102f883610884565b60606040518060800160405280604d815260200161143a604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa1580156108f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d91906113e7565b600180546002908116036109405760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610989576040516348da714f60e01b815260040160405180910390fd5b610994848484610e66565b603354808311156109b857604051633a5d3b0160e21b815260040160405180910390fd5b60006109c66103e883611388565b905060006103e86109d5610c55565b6109df9190611388565b90506000826109ee87846113ae565b6109f891906113c5565b9050610a04868561139b565b603355610a24610a14828461139b565b6103e86033546105f59190611388565b610a2f888883610e94565b5050505050505050565b6000806103e8603354610a4c9190611388565b905060006103e8610a5b610c55565b610a659190611388565b90508061083983866113ae565b600061072d82610800565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af49190611333565b6001600160a01b0316336001600160a01b031614610b255760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610b4e5760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104a9565b6001600160a01b038116610bac576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b03838116911614610c5157604051630312abdd60e61b815260040160405180910390fd5b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc291906113e7565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610cfb84670de0b6b3a76400006113ae565b610d0591906113c5565b6040519081526020015b60405180910390a15050565b600054610100900460ff16610d865760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161069e565b603280546001600160a01b0319166001600160a01b038416179055610dac816000610ea8565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e459190611400565b604080516001600160a01b03909316835260ff909116602083015201610d0f565b6032546001600160a01b0383811691161461071a57604051630312abdd60e61b815260040160405180910390fd5b61071a6001600160a01b0383168483610f2f565b6000546201000090046001600160a01b0316158015610ecf57506001600160a01b03821615155b610eec576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610c5182610b85565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261071a92869291600091610fbf91851690849061103c565b80519091501561071a5780806020019051810190610fdd9190611350565b61071a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161069e565b606061104b8484600085611055565b90505b9392505050565b6060824710156110b65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161069e565b6001600160a01b0385163b61110d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161069e565b600080866001600160a01b03168587604051611129919061141d565b60006040518083038185875af1925050503d8060008114611166576040519150601f19603f3d011682016040523d82523d6000602084013e61116b565b606091505b509150915061117b828286611186565b979650505050505050565b6060831561119557508161104e565b8251156111a55782518084602001fd5b8160405162461bcd60e51b815260040161069e91906112bf565b6001600160a01b03811681146103c157600080fd5b6000602082840312156111e657600080fd5b813561104e816111bf565b60006020828403121561120357600080fd5b5035919050565b6000806040838503121561121d57600080fd5b8235611228816111bf565b946020939093013593505050565b6000806040838503121561124957600080fd5b8235611254816111bf565b91506020830135611264816111bf565b809150509250929050565b60ff811681146103c157600080fd5b60006020828403121561129057600080fd5b813561104e8161126f565b60005b838110156112b657818101518382015260200161129e565b50506000910152565b60208152600082518060208401526112de81604085016020870161129b565b601f01601f19169190910160400192915050565b60008060006060848603121561130757600080fd5b8335611312816111bf565b92506020840135611322816111bf565b929592945050506040919091013590565b60006020828403121561134557600080fd5b815161104e816111bf565b60006020828403121561136257600080fd5b8151801515811461104e57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072d5761072d611372565b8181038181111561072d5761072d611372565b808202811582820484141761072d5761072d611372565b6000826113e257634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156113f957600080fd5b5051919050565b60006020828403121561141257600080fd5b815161104e8161126f565b6000825161142f81846020870161129b565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212200660372423b5a6cdd2da82d261858ad2c254b6f4b14d9663fbaf37eb963a40dd64736f6c634300081b0033", + Bin: "0x60a060405234801561001057600080fd5b5060405161162638038061162683398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b600054610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610108576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b6080516114bc61016a60003960008181610199015281816104e8015281816108ac015261094b01526114bc6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635c975abb116100b8578063ab5921e11161007c578063ab5921e11461029c578063ce7c2ac2146102b1578063d9caed12146102c4578063e3dae51c146102d7578063f3e73875146102ea578063fabc1cbc146102fd57600080fd5b80635c975abb146102425780637a8b26371461024a578063886f11951461025d5780638c871019146102765780638f6a62401461028957600080fd5b806347e7ef24116100ff57806347e7ef24146101d2578063485cc955146101e5578063553ca5f8146101f8578063595c6a671461020b5780635ac86ab71461021357600080fd5b806310d67a2f1461013c578063136439dd146101515780632495a5991461016457806339b70e38146101945780633a98ef39146101bb575b600080fd5b61014f61014a3660046111d4565b610310565b005b61014f61015f3660046111f1565b6103c4565b603254610177906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101777f000000000000000000000000000000000000000000000000000000000000000081565b6101c460335481565b60405190815260200161018b565b6101c46101e036600461120a565b6104b4565b61014f6101f3366004611236565b610605565b6101c46102063660046111d4565b61071f565b61014f610733565b61023261022136600461127e565b6001805460ff9092161b9081161490565b604051901515815260200161018b565b6001546101c4565b6101c46102583660046111f1565b610800565b600054610177906201000090046001600160a01b031681565b6101c46102843660046111f1565b61084b565b6101c46102973660046111d4565b610856565b6102a4610864565b60405161018b91906112bf565b6101c46102bf3660046111d4565b610884565b61014f6102d23660046112f2565b610919565b6101c46102e53660046111f1565b610a39565b6101c46102f83660046111f1565b610a72565b61014f61030b3660046111f1565b610a7d565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103879190611333565b6001600160a01b0316336001600160a01b0316146103b85760405163794821ff60e01b815260040160405180910390fd5b6103c181610b85565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104359190611350565b61045257604051631d77d47760e21b815260040160405180910390fd5b600154818116146104765760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036104dd5760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610526576040516348da714f60e01b815260040160405180910390fd5b6105308484610c23565b60335460006105416103e883611388565b905060006103e8610550610c55565b61055a9190611388565b90506000610568878361139b565b90508061057584896113ae565b61057f91906113c5565b9550856000036105a257604051630c392ed360e11b815260040160405180910390fd5b6105ac8685611388565b60338190556f4b3b4ca85a86c47a098a223fffffffff10156105e157604051632f14e8a360e11b815260040160405180910390fd5b6105fa826103e86033546105f59190611388565b610cc7565b505050505092915050565b600054610100900460ff16158080156106255750600054600160ff909116105b8061063f5750303b15801561063f575060005460ff166001145b6106a75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156106ca576000805461ff0019166101001790555b6106d48383610d1b565b801561071a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061072d61025883610884565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a49190611350565b6107c157604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e86033546108139190611388565b905060006103e8610822610c55565b61082c9190611388565b90508161083985836113ae565b61084391906113c5565b949350505050565b600061072d82610a39565b600061072d6102f883610884565b60606040518060800160405280604d815260200161143a604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa1580156108f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d91906113e7565b600180546002908116036109405760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610989576040516348da714f60e01b815260040160405180910390fd5b610994848484610e66565b603354808311156109b857604051633a5d3b0160e21b815260040160405180910390fd5b60006109c66103e883611388565b905060006103e86109d5610c55565b6109df9190611388565b90506000826109ee87846113ae565b6109f891906113c5565b9050610a04868561139b565b603355610a24610a14828461139b565b6103e86033546105f59190611388565b610a2f888883610e94565b5050505050505050565b6000806103e8603354610a4c9190611388565b905060006103e8610a5b610c55565b610a659190611388565b90508061083983866113ae565b600061072d82610800565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af49190611333565b6001600160a01b0316336001600160a01b031614610b255760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610b4e5760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104a9565b6001600160a01b038116610bac576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b03838116911614610c5157604051630312abdd60e61b815260040160405180910390fd5b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc291906113e7565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610cfb84670de0b6b3a76400006113ae565b610d0591906113c5565b6040519081526020015b60405180910390a15050565b600054610100900460ff16610d865760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161069e565b603280546001600160a01b0319166001600160a01b038416179055610dac816000610ea8565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e459190611400565b604080516001600160a01b03909316835260ff909116602083015201610d0f565b6032546001600160a01b0383811691161461071a57604051630312abdd60e61b815260040160405180910390fd5b61071a6001600160a01b0383168483610f2f565b6000546201000090046001600160a01b0316158015610ecf57506001600160a01b03821615155b610eec576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610c5182610b85565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261071a92869291600091610fbf91851690849061103c565b80519091501561071a5780806020019051810190610fdd9190611350565b61071a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161069e565b606061104b8484600085611055565b90505b9392505050565b6060824710156110b65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161069e565b6001600160a01b0385163b61110d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161069e565b600080866001600160a01b03168587604051611129919061141d565b60006040518083038185875af1925050503d8060008114611166576040519150601f19603f3d011682016040523d82523d6000602084013e61116b565b606091505b509150915061117b828286611186565b979650505050505050565b6060831561119557508161104e565b8251156111a55782518084602001fd5b8160405162461bcd60e51b815260040161069e91906112bf565b6001600160a01b03811681146103c157600080fd5b6000602082840312156111e657600080fd5b813561104e816111bf565b60006020828403121561120357600080fd5b5035919050565b6000806040838503121561121d57600080fd5b8235611228816111bf565b946020939093013593505050565b6000806040838503121561124957600080fd5b8235611254816111bf565b91506020830135611264816111bf565b809150509250929050565b60ff811681146103c157600080fd5b60006020828403121561129057600080fd5b813561104e8161126f565b60005b838110156112b657818101518382015260200161129e565b50506000910152565b60208152600082518060208401526112de81604085016020870161129b565b601f01601f19169190910160400192915050565b60008060006060848603121561130757600080fd5b8335611312816111bf565b92506020840135611322816111bf565b929592945050506040919091013590565b60006020828403121561134557600080fd5b815161104e816111bf565b60006020828403121561136257600080fd5b8151801515811461104e57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072d5761072d611372565b8181038181111561072d5761072d611372565b808202811582820484141761072d5761072d611372565b6000826113e257634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156113f957600080fd5b5051919050565b60006020828403121561141257600080fd5b815161104e8161126f565b6000825161142f81846020870161129b565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212207c2cd2bc64db7202f7b681db3edb8e393ce605720e8a1a12ff10381895cfd67a64736f6c634300081b0033", } // StrategyBaseABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyBaseTVLLimits/binding.go b/pkg/bindings/StrategyBaseTVLLimits/binding.go index 2258e5775..6de3210d9 100644 --- a/pkg/bindings/StrategyBaseTVLLimits/binding.go +++ b/pkg/bindings/StrategyBaseTVLLimits/binding.go @@ -32,7 +32,7 @@ var ( // StrategyBaseTVLLimitsMetaData contains all meta data concerning the StrategyBaseTVLLimits contract. var StrategyBaseTVLLimitsMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"WithdrawalAmountExceedsDeposit\",\"inputs\":[]}]", - Bin: "0x60a060405234801561001057600080fd5b506040516119d03803806119d083398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b60805161186461016c600039600081816102160152818161072b01528181610aa30152610b4201526118646000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046114c2565b6103ba565b005b6101a66101b636600461150c565b61049d565b6101a66101c9366004611529565b610551565b6101a66101dc36600461154b565b610607565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b61024160335481565b604051908152602001610208565b61024160645481565b610241610266366004611564565b6106f7565b6101a6610279366004611590565b610848565b61024161028c36600461150c565b610916565b6101a661092a565b6102b86102a73660046115d8565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e736600461154b565b6109f7565b6000546101f4906201000090046001600160a01b031681565b61024161031336600461154b565b610a42565b61024161032636600461150c565b610a4d565b610333610a5b565b6040516102089190611619565b61024161034e36600461150c565b610a7b565b6101a661036136600461164c565b610b10565b60645460655460408051928352602083019190915201610208565b61024161038f36600461154b565b610c30565b6102416103a236600461154b565b610c69565b6101a66103b536600461154b565b610c74565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b81526004016104109061168d565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610d7c565b6104508383610e20565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906116db565b6001600160a01b0316336001600160a01b0316146105455760405163794821ff60e01b815260040160405180910390fd5b61054e81610f73565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c891906116db565b6001600160a01b0316336001600160a01b0316146105f95760405163794821ff60e01b815260040160405180910390fd5b6106038282610d7c565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610654573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067891906116f8565b61069557604051631d77d47760e21b815260040160405180910390fd5b600154818116146106b95760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036107205760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610769576040516348da714f60e01b815260040160405180910390fd5b6107738484611011565b60335460006107846103e883611730565b905060006103e8610793611068565b61079d9190611730565b905060006107ab8783611743565b9050806107b88489611756565b6107c2919061176d565b9550856000036107e557604051630c392ed360e11b815260040160405180910390fd5b6107ef8685611730565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561082457604051632f14e8a360e11b815260040160405180910390fd5b61083d826103e86033546108389190611730565b6110da565b505050505092915050565b600054610100900460ff16158080156108685750600054600160ff909116105b806108825750303b158015610882575060005460ff166001145b61089e5760405162461bcd60e51b81526004016104109061168d565b6000805460ff1916600117905580156108c1576000805461ff0019166101001790555b6108cb8383610e20565b8015610911576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109246102e783610a7b565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099b91906116f8565b6109b857604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610a0a9190611730565b905060006103e8610a19611068565b610a239190611730565b905081610a308583611756565b610a3a919061176d565b949350505050565b600061092482610c30565b60006109246103a283610a7b565b60606040518060800160405280604d81526020016117e2604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610924919061178f565b60018054600290811603610b375760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b80576040516348da714f60e01b815260040160405180910390fd5b610b8b848484611126565b60335480831115610baf57604051633a5d3b0160e21b815260040160405180910390fd5b6000610bbd6103e883611730565b905060006103e8610bcc611068565b610bd69190611730565b9050600082610be58784611756565b610bef919061176d565b9050610bfb8685611743565b603355610c1b610c0b8284611743565b6103e86033546108389190611730565b610c26888883611154565b5050505050505050565b6000806103e8603354610c439190611730565b905060006103e8610c52611068565b610c5c9190611730565b905080610a308386611756565b6000610924826109f7565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ceb91906116db565b6001600160a01b0316336001600160a01b031614610d1c5760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610d455760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106ec565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610e155760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b600054610100900460ff16610e8b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b038416179055610eb1816000611168565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a91906117a8565b604080516001600160a01b03909316835260ff9091166020830152015b60405180910390a15050565b6001600160a01b038116610f9a576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6064548111156110345760405163052b07b760e21b815260040160405180910390fd5b60655461103f611068565b111561105e5760405163d86bae6760e01b815260040160405180910390fd5b61060382826111ef565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d5919061178f565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be88161110e84670de0b6b3a7640000611756565b611118919061176d565b604051908152602001610f67565b6032546001600160a01b0383811691161461091157604051630312abdd60e61b815260040160405180910390fd5b6109116001600160a01b038316848361121d565b6000546201000090046001600160a01b031615801561118f57506001600160a01b03821615155b6111ac576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261060382610f73565b6032546001600160a01b0383811691161461060357604051630312abdd60e61b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610911928692916000916112ad91851690849061132a565b80519091501561091157808060200190518101906112cb91906116f8565b6109115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b60606113398484600085611343565b90505b9392505050565b6060824710156113a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6113fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161141791906117c5565b60006040518083038185875af1925050503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b5091509150611469828286611474565b979650505050505050565b6060831561148357508161133c565b8251156114935782518084602001fd5b8160405162461bcd60e51b81526004016104109190611619565b6001600160a01b038116811461054e57600080fd5b600080600080608085870312156114d857600080fd5b843593506020850135925060408501356114f1816114ad565b91506060850135611501816114ad565b939692955090935050565b60006020828403121561151e57600080fd5b813561133c816114ad565b6000806040838503121561153c57600080fd5b50508035926020909101359150565b60006020828403121561155d57600080fd5b5035919050565b6000806040838503121561157757600080fd5b8235611582816114ad565b946020939093013593505050565b600080604083850312156115a357600080fd5b82356115ae816114ad565b915060208301356115be816114ad565b809150509250929050565b60ff8116811461054e57600080fd5b6000602082840312156115ea57600080fd5b813561133c816115c9565b60005b838110156116105781810151838201526020016115f8565b50506000910152565b60208152600082518060208401526116388160408501602087016115f5565b601f01601f19169190910160400192915050565b60008060006060848603121561166157600080fd5b833561166c816114ad565b9250602084013561167c816114ad565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156116ed57600080fd5b815161133c816114ad565b60006020828403121561170a57600080fd5b8151801515811461133c57600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156109245761092461171a565b818103818111156109245761092461171a565b80820281158282048414176109245761092461171a565b60008261178a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156117a157600080fd5b5051919050565b6000602082840312156117ba57600080fd5b815161133c816115c9565b600082516117d78184602087016115f5565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220bf1b7eef95b9e316126dc2d4eb840b0aacc8d6c49b4de471cc2641480290178d64736f6c634300081b0033", + Bin: "0x60a060405234801561001057600080fd5b506040516119d03803806119d083398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b60805161186461016c600039600081816102160152818161072b01528181610aa30152610b4201526118646000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046114c2565b6103ba565b005b6101a66101b636600461150c565b61049d565b6101a66101c9366004611529565b610551565b6101a66101dc36600461154b565b610607565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b61024160335481565b604051908152602001610208565b61024160645481565b610241610266366004611564565b6106f7565b6101a6610279366004611590565b610848565b61024161028c36600461150c565b610916565b6101a661092a565b6102b86102a73660046115d8565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e736600461154b565b6109f7565b6000546101f4906201000090046001600160a01b031681565b61024161031336600461154b565b610a42565b61024161032636600461150c565b610a4d565b610333610a5b565b6040516102089190611619565b61024161034e36600461150c565b610a7b565b6101a661036136600461164c565b610b10565b60645460655460408051928352602083019190915201610208565b61024161038f36600461154b565b610c30565b6102416103a236600461154b565b610c69565b6101a66103b536600461154b565b610c74565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b81526004016104109061168d565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610d7c565b6104508383610e20565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906116db565b6001600160a01b0316336001600160a01b0316146105455760405163794821ff60e01b815260040160405180910390fd5b61054e81610f73565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c891906116db565b6001600160a01b0316336001600160a01b0316146105f95760405163794821ff60e01b815260040160405180910390fd5b6106038282610d7c565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610654573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067891906116f8565b61069557604051631d77d47760e21b815260040160405180910390fd5b600154818116146106b95760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036107205760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610769576040516348da714f60e01b815260040160405180910390fd5b6107738484611011565b60335460006107846103e883611730565b905060006103e8610793611068565b61079d9190611730565b905060006107ab8783611743565b9050806107b88489611756565b6107c2919061176d565b9550856000036107e557604051630c392ed360e11b815260040160405180910390fd5b6107ef8685611730565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561082457604051632f14e8a360e11b815260040160405180910390fd5b61083d826103e86033546108389190611730565b6110da565b505050505092915050565b600054610100900460ff16158080156108685750600054600160ff909116105b806108825750303b158015610882575060005460ff166001145b61089e5760405162461bcd60e51b81526004016104109061168d565b6000805460ff1916600117905580156108c1576000805461ff0019166101001790555b6108cb8383610e20565b8015610911576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109246102e783610a7b565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099b91906116f8565b6109b857604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610a0a9190611730565b905060006103e8610a19611068565b610a239190611730565b905081610a308583611756565b610a3a919061176d565b949350505050565b600061092482610c30565b60006109246103a283610a7b565b60606040518060800160405280604d81526020016117e2604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610924919061178f565b60018054600290811603610b375760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b80576040516348da714f60e01b815260040160405180910390fd5b610b8b848484611126565b60335480831115610baf57604051633a5d3b0160e21b815260040160405180910390fd5b6000610bbd6103e883611730565b905060006103e8610bcc611068565b610bd69190611730565b9050600082610be58784611756565b610bef919061176d565b9050610bfb8685611743565b603355610c1b610c0b8284611743565b6103e86033546108389190611730565b610c26888883611154565b5050505050505050565b6000806103e8603354610c439190611730565b905060006103e8610c52611068565b610c5c9190611730565b905080610a308386611756565b6000610924826109f7565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ceb91906116db565b6001600160a01b0316336001600160a01b031614610d1c5760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610d455760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106ec565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610e155760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b600054610100900460ff16610e8b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b038416179055610eb1816000611168565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a91906117a8565b604080516001600160a01b03909316835260ff9091166020830152015b60405180910390a15050565b6001600160a01b038116610f9a576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6064548111156110345760405163052b07b760e21b815260040160405180910390fd5b60655461103f611068565b111561105e5760405163d86bae6760e01b815260040160405180910390fd5b61060382826111ef565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d5919061178f565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be88161110e84670de0b6b3a7640000611756565b611118919061176d565b604051908152602001610f67565b6032546001600160a01b0383811691161461091157604051630312abdd60e61b815260040160405180910390fd5b6109116001600160a01b038316848361121d565b6000546201000090046001600160a01b031615801561118f57506001600160a01b03821615155b6111ac576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261060382610f73565b6032546001600160a01b0383811691161461060357604051630312abdd60e61b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610911928692916000916112ad91851690849061132a565b80519091501561091157808060200190518101906112cb91906116f8565b6109115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b60606113398484600085611343565b90505b9392505050565b6060824710156113a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6113fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161141791906117c5565b60006040518083038185875af1925050503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b5091509150611469828286611474565b979650505050505050565b6060831561148357508161133c565b8251156114935782518084602001fd5b8160405162461bcd60e51b81526004016104109190611619565b6001600160a01b038116811461054e57600080fd5b600080600080608085870312156114d857600080fd5b843593506020850135925060408501356114f1816114ad565b91506060850135611501816114ad565b939692955090935050565b60006020828403121561151e57600080fd5b813561133c816114ad565b6000806040838503121561153c57600080fd5b50508035926020909101359150565b60006020828403121561155d57600080fd5b5035919050565b6000806040838503121561157757600080fd5b8235611582816114ad565b946020939093013593505050565b600080604083850312156115a357600080fd5b82356115ae816114ad565b915060208301356115be816114ad565b809150509250929050565b60ff8116811461054e57600080fd5b6000602082840312156115ea57600080fd5b813561133c816115c9565b60005b838110156116105781810151838201526020016115f8565b50506000910152565b60208152600082518060208401526116388160408501602087016115f5565b601f01601f19169190910160400192915050565b60008060006060848603121561166157600080fd5b833561166c816114ad565b9250602084013561167c816114ad565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156116ed57600080fd5b815161133c816114ad565b60006020828403121561170a57600080fd5b8151801515811461133c57600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156109245761092461171a565b818103818111156109245761092461171a565b80820281158282048414176109245761092461171a565b60008261178a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156117a157600080fd5b5051919050565b6000602082840312156117ba57600080fd5b815161133c816115c9565b600082516117d78184602087016115f5565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212208c4b1a7f9dca79d57071cdb720724587dcd686192083f606108247c8575a95ca64736f6c634300081b0033", } // StrategyBaseTVLLimitsABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyFactory/binding.go b/pkg/bindings/StrategyFactory/binding.go index b13a1ed01..a783cddb7 100644 --- a/pkg/bindings/StrategyFactory/binding.go +++ b/pkg/bindings/StrategyFactory/binding.go @@ -32,7 +32,7 @@ var ( // StrategyFactoryMetaData contains all meta data concerning the StrategyFactory contract. var StrategyFactoryMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotBlacklistDeployedStrategy\",\"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: "0x60a060405234801561001057600080fd5b50604051611df1380380611df183398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b603354610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60335460ff9081161015610108576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b608051611c7961017860003960008181610171015281816106d801528181610775015281816108bd01528181610aed0152610e3f0152611c796000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80636b9b6229116100ad578063f0062d9a11610071578063f0062d9a1461029d578063f2fde38b146102b0578063fabc1cbc146102c3578063fe38b32d146102d6578063fe575a87146102e957600080fd5b80636b9b62291461024b578063715018a61461025e578063886f1195146102665780638da5cb5b14610279578063be2030941461028a57600080fd5b8063581dfd65116100f4578063581dfd65146101c3578063595c6a67146101ec5780635ac86ab7146101f45780635c975abb14610227578063697d54b41461023857600080fd5b806310d67a2f14610131578063136439dd1461014657806323103c411461015957806339b70e381461016c5780634e5a4263146101b0575b600080fd5b61014461013f36600461112d565b61030c565b005b610144610154366004611151565b6103c0565b6101446101673660046111b6565b6104ab565b6101937f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101446101be366004611206565b610746565b6101936101d136600461112d565b6001602052600090815260409020546001600160a01b031681565b6101446107d6565b61021761020236600461123f565b609954600160ff9092169190911b9081161490565b60405190151581526020016101a7565b6099546040519081526020016101a7565b610144610246366004611262565b61089e565b61019361025936600461112d565b6108f8565b610144610b60565b609854610193906001600160a01b031681565b6066546001600160a01b0316610193565b6101446102983660046112d3565b610b74565b600054610193906001600160a01b031681565b6101446102be36600461112d565b610ca2565b6101446102d1366004611151565b610d18565b6101446102e43660046111b6565b610e20565b6102176102f736600461112d565b60026020526000908152604090205460ff1681565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103839190611326565b6001600160a01b0316336001600160a01b0316146103b45760405163794821ff60e01b815260040160405180910390fd5b6103bd81610e76565b50565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c9190611343565b61044957604051631d77d47760e21b815260040160405180910390fd5b6099548181161461046d5760405163c61dca5d60e01b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6104b3610f06565b60008167ffffffffffffffff8111156104ce576104ce611360565b6040519080825280602002602001820160405280156104f7578160200160208202803683370190505b5090506000805b838110156106b7576002600086868481811061051c5761051c611376565b9050602002016020810190610531919061112d565b6001600160a01b0316815260208101919091526040016000205460ff161561056b5760405162b1aec360e41b815260040160405180910390fd5b60016002600087878581811061058357610583611376565b9050602002016020810190610598919061112d565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f75519c51f39873ec0e27dd3bbc09549e4865a113f505393fb9eab5898f6418b38585838181106105f3576105f3611376565b9050602002016020810190610608919061112d565b6040516001600160a01b03909116815260200160405180910390a160006001600087878581811061063b5761063b611376565b9050602002016020810190610650919061112d565b6001600160a01b03908116825260208201929092526040016000205416905080156106ae578084848151811061068857610688611376565b6001600160a01b0390921660209283029190910190910152826106aa8161138c565b9350505b506001016104fe565b508082528015610740576040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061070d9085906004016113f8565b600060405180830381600087803b15801561072757600080fd5b505af115801561073b573d6000803e3d6000fd5b505050505b50505050565b61074e610f06565b604051634e5a426360e01b81526001600160a01b03838116600483015282151560248301527f00000000000000000000000000000000000000000000000000000000000000001690634e5a4263906044015b600060405180830381600087803b1580156107ba57600080fd5b505af11580156107ce573d6000803e3d6000fd5b505050505050565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611343565b61085f57604051631d77d47760e21b815260040160405180910390fd5b600019609981905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6108a6610f06565b60405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b35479061070d90879087908790879060040161144b565b60995460009081906001908116036109235760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b03831660009081526002602052604090205460ff161561095d5760405163091867bd60e11b815260040160405180910390fd5b6001600160a01b0383811660009081526001602052604090205416156109965760405163c45546f760e01b815260040160405180910390fd5b600080546098546040516001600160a01b038781166024830152918216604482015291169063485cc95560e01b9060640160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610a049061110b565b610a0f9291906114a9565b604051809103906000f080158015610a2b573d6000803e3d6000fd5b509050610a388482610f60565b6040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508282600081518110610a9157610a91611376565b60200260200101906001600160a01b031690816001600160a01b031681525050600081600081518110610ac657610ac6611376565b9115156020928302919091019091015260405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b354790610b249085908590600401611506565b600060405180830381600087803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b509498975050505050505050565b610b68610f06565b610b726000610fcb565b565b603354610100900460ff1615808015610b945750603354600160ff909116105b80610bae5750303b158015610bae575060335460ff166001145b610c165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6033805460ff191660011790558015610c39576033805461ff0019166101001790555b610c4285610fcb565b610c4c848461101d565b610c55826110a2565b8015610c9b576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610caa610f06565b6001600160a01b038116610d0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c0d565b6103bd81610fcb565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190611326565b6001600160a01b0316336001600160a01b031614610dc05760405163794821ff60e01b815260040160405180910390fd5b609954198119609954191614610de95760405163c61dca5d60e01b815260040160405180910390fd5b609981905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104a0565b610e28610f06565b6040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b8906107a09085908590600401611562565b6001600160a01b038116610e9d576040516339b190bb60e11b815260040160405180910390fd5b609854604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609880546001600160a01b0319166001600160a01b0392909216919091179055565b6066546001600160a01b03163314610b725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0d565b6001600160a01b0382811660008181526001602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f6852a55230ef089d785bce7ffbf757985de34026df90a87d7b4a6e56f95d251f910160405180910390a15050565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6098546001600160a01b031615801561103e57506001600160a01b03821615155b61105b576040516339b190bb60e11b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261109e82610e76565b5050565b600054604080516001600160a01b03928316815291831660208301527fe21755962a7d7e100b59b9c3e4d4b54085b146313719955efb6a7a25c5c7feee910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6106c58061157f83390190565b6001600160a01b03811681146103bd57600080fd5b60006020828403121561113f57600080fd5b813561114a81611118565b9392505050565b60006020828403121561116357600080fd5b5035919050565b60008083601f84011261117c57600080fd5b50813567ffffffffffffffff81111561119457600080fd5b6020830191508360208260051b85010111156111af57600080fd5b9250929050565b600080602083850312156111c957600080fd5b823567ffffffffffffffff8111156111e057600080fd5b6111ec8582860161116a565b90969095509350505050565b80151581146103bd57600080fd5b6000806040838503121561121957600080fd5b823561122481611118565b91506020830135611234816111f8565b809150509250929050565b60006020828403121561125157600080fd5b813560ff8116811461114a57600080fd5b6000806000806040858703121561127857600080fd5b843567ffffffffffffffff81111561128f57600080fd5b61129b8782880161116a565b909550935050602085013567ffffffffffffffff8111156112bb57600080fd5b6112c78782880161116a565b95989497509550505050565b600080600080608085870312156112e957600080fd5b84356112f481611118565b9350602085013561130481611118565b925060408501359150606085013561131b81611118565b939692955090935050565b60006020828403121561133857600080fd5b815161114a81611118565b60006020828403121561135557600080fd5b815161114a816111f8565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016113ac57634e487b7160e01b600052601160045260246000fd5b5060010190565b600081518084526020840193506020830160005b828110156113ee5781516001600160a01b03168652602095860195909101906001016113c7565b5093949350505050565b60208152600061114a60208301846113b3565b81835260208301925060008160005b848110156113ee57813561142d81611118565b6001600160a01b03168652602095860195919091019060010161141a565b60408152600061145f60408301868861140b565b82810360208085019190915284825285910160005b8581101561149d578235611487816111f8565b1515825260209283019290910190600101611474565b50979650505050505050565b60018060a01b0383168152604060208201526000825180604084015260005b818110156114e557602081860181015160608684010152016114c8565b506000606082850101526060601f19601f8301168401019150509392505050565b60408152600061151960408301856113b3565b828103602084015280845180835260208301915060208601925060005b818110156115565783511515835260209384019390920191600101611536565b50909695505050505050565b60208152600061157660208301848661140b565b94935050505056fe60806040526040516106c53803806106c583398101604081905261002291610413565b61002e82826000610035565b5050610543565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104d9565b8361027a565b505b505050565b6001600160a01b0381163b6101605760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101d4816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c591906104d9565b6001600160a01b03163b151590565b6102395760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610157565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029f838360405180606001604052806027815260200161069e602791396102a6565b9392505050565b60606001600160a01b0384163b61030e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610157565b600080856001600160a01b03168560405161032991906104f4565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b50909250905061037a828286610384565b9695505050505050565b6060831561039357508161029f565b8251156103a35782518084602001fd5b8160405162461bcd60e51b81526004016101579190610510565b80516001600160a01b03811681146103d457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b6000806040838503121561042657600080fd5b61042f836103bd565b60208401519092506001600160401b0381111561044b57600080fd5b8301601f8101851361045c57600080fd5b80516001600160401b03811115610475576104756103d9565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104a3576104a36103d9565b6040528181528282016020018710156104bb57600080fd5b6104cc8260208301602086016103ef565b8093505050509250929050565b6000602082840312156104eb57600080fd5b61029f826103bd565b600082516105068184602087016103ef565b9190910192915050565b602081526000825180602084015261052f8160408501602087016103ef565b601f01601f19169190910160400192915050565b61014c806105526000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd91906100e6565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b6000602082840312156100f857600080fd5b81516001600160a01b038116811461010f57600080fd5b939250505056fea264697066735822122073f44b13ad6a41f166bfe1da0f67ccdfa4d7fa137b8df1dcc52307b737bea46264736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220df6e1a498f63498a30d661c76e7396ede38141e95a2c8c7eb0fcc78acf436a9164736f6c634300081b0033", + Bin: "0x60a060405234801561001057600080fd5b50604051611df1380380611df183398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b603354610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60335460ff9081161015610108576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b608051611c7961017860003960008181610171015281816106d801528181610775015281816108bd01528181610aed0152610e3f0152611c796000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80636b9b6229116100ad578063f0062d9a11610071578063f0062d9a1461029d578063f2fde38b146102b0578063fabc1cbc146102c3578063fe38b32d146102d6578063fe575a87146102e957600080fd5b80636b9b62291461024b578063715018a61461025e578063886f1195146102665780638da5cb5b14610279578063be2030941461028a57600080fd5b8063581dfd65116100f4578063581dfd65146101c3578063595c6a67146101ec5780635ac86ab7146101f45780635c975abb14610227578063697d54b41461023857600080fd5b806310d67a2f14610131578063136439dd1461014657806323103c411461015957806339b70e381461016c5780634e5a4263146101b0575b600080fd5b61014461013f36600461112d565b61030c565b005b610144610154366004611151565b6103c0565b6101446101673660046111b6565b6104ab565b6101937f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101446101be366004611206565b610746565b6101936101d136600461112d565b6001602052600090815260409020546001600160a01b031681565b6101446107d6565b61021761020236600461123f565b609954600160ff9092169190911b9081161490565b60405190151581526020016101a7565b6099546040519081526020016101a7565b610144610246366004611262565b61089e565b61019361025936600461112d565b6108f8565b610144610b60565b609854610193906001600160a01b031681565b6066546001600160a01b0316610193565b6101446102983660046112d3565b610b74565b600054610193906001600160a01b031681565b6101446102be36600461112d565b610ca2565b6101446102d1366004611151565b610d18565b6101446102e43660046111b6565b610e20565b6102176102f736600461112d565b60026020526000908152604090205460ff1681565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103839190611326565b6001600160a01b0316336001600160a01b0316146103b45760405163794821ff60e01b815260040160405180910390fd5b6103bd81610e76565b50565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c9190611343565b61044957604051631d77d47760e21b815260040160405180910390fd5b6099548181161461046d5760405163c61dca5d60e01b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6104b3610f06565b60008167ffffffffffffffff8111156104ce576104ce611360565b6040519080825280602002602001820160405280156104f7578160200160208202803683370190505b5090506000805b838110156106b7576002600086868481811061051c5761051c611376565b9050602002016020810190610531919061112d565b6001600160a01b0316815260208101919091526040016000205460ff161561056b5760405162b1aec360e41b815260040160405180910390fd5b60016002600087878581811061058357610583611376565b9050602002016020810190610598919061112d565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f75519c51f39873ec0e27dd3bbc09549e4865a113f505393fb9eab5898f6418b38585838181106105f3576105f3611376565b9050602002016020810190610608919061112d565b6040516001600160a01b03909116815260200160405180910390a160006001600087878581811061063b5761063b611376565b9050602002016020810190610650919061112d565b6001600160a01b03908116825260208201929092526040016000205416905080156106ae578084848151811061068857610688611376565b6001600160a01b0390921660209283029190910190910152826106aa8161138c565b9350505b506001016104fe565b508082528015610740576040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061070d9085906004016113f8565b600060405180830381600087803b15801561072757600080fd5b505af115801561073b573d6000803e3d6000fd5b505050505b50505050565b61074e610f06565b604051634e5a426360e01b81526001600160a01b03838116600483015282151560248301527f00000000000000000000000000000000000000000000000000000000000000001690634e5a4263906044015b600060405180830381600087803b1580156107ba57600080fd5b505af11580156107ce573d6000803e3d6000fd5b505050505050565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611343565b61085f57604051631d77d47760e21b815260040160405180910390fd5b600019609981905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6108a6610f06565b60405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b35479061070d90879087908790879060040161144b565b60995460009081906001908116036109235760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b03831660009081526002602052604090205460ff161561095d5760405163091867bd60e11b815260040160405180910390fd5b6001600160a01b0383811660009081526001602052604090205416156109965760405163c45546f760e01b815260040160405180910390fd5b600080546098546040516001600160a01b038781166024830152918216604482015291169063485cc95560e01b9060640160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610a049061110b565b610a0f9291906114a9565b604051809103906000f080158015610a2b573d6000803e3d6000fd5b509050610a388482610f60565b6040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508282600081518110610a9157610a91611376565b60200260200101906001600160a01b031690816001600160a01b031681525050600081600081518110610ac657610ac6611376565b9115156020928302919091019091015260405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b354790610b249085908590600401611506565b600060405180830381600087803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b509498975050505050505050565b610b68610f06565b610b726000610fcb565b565b603354610100900460ff1615808015610b945750603354600160ff909116105b80610bae5750303b158015610bae575060335460ff166001145b610c165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6033805460ff191660011790558015610c39576033805461ff0019166101001790555b610c4285610fcb565b610c4c848461101d565b610c55826110a2565b8015610c9b576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610caa610f06565b6001600160a01b038116610d0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c0d565b6103bd81610fcb565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190611326565b6001600160a01b0316336001600160a01b031614610dc05760405163794821ff60e01b815260040160405180910390fd5b609954198119609954191614610de95760405163c61dca5d60e01b815260040160405180910390fd5b609981905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104a0565b610e28610f06565b6040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b8906107a09085908590600401611562565b6001600160a01b038116610e9d576040516339b190bb60e11b815260040160405180910390fd5b609854604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609880546001600160a01b0319166001600160a01b0392909216919091179055565b6066546001600160a01b03163314610b725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0d565b6001600160a01b0382811660008181526001602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f6852a55230ef089d785bce7ffbf757985de34026df90a87d7b4a6e56f95d251f910160405180910390a15050565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6098546001600160a01b031615801561103e57506001600160a01b03821615155b61105b576040516339b190bb60e11b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261109e82610e76565b5050565b600054604080516001600160a01b03928316815291831660208301527fe21755962a7d7e100b59b9c3e4d4b54085b146313719955efb6a7a25c5c7feee910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6106c58061157f83390190565b6001600160a01b03811681146103bd57600080fd5b60006020828403121561113f57600080fd5b813561114a81611118565b9392505050565b60006020828403121561116357600080fd5b5035919050565b60008083601f84011261117c57600080fd5b50813567ffffffffffffffff81111561119457600080fd5b6020830191508360208260051b85010111156111af57600080fd5b9250929050565b600080602083850312156111c957600080fd5b823567ffffffffffffffff8111156111e057600080fd5b6111ec8582860161116a565b90969095509350505050565b80151581146103bd57600080fd5b6000806040838503121561121957600080fd5b823561122481611118565b91506020830135611234816111f8565b809150509250929050565b60006020828403121561125157600080fd5b813560ff8116811461114a57600080fd5b6000806000806040858703121561127857600080fd5b843567ffffffffffffffff81111561128f57600080fd5b61129b8782880161116a565b909550935050602085013567ffffffffffffffff8111156112bb57600080fd5b6112c78782880161116a565b95989497509550505050565b600080600080608085870312156112e957600080fd5b84356112f481611118565b9350602085013561130481611118565b925060408501359150606085013561131b81611118565b939692955090935050565b60006020828403121561133857600080fd5b815161114a81611118565b60006020828403121561135557600080fd5b815161114a816111f8565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016113ac57634e487b7160e01b600052601160045260246000fd5b5060010190565b600081518084526020840193506020830160005b828110156113ee5781516001600160a01b03168652602095860195909101906001016113c7565b5093949350505050565b60208152600061114a60208301846113b3565b81835260208301925060008160005b848110156113ee57813561142d81611118565b6001600160a01b03168652602095860195919091019060010161141a565b60408152600061145f60408301868861140b565b82810360208085019190915284825285910160005b8581101561149d578235611487816111f8565b1515825260209283019290910190600101611474565b50979650505050505050565b60018060a01b0383168152604060208201526000825180604084015260005b818110156114e557602081860181015160608684010152016114c8565b506000606082850101526060601f19601f8301168401019150509392505050565b60408152600061151960408301856113b3565b828103602084015280845180835260208301915060208601925060005b818110156115565783511515835260209384019390920191600101611536565b50909695505050505050565b60208152600061157660208301848661140b565b94935050505056fe60806040526040516106c53803806106c583398101604081905261002291610413565b61002e82826000610035565b5050610543565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104d9565b8361027a565b505b505050565b6001600160a01b0381163b6101605760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101d4816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c591906104d9565b6001600160a01b03163b151590565b6102395760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610157565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029f838360405180606001604052806027815260200161069e602791396102a6565b9392505050565b60606001600160a01b0384163b61030e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610157565b600080856001600160a01b03168560405161032991906104f4565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b50909250905061037a828286610384565b9695505050505050565b6060831561039357508161029f565b8251156103a35782518084602001fd5b8160405162461bcd60e51b81526004016101579190610510565b80516001600160a01b03811681146103d457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b6000806040838503121561042657600080fd5b61042f836103bd565b60208401519092506001600160401b0381111561044b57600080fd5b8301601f8101851361045c57600080fd5b80516001600160401b03811115610475576104756103d9565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104a3576104a36103d9565b6040528181528282016020018710156104bb57600080fd5b6104cc8260208301602086016103ef565b8093505050509250929050565b6000602082840312156104eb57600080fd5b61029f826103bd565b600082516105068184602087016103ef565b9190910192915050565b602081526000825180602084015261052f8160408501602087016103ef565b601f01601f19169190910160400192915050565b61014c806105526000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd91906100e6565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b6000602082840312156100f857600080fd5b81516001600160a01b038116811461010f57600080fd5b939250505056fea264697066735822122073f44b13ad6a41f166bfe1da0f67ccdfa4d7fa137b8df1dcc52307b737bea46264736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c6abfaf825fb8c7fbe489dbf371ed8a4ca814004766fbd8da11a953936ac48b464736f6c634300081b0033", } // StrategyFactoryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyManager/binding.go b/pkg/bindings/StrategyManager/binding.go index 9eea5015b..54dbe6aed 100644 --- a/pkg/bindings/StrategyManager/binding.go +++ b/pkg/bindings/StrategyManager/binding.go @@ -32,7 +32,7 @@ var ( // StrategyManagerMetaData contains all meta data concerning the StrategyManager contract. var StrategyManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"getDeposits\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nonces\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWhitelister\",\"inputs\":[{\"name\":\"newStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"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\":\"stakerStrategyShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"\",\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"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\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThirdPartyTransfersDisabled\",\"inputs\":[]}]", - Bin: "0x61010060405234801561001157600080fd5b50604051612bcf380380612bcf83398101604081905261003091610135565b6001600160a01b0380841660805280831660a052811660c05261005161005d565b50504660e05250610182565b600054610100900460ff16156100c95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013257600080fd5b50565b60008060006060848603121561014a57600080fd5b83516101558161011d565b60208501519093506101668161011d565b60408501519092506101778161011d565b809150509250925092565b60805160a05160c05160e0516129f86101d760003960006112df0152600061046e0152600061028501526000818161051a01528181610a3901528181610d8801528181610ddd015261169801526129f86000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063c6656702116100ad578063df5cf7231161007c578063df5cf72314610515578063e7a050aa1461053c578063f2fde38b1461054f578063f698da2514610562578063fabc1cbc1461056a57600080fd5b8063c6656702146104c9578063cbc2bd62146104dc578063cf756fdf146104ef578063df5b35471461050257600080fd5b8063b1344271116100e9578063b134427114610469578063b5d8b5b814610490578063c4623ea1146104a3578063c608c7f3146104b657600080fd5b80638da5cb5b1461040157806394f649dd14610412578063967fc0d2146104335780639b4da03d1461044657600080fd5b80635ac86ab71161019d5780637a7e0d921161016c5780637a7e0d92146103675780637ecebe0014610392578063886f1195146103b25780638b8aac3c146103c55780638c80d4e5146103ee57600080fd5b80635ac86ab7146103015780635c975abb14610334578063663c1de41461033c578063715018a61461035f57600080fd5b80634665bcda116101d95780634665bcda1461028057806348825e94146102bf5780634e5a4263146102e6578063595c6a67146102f957600080fd5b806310d67a2f1461020b578063136439dd1461022057806320606b701461023357806332e89ace1461026d575b600080fd5b61021e610219366004612397565b61057d565b005b61021e61022e3660046123b4565b610631565b61025a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61025a61027b3660046123e3565b61071c565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610264565b61025a7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61021e6102f43660046124f4565b610919565b61021e610952565b61032461030f36600461252d565b609854600160ff9092169190911b9081161490565b6040519015158152602001610264565b60985461025a565b61032461034a366004612397565b60d16020526000908152604090205460ff1681565b61021e610a1a565b61025a610375366004612550565b60cd60209081526000928352604080842090915290825290205481565b61025a6103a0366004612397565b60ca6020526000908152604090205481565b6097546102a7906001600160a01b031681565b61025a6103d3366004612397565b6001600160a01b0316600090815260ce602052604090205490565b61021e6103fc36600461257e565b610a2e565b6033546001600160a01b03166102a7565b610425610420366004612397565b610a88565b6040516102649291906125bf565b60cb546102a7906001600160a01b031681565b610324610454366004612397565b60d36020526000908152604090205460ff1681565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61021e61049e36600461268f565b610c08565b61021e6104b13660046126d1565b610d7d565b61021e6104c4366004612722565b610dd2565b61021e6104d7366004612397565b610e8b565b6102a76104ea366004612775565b610e9c565b61021e6104fd3660046126d1565b610ed4565b61021e6105103660046127a1565b611008565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61025a61054a36600461257e565b6111c9565b61021e61055d366004612397565b611265565b61025a6112db565b61021e6105783660046123b4565b611318565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190612812565b6001600160a01b0316336001600160a01b0316146106255760405163794821ff60e01b815260040160405180910390fd5b61062e81611420565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d919061282f565b6106ba57604051631d77d47760e21b815260040160405180910390fd5b609854818116146106de5760405163c61dca5d60e01b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60985460009081906001908116036107475760405163840a48d560e01b815260040160405180910390fd5b60026065540361079e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026065556001600160a01b038816600090815260d3602052604090205460ff16156107dd5760405163dc34227160e01b815260040160405180910390fd5b428410156107fe57604051630819bdcd60e01b815260040160405180910390fd5b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca90935290822060018501905591506108b66112db565b60405161190160f01b60208201526022810191909152604281018390526062016040516020818303038152906040528051906020012090506108f98882886114b0565b610905888c8c8c611599565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610944576040516320ba3ff960e21b815260040160405180910390fd5b61094e82826116fd565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be919061282f565b6109db57604051631d77d47760e21b815260040160405180910390fd5b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610a2261176b565b610a2c60006117c5565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a775760405163f739589b60e01b815260040160405180910390fd5b610a82838383611817565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610ac057610ac06123cd565b604051908082528060200260200182016040528015610ae9578160200160208202803683370190505b50905060005b82811015610b7a576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610b2e57610b2e61284c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610b6757610b6761284c565b6020908102919091010152600101610aef565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610bf657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bd8575b50505050509150935093505050915091565b60cb546001600160a01b03163314610c33576040516320ba3ff960e21b815260040160405180910390fd5b8060005b81811015610a825760d16000858584818110610c5557610c5561284c565b9050602002016020810190610c6a9190612397565b6001600160a01b0316815260208101919091526040016000205460ff1615610d7557600060d16000868685818110610ca457610ca461284c565b9050602002016020810190610cb99190612397565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610d1457610d1461284c565b9050602002016020810190610d299190612397565b6040516001600160a01b03909116815260200160405180910390a1610d75848483818110610d5957610d5961284c565b9050602002016020810190610d6e9190612397565b60006116fd565b600101610c37565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610dc65760405163f739589b60e01b815260040160405180910390fd5b610a82848484846118d8565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e1b5760405163f739589b60e01b815260040160405180910390fd5b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b5050505050505050565b610e9361176b565b61062e81611a5b565b60ce6020528160005260406000208181548110610eb857600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff1615808015610ef45750600054600160ff909116105b80610f0e5750303b158015610f0e575060005460ff166001145b610f715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610795565b6000805460ff191660011790558015610f94576000805461ff0019166101001790555b610f9c611ac4565b60c955610fa98383611b5b565b610fb2856117c5565b610fbb84611a5b565b8015611001576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b03163314611033576040516320ba3ff960e21b815260040160405180910390fd5b828114611053576040516343714afd60e01b815260040160405180910390fd5b8260005b818110156111c15760d160008787848181106110755761107561284c565b905060200201602081019061108a9190612397565b6001600160a01b0316815260208101919091526040016000205460ff166111b957600160d160008888858181106110c3576110c361284c565b90506020020160208101906110d89190612397565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8686838181106111335761113361284c565b90506020020160208101906111489190612397565b6040516001600160a01b03909116815260200160405180910390a16111b98686838181106111785761117861284c565b905060200201602081019061118d9190612397565b85858481811061119f5761119f61284c565b90506020020160208101906111b49190612862565b6116fd565b600101611057565b505050505050565b60985460009081906001908116036111f45760405163840a48d560e01b815260040160405180910390fd5b6002606554036112465760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610795565b600260655561125733868686611599565b600160655595945050505050565b61126d61176b565b6001600160a01b0381166112d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b61062e816117c5565b60007f0000000000000000000000000000000000000000000000000000000000000000460361130b575060c95490565b611313611ac4565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138f9190612812565b6001600160a01b0316336001600160a01b0316146113c05760405163794821ff60e01b815260040160405180910390fd5b6098541981196098541916146113e95760405163c61dca5d60e01b815260040160405180910390fd5b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610711565b6001600160a01b038116611447576040516339b190bb60e11b815260040160405180910390fd5b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561155e57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906114f090869086906004016128cf565b602060405180830381865afa15801561150d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153191906128e8565b6001600160e01b031916146115595760405163026aa43360e31b815260040160405180910390fd5b505050565b826001600160a01b03166115728383611bdc565b6001600160a01b03161461155957604051636d20896160e11b815260040160405180910390fd5b6001600160a01b038316600090815260d16020526040812054849060ff166115d457604051632efd965160e11b815260040160405180910390fd5b6115e96001600160a01b038516338786611c02565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165c9190612912565b915061166a868587856118d8565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156116dc57600080fd5b505af11580156116f0573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610a2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610795565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008160000361183a576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b03808516600090815260cd60209081526040808320938716835292905220548083111561188157604051634b18b19360e01b815260040160405180910390fd5b6001600160a01b03808616600090815260cd60209081526040808320938816835292905290812091849003918290558190036118cb576118c18585611c5c565b60019150506118d1565b60009150505b9392505050565b6001600160a01b0384166118ff576040516316f2ccc960e01b815260040160405180910390fd5b80600003611920576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b03808516600090815260cd6020908152604080832093861683529290529081205490036119c7576001600160a01b038416600090815260ce602090815260409091205410611988576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd60209081526040808320938616835292905290812080548392906119fe908490612941565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b0316158015611b7c57506001600160a01b03821615155b611b99576040516339b190bb60e11b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261094e82611420565b6000806000611beb8585611de5565b91509150611bf881611e53565b5090505b92915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a82908590612009565b6001600160a01b038216600090815260ce6020526040812054905b81811015611d76576001600160a01b03848116600090815260ce6020526040902080549185169183908110611cae57611cae61284c565b6000918252602090912001546001600160a01b031603611d6e576001600160a01b038416600090815260ce602052604090208054611cee90600190612954565b81548110611cfe57611cfe61284c565b60009182526020808320909101546001600160a01b03878116845260ce9092526040909220805491909216919083908110611d3b57611d3b61284c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611d76565b600101611c77565b818103611d9657604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b038416600090815260ce60205260409020805480611dbd57611dbd612967565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604103611e1b5760208301516040840151606085015160001a611e0f878285856120db565b94509450505050611e4c565b8251604003611e445760208301516040840151611e398683836121c8565b935093505050611e4c565b506000905060025b9250929050565b6000816004811115611e6757611e6761297d565b03611e6f5750565b6001816004811115611e8357611e8361297d565b03611ed05760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610795565b6002816004811115611ee457611ee461297d565b03611f315760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610795565b6003816004811115611f4557611f4561297d565b03611f9d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610795565b6004816004811115611fb157611fb161297d565b0361062e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610795565b600061205e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122019092919063ffffffff16565b805190915015611559578080602001905181019061207c919061282f565b6115595760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610795565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561211257506000905060036121bf565b8460ff16601b1415801561212a57508460ff16601c14155b1561213b57506000905060046121bf565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561218f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166121b8576000600192509250506121bf565b9150600090505b94509492505050565b6000806001600160ff1b038316816121e560ff86901c601b612941565b90506121f3878288856120db565b935093505050935093915050565b60606122108484600085612218565b949350505050565b6060824710156122795760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610795565b6001600160a01b0385163b6122d05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610795565b600080866001600160a01b031685876040516122ec9190612993565b60006040518083038185875af1925050503d8060008114612329576040519150601f19603f3d011682016040523d82523d6000602084013e61232e565b606091505b509150915061233e828286612349565b979650505050505050565b606083156123585750816118d1565b8251156123685782518084602001fd5b8160405162461bcd60e51b815260040161079591906129af565b6001600160a01b038116811461062e57600080fd5b6000602082840312156123a957600080fd5b81356118d181612382565b6000602082840312156123c657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156123fc57600080fd5b863561240781612382565b9550602087013561241781612382565b945060408701359350606087013561242e81612382565b92506080870135915060a087013567ffffffffffffffff81111561245157600080fd5b8701601f8101891361246257600080fd5b803567ffffffffffffffff81111561247c5761247c6123cd565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156124ab576124ab6123cd565b6040528181528282016020018b10156124c357600080fd5b816020840160208301376000602083830101528093505050509295509295509295565b801515811461062e57600080fd5b6000806040838503121561250757600080fd5b823561251281612382565b91506020830135612522816124e6565b809150509250929050565b60006020828403121561253f57600080fd5b813560ff811681146118d157600080fd5b6000806040838503121561256357600080fd5b823561256e81612382565b9150602083013561252281612382565b60008060006060848603121561259357600080fd5b833561259e81612382565b925060208401356125ae81612382565b929592945050506040919091013590565b6040808252835190820181905260009060208501906060840190835b818110156126025783516001600160a01b03168352602093840193909201916001016125db565b50508381036020808601919091528551808352918101925085019060005b8181101561263e578251845260209384019390920191600101612620565b50919695505050505050565b60008083601f84011261265c57600080fd5b50813567ffffffffffffffff81111561267457600080fd5b6020830191508360208260051b8501011115611e4c57600080fd5b600080602083850312156126a257600080fd5b823567ffffffffffffffff8111156126b957600080fd5b6126c58582860161264a565b90969095509350505050565b600080600080608085870312156126e757600080fd5b84356126f281612382565b9350602085013561270281612382565b9250604085013561271281612382565b9396929550929360600135925050565b6000806000806080858703121561273857600080fd5b843561274381612382565b9350602085013561275381612382565b925060408501359150606085013561276a81612382565b939692955090935050565b6000806040838503121561278857600080fd5b823561279381612382565b946020939093013593505050565b600080600080604085870312156127b757600080fd5b843567ffffffffffffffff8111156127ce57600080fd5b6127da8782880161264a565b909550935050602085013567ffffffffffffffff8111156127fa57600080fd5b6128068782880161264a565b95989497509550505050565b60006020828403121561282457600080fd5b81516118d181612382565b60006020828403121561284157600080fd5b81516118d1816124e6565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561287457600080fd5b81356118d1816124e6565b60005b8381101561289a578181015183820152602001612882565b50506000910152565b600081518084526128bb81602086016020860161287f565b601f01601f19169290920160200192915050565b82815260406020820152600061221060408301846128a3565b6000602082840312156128fa57600080fd5b81516001600160e01b0319811681146118d157600080fd5b60006020828403121561292457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115611bfc57611bfc61292b565b81810381811115611bfc57611bfc61292b565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600082516129a581846020870161287f565b9190910192915050565b6020815260006118d160208301846128a356fea264697066735822122048f06383f67c48e93b6417b2d646ef8b5c560dadc03cc906ab7625187877df9564736f6c634300081b0033", + Bin: "0x61010060405234801561001157600080fd5b50604051612bcf380380612bcf83398101604081905261003091610135565b6001600160a01b0380841660805280831660a052811660c05261005161005d565b50504660e05250610182565b600054610100900460ff16156100c95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013257600080fd5b50565b60008060006060848603121561014a57600080fd5b83516101558161011d565b60208501519093506101668161011d565b60408501519092506101778161011d565b809150509250925092565b60805160a05160c05160e0516129f86101d760003960006112df0152600061046e0152600061028501526000818161051a01528181610a3901528181610d8801528181610ddd015261169801526129f86000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063c6656702116100ad578063df5cf7231161007c578063df5cf72314610515578063e7a050aa1461053c578063f2fde38b1461054f578063f698da2514610562578063fabc1cbc1461056a57600080fd5b8063c6656702146104c9578063cbc2bd62146104dc578063cf756fdf146104ef578063df5b35471461050257600080fd5b8063b1344271116100e9578063b134427114610469578063b5d8b5b814610490578063c4623ea1146104a3578063c608c7f3146104b657600080fd5b80638da5cb5b1461040157806394f649dd14610412578063967fc0d2146104335780639b4da03d1461044657600080fd5b80635ac86ab71161019d5780637a7e0d921161016c5780637a7e0d92146103675780637ecebe0014610392578063886f1195146103b25780638b8aac3c146103c55780638c80d4e5146103ee57600080fd5b80635ac86ab7146103015780635c975abb14610334578063663c1de41461033c578063715018a61461035f57600080fd5b80634665bcda116101d95780634665bcda1461028057806348825e94146102bf5780634e5a4263146102e6578063595c6a67146102f957600080fd5b806310d67a2f1461020b578063136439dd1461022057806320606b701461023357806332e89ace1461026d575b600080fd5b61021e610219366004612397565b61057d565b005b61021e61022e3660046123b4565b610631565b61025a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61025a61027b3660046123e3565b61071c565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610264565b61025a7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61021e6102f43660046124f4565b610919565b61021e610952565b61032461030f36600461252d565b609854600160ff9092169190911b9081161490565b6040519015158152602001610264565b60985461025a565b61032461034a366004612397565b60d16020526000908152604090205460ff1681565b61021e610a1a565b61025a610375366004612550565b60cd60209081526000928352604080842090915290825290205481565b61025a6103a0366004612397565b60ca6020526000908152604090205481565b6097546102a7906001600160a01b031681565b61025a6103d3366004612397565b6001600160a01b0316600090815260ce602052604090205490565b61021e6103fc36600461257e565b610a2e565b6033546001600160a01b03166102a7565b610425610420366004612397565b610a88565b6040516102649291906125bf565b60cb546102a7906001600160a01b031681565b610324610454366004612397565b60d36020526000908152604090205460ff1681565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61021e61049e36600461268f565b610c08565b61021e6104b13660046126d1565b610d7d565b61021e6104c4366004612722565b610dd2565b61021e6104d7366004612397565b610e8b565b6102a76104ea366004612775565b610e9c565b61021e6104fd3660046126d1565b610ed4565b61021e6105103660046127a1565b611008565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61025a61054a36600461257e565b6111c9565b61021e61055d366004612397565b611265565b61025a6112db565b61021e6105783660046123b4565b611318565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190612812565b6001600160a01b0316336001600160a01b0316146106255760405163794821ff60e01b815260040160405180910390fd5b61062e81611420565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d919061282f565b6106ba57604051631d77d47760e21b815260040160405180910390fd5b609854818116146106de5760405163c61dca5d60e01b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60985460009081906001908116036107475760405163840a48d560e01b815260040160405180910390fd5b60026065540361079e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026065556001600160a01b038816600090815260d3602052604090205460ff16156107dd5760405163dc34227160e01b815260040160405180910390fd5b428410156107fe57604051630819bdcd60e01b815260040160405180910390fd5b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca90935290822060018501905591506108b66112db565b60405161190160f01b60208201526022810191909152604281018390526062016040516020818303038152906040528051906020012090506108f98882886114b0565b610905888c8c8c611599565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610944576040516320ba3ff960e21b815260040160405180910390fd5b61094e82826116fd565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be919061282f565b6109db57604051631d77d47760e21b815260040160405180910390fd5b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610a2261176b565b610a2c60006117c5565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a775760405163f739589b60e01b815260040160405180910390fd5b610a82838383611817565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610ac057610ac06123cd565b604051908082528060200260200182016040528015610ae9578160200160208202803683370190505b50905060005b82811015610b7a576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610b2e57610b2e61284c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610b6757610b6761284c565b6020908102919091010152600101610aef565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610bf657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bd8575b50505050509150935093505050915091565b60cb546001600160a01b03163314610c33576040516320ba3ff960e21b815260040160405180910390fd5b8060005b81811015610a825760d16000858584818110610c5557610c5561284c565b9050602002016020810190610c6a9190612397565b6001600160a01b0316815260208101919091526040016000205460ff1615610d7557600060d16000868685818110610ca457610ca461284c565b9050602002016020810190610cb99190612397565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610d1457610d1461284c565b9050602002016020810190610d299190612397565b6040516001600160a01b03909116815260200160405180910390a1610d75848483818110610d5957610d5961284c565b9050602002016020810190610d6e9190612397565b60006116fd565b600101610c37565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610dc65760405163f739589b60e01b815260040160405180910390fd5b610a82848484846118d8565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e1b5760405163f739589b60e01b815260040160405180910390fd5b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b5050505050505050565b610e9361176b565b61062e81611a5b565b60ce6020528160005260406000208181548110610eb857600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff1615808015610ef45750600054600160ff909116105b80610f0e5750303b158015610f0e575060005460ff166001145b610f715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610795565b6000805460ff191660011790558015610f94576000805461ff0019166101001790555b610f9c611ac4565b60c955610fa98383611b5b565b610fb2856117c5565b610fbb84611a5b565b8015611001576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b03163314611033576040516320ba3ff960e21b815260040160405180910390fd5b828114611053576040516343714afd60e01b815260040160405180910390fd5b8260005b818110156111c15760d160008787848181106110755761107561284c565b905060200201602081019061108a9190612397565b6001600160a01b0316815260208101919091526040016000205460ff166111b957600160d160008888858181106110c3576110c361284c565b90506020020160208101906110d89190612397565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8686838181106111335761113361284c565b90506020020160208101906111489190612397565b6040516001600160a01b03909116815260200160405180910390a16111b98686838181106111785761117861284c565b905060200201602081019061118d9190612397565b85858481811061119f5761119f61284c565b90506020020160208101906111b49190612862565b6116fd565b600101611057565b505050505050565b60985460009081906001908116036111f45760405163840a48d560e01b815260040160405180910390fd5b6002606554036112465760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610795565b600260655561125733868686611599565b600160655595945050505050565b61126d61176b565b6001600160a01b0381166112d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b61062e816117c5565b60007f0000000000000000000000000000000000000000000000000000000000000000460361130b575060c95490565b611313611ac4565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138f9190612812565b6001600160a01b0316336001600160a01b0316146113c05760405163794821ff60e01b815260040160405180910390fd5b6098541981196098541916146113e95760405163c61dca5d60e01b815260040160405180910390fd5b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610711565b6001600160a01b038116611447576040516339b190bb60e11b815260040160405180910390fd5b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561155e57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906114f090869086906004016128cf565b602060405180830381865afa15801561150d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153191906128e8565b6001600160e01b031916146115595760405163026aa43360e31b815260040160405180910390fd5b505050565b826001600160a01b03166115728383611bdc565b6001600160a01b03161461155957604051636d20896160e11b815260040160405180910390fd5b6001600160a01b038316600090815260d16020526040812054849060ff166115d457604051632efd965160e11b815260040160405180910390fd5b6115e96001600160a01b038516338786611c02565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165c9190612912565b915061166a868587856118d8565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156116dc57600080fd5b505af11580156116f0573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610a2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610795565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008160000361183a576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b03808516600090815260cd60209081526040808320938716835292905220548083111561188157604051634b18b19360e01b815260040160405180910390fd5b6001600160a01b03808616600090815260cd60209081526040808320938816835292905290812091849003918290558190036118cb576118c18585611c5c565b60019150506118d1565b60009150505b9392505050565b6001600160a01b0384166118ff576040516316f2ccc960e01b815260040160405180910390fd5b80600003611920576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b03808516600090815260cd6020908152604080832093861683529290529081205490036119c7576001600160a01b038416600090815260ce602090815260409091205410611988576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd60209081526040808320938616835292905290812080548392906119fe908490612941565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b0316158015611b7c57506001600160a01b03821615155b611b99576040516339b190bb60e11b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261094e82611420565b6000806000611beb8585611de5565b91509150611bf881611e53565b5090505b92915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a82908590612009565b6001600160a01b038216600090815260ce6020526040812054905b81811015611d76576001600160a01b03848116600090815260ce6020526040902080549185169183908110611cae57611cae61284c565b6000918252602090912001546001600160a01b031603611d6e576001600160a01b038416600090815260ce602052604090208054611cee90600190612954565b81548110611cfe57611cfe61284c565b60009182526020808320909101546001600160a01b03878116845260ce9092526040909220805491909216919083908110611d3b57611d3b61284c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611d76565b600101611c77565b818103611d9657604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b038416600090815260ce60205260409020805480611dbd57611dbd612967565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604103611e1b5760208301516040840151606085015160001a611e0f878285856120db565b94509450505050611e4c565b8251604003611e445760208301516040840151611e398683836121c8565b935093505050611e4c565b506000905060025b9250929050565b6000816004811115611e6757611e6761297d565b03611e6f5750565b6001816004811115611e8357611e8361297d565b03611ed05760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610795565b6002816004811115611ee457611ee461297d565b03611f315760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610795565b6003816004811115611f4557611f4561297d565b03611f9d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610795565b6004816004811115611fb157611fb161297d565b0361062e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610795565b600061205e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122019092919063ffffffff16565b805190915015611559578080602001905181019061207c919061282f565b6115595760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610795565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561211257506000905060036121bf565b8460ff16601b1415801561212a57508460ff16601c14155b1561213b57506000905060046121bf565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561218f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166121b8576000600192509250506121bf565b9150600090505b94509492505050565b6000806001600160ff1b038316816121e560ff86901c601b612941565b90506121f3878288856120db565b935093505050935093915050565b60606122108484600085612218565b949350505050565b6060824710156122795760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610795565b6001600160a01b0385163b6122d05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610795565b600080866001600160a01b031685876040516122ec9190612993565b60006040518083038185875af1925050503d8060008114612329576040519150601f19603f3d011682016040523d82523d6000602084013e61232e565b606091505b509150915061233e828286612349565b979650505050505050565b606083156123585750816118d1565b8251156123685782518084602001fd5b8160405162461bcd60e51b815260040161079591906129af565b6001600160a01b038116811461062e57600080fd5b6000602082840312156123a957600080fd5b81356118d181612382565b6000602082840312156123c657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156123fc57600080fd5b863561240781612382565b9550602087013561241781612382565b945060408701359350606087013561242e81612382565b92506080870135915060a087013567ffffffffffffffff81111561245157600080fd5b8701601f8101891361246257600080fd5b803567ffffffffffffffff81111561247c5761247c6123cd565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156124ab576124ab6123cd565b6040528181528282016020018b10156124c357600080fd5b816020840160208301376000602083830101528093505050509295509295509295565b801515811461062e57600080fd5b6000806040838503121561250757600080fd5b823561251281612382565b91506020830135612522816124e6565b809150509250929050565b60006020828403121561253f57600080fd5b813560ff811681146118d157600080fd5b6000806040838503121561256357600080fd5b823561256e81612382565b9150602083013561252281612382565b60008060006060848603121561259357600080fd5b833561259e81612382565b925060208401356125ae81612382565b929592945050506040919091013590565b6040808252835190820181905260009060208501906060840190835b818110156126025783516001600160a01b03168352602093840193909201916001016125db565b50508381036020808601919091528551808352918101925085019060005b8181101561263e578251845260209384019390920191600101612620565b50919695505050505050565b60008083601f84011261265c57600080fd5b50813567ffffffffffffffff81111561267457600080fd5b6020830191508360208260051b8501011115611e4c57600080fd5b600080602083850312156126a257600080fd5b823567ffffffffffffffff8111156126b957600080fd5b6126c58582860161264a565b90969095509350505050565b600080600080608085870312156126e757600080fd5b84356126f281612382565b9350602085013561270281612382565b9250604085013561271281612382565b9396929550929360600135925050565b6000806000806080858703121561273857600080fd5b843561274381612382565b9350602085013561275381612382565b925060408501359150606085013561276a81612382565b939692955090935050565b6000806040838503121561278857600080fd5b823561279381612382565b946020939093013593505050565b600080600080604085870312156127b757600080fd5b843567ffffffffffffffff8111156127ce57600080fd5b6127da8782880161264a565b909550935050602085013567ffffffffffffffff8111156127fa57600080fd5b6128068782880161264a565b95989497509550505050565b60006020828403121561282457600080fd5b81516118d181612382565b60006020828403121561284157600080fd5b81516118d1816124e6565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561287457600080fd5b81356118d1816124e6565b60005b8381101561289a578181015183820152602001612882565b50506000910152565b600081518084526128bb81602086016020860161287f565b601f01601f19169290920160200192915050565b82815260406020820152600061221060408301846128a3565b6000602082840312156128fa57600080fd5b81516001600160e01b0319811681146118d157600080fd5b60006020828403121561292457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115611bfc57611bfc61292b565b81810381811115611bfc57611bfc61292b565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600082516129a581846020870161287f565b9190910192915050565b6020815260006118d160208301846128a356fea264697066735822122015e346482f7eb5529f55d6c4fc0654a81836eb009c29a52350b04f1ad367a6fb64736f6c634300081b0033", } // StrategyManagerABI is the input ABI used to generate the binding from. diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 1b3bb5b61..770811ede 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -45,10 +45,7 @@ contract DelegationManager is // @notice Simple permission for functions that are only callable by the StrategyManager contract OR by the EigenPodManagerContract modifier onlyStrategyManagerOrEigenPodManager() { - require( - msg.sender == address(strategyManager) || msg.sender == address(eigenPodManager), - OnlyStrategyManagerOrEigenPodManager() - ); + require(msg.sender == address(strategyManager) || msg.sender == address(eigenPodManager), UnauthorizedCaller()); _; } @@ -108,7 +105,7 @@ contract DelegationManager is OperatorDetails calldata registeringOperatorDetails, string calldata metadataURI ) external { - require(!isDelegated(msg.sender), ActivelyDelegated()); + require(!isDelegated(msg.sender), AlreadyDelegated()); _setOperatorDetails(msg.sender, registeringOperatorDetails); SignatureWithExpiry memory emptySignatureAndExpiry; // delegate from the operator to themselves @@ -127,7 +124,7 @@ contract DelegationManager is function modifyOperatorDetails( OperatorDetails calldata newOperatorDetails ) external { - require(isOperator(msg.sender), OperatorNotRegistered()); + require(isOperator(msg.sender), OperatorDoesNotExist()); _setOperatorDetails(msg.sender, newOperatorDetails); } @@ -138,7 +135,7 @@ contract DelegationManager is function updateOperatorMetadataURI( string calldata metadataURI ) external { - require(isOperator(msg.sender), OperatorNotRegistered()); + require(isOperator(msg.sender), OperatorDoesNotExist()); emit OperatorMetadataURIUpdated(msg.sender, metadataURI); } @@ -160,8 +157,8 @@ contract DelegationManager is SignatureWithExpiry memory approverSignatureAndExpiry, bytes32 approverSalt ) external { - require(!isDelegated(msg.sender), ActivelyDelegated()); - require(isOperator(operator), OperatorNotRegistered()); + require(!isDelegated(msg.sender), AlreadyDelegated()); + require(isOperator(operator), OperatorDoesNotExist()); // go through the internal delegation flow, checking the `approverSignatureAndExpiry` if applicable _delegate(msg.sender, operator, approverSignatureAndExpiry, approverSalt); } @@ -192,8 +189,8 @@ contract DelegationManager is ) external { // check the signature expiry require(stakerSignatureAndExpiry.expiry >= block.timestamp, SignatureExpired()); - require(!isDelegated(staker), ActivelyDelegated()); - require(isOperator(operator), OperatorNotRegistered()); + require(!isDelegated(staker), AlreadyDelegated()); + require(isOperator(operator), OperatorDoesNotExist()); // calculate the digest hash, then increment `staker`'s nonce uint256 currentStakerNonce = stakerNonce[staker]; @@ -218,14 +215,14 @@ contract DelegationManager is function undelegate( address staker ) external onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) returns (bytes32[] memory withdrawalRoots) { - require(isDelegated(staker), NotActivelyDelegated()); + require(isDelegated(staker), NotCurrentlyDelegated()); require(!isOperator(staker), OperatorsCannotUndelegate()); require(staker != address(0), InputAddressZero()); address operator = delegatedTo[staker]; require( msg.sender == staker || msg.sender == operator || msg.sender == _operatorDetails[operator].delegationApprover, - CallerCannotUndelegate() + UnauthorizedCaller() ); // Gather strategies and shares to remove from staker/operator during undelegation @@ -432,11 +429,11 @@ contract DelegationManager is function _setOperatorDetails(address operator, OperatorDetails calldata newOperatorDetails) internal { require( newOperatorDetails.stakerOptOutWindowBlocks <= MAX_STAKER_OPT_OUT_WINDOW_BLOCKS, - "DelegationManager._setOperatorDetails: stakerOptOutWindowBlocks cannot be > MAX_STAKER_OPT_OUT_WINDOW_BLOCKS" + StakerOptOutWindowBlocksExceedsMax() ); require( newOperatorDetails.stakerOptOutWindowBlocks >= _operatorDetails[operator].stakerOptOutWindowBlocks, - "DelegationManager._setOperatorDetails: stakerOptOutWindowBlocks cannot be decreased" + StakerOptOutWindowBlocksCannotDecrease() ); _operatorDetails[operator] = newOperatorDetails; emit OperatorDetailsModified(msg.sender, newOperatorDetails); @@ -472,7 +469,7 @@ contract DelegationManager is // check the signature expiry require(approverSignatureAndExpiry.expiry >= block.timestamp, SignatureExpired()); // check that the salt hasn't been used previously, then mark the salt as spent - require(!delegationApproverSaltIsSpent[_delegationApprover][approverSalt], SaltSpent()); + require(!delegationApproverSaltIsSpent[_delegationApprover][approverSalt], SignatureSaltSpent()); delegationApproverSaltIsSpent[_delegationApprover][approverSalt] = true; // forgefmt: disable-next-item @@ -527,11 +524,11 @@ contract DelegationManager is ) internal { bytes32 withdrawalRoot = calculateWithdrawalRoot(withdrawal); - require(pendingWithdrawals[withdrawalRoot], WithdrawalNotQueued()); + require(pendingWithdrawals[withdrawalRoot], WithdrawalDoesNotExist()); require(withdrawal.startBlock + minWithdrawalDelayBlocks <= block.number, WithdrawalDelayNotElapsed()); - require(msg.sender == withdrawal.withdrawer, WithdrawerNotCaller()); + require(msg.sender == withdrawal.withdrawer, UnauthorizedCaller()); if (receiveAsTokens) { require(tokens.length == withdrawal.strategies.length, InputArrayLengthMismatch()); @@ -567,7 +564,7 @@ contract DelegationManager is for (uint256 i = 0; i < withdrawal.strategies.length;) { require( withdrawal.startBlock + strategyWithdrawalDelayBlocks[withdrawal.strategies[i]] <= block.number, - "DelegationManager._completeQueuedWithdrawal: withdrawalDelayBlocks period has not yet passed for this strategy" + WithdrawalDelayNotElapsed() ); /** @@ -667,6 +664,7 @@ contract DelegationManager is */ eigenPodManager.removeShares(staker, shares[i]); } else { + // If thirdPartyTransfersForbidden is set, withdrawer and staker must be the same address require( staker == withdrawer || !strategyManager.thirdPartyTransfersForbidden(strategies[i]), WithdrawerNotStaker() @@ -724,10 +722,7 @@ contract DelegationManager is function _setMinWithdrawalDelayBlocks( uint256 _minWithdrawalDelayBlocks ) internal { - require( - _minWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, - "DelegationManager._setMinWithdrawalDelayBlocks: _minWithdrawalDelayBlocks cannot be > MAX_WITHDRAWAL_DELAY_BLOCKS" - ); + require(_minWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, WithdrawalDelayExceedsMax()); emit MinWithdrawalDelayBlocksSet(minWithdrawalDelayBlocks, _minWithdrawalDelayBlocks); minWithdrawalDelayBlocks = _minWithdrawalDelayBlocks; } @@ -740,19 +735,13 @@ contract DelegationManager is IStrategy[] calldata _strategies, uint256[] calldata _withdrawalDelayBlocks ) internal { - require( - _strategies.length == _withdrawalDelayBlocks.length, - "DelegationManager._setStrategyWithdrawalDelayBlocks: input length mismatch" - ); + require(_strategies.length == _withdrawalDelayBlocks.length, InputArrayLengthMismatch()); uint256 numStrats = _strategies.length; for (uint256 i = 0; i < numStrats; ++i) { IStrategy strategy = _strategies[i]; uint256 prevStrategyWithdrawalDelayBlocks = strategyWithdrawalDelayBlocks[strategy]; uint256 newStrategyWithdrawalDelayBlocks = _withdrawalDelayBlocks[i]; - require( - newStrategyWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, - "DelegationManager._setStrategyWithdrawalDelayBlocks: _withdrawalDelayBlocks cannot be > MAX_WITHDRAWAL_DELAY_BLOCKS" - ); + require(newStrategyWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, WithdrawalDelayExceedsMax()); // set the new withdrawal delay blocks strategyWithdrawalDelayBlocks[strategy] = newStrategyWithdrawalDelayBlocks; diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index 612421f2e..e7d9f44d9 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -15,40 +15,46 @@ import "./ISignatureUtils.sol"; * - enabling a staker to undelegate its assets from the operator it is delegated to (performed as part of the withdrawal process, initiated through the StrategyManager) */ interface IDelegationManager is ISignatureUtils { - /// @dev Thrown when an account is actively delegated. - error ActivelyDelegated(); - /// @dev Thrown when attempting to execute an action that was not queued. - error WithdrawalNotQueued(); - /// @dev Thrown when caller cannot undelegate on behalf of a staker. - error CallerCannotUndelegate(); + /// @dev Thrown when msg.sender is not allowed to call a function + error UnauthorizedCaller(); + + /// Delegation Status + + /// @dev Thrown when an account is currently delegated. + error AlreadyDelegated(); + /// @dev Thrown when an account is not currently delegated. + error NotCurrentlyDelegated(); + /// @dev Thrown when an operator attempts to undelegate. + error OperatorsCannotUndelegate(); + /// @dev Thrown when `operator` is not a registered operator. + error OperatorDoesNotExist(); + + /// Invalid Inputs + /// @dev Thrown when two array parameters have mismatching lengths. error InputArrayLengthMismatch(); /// @dev Thrown when input arrays length is zero. error InputArrayLengthZero(); - /// @dev Thrown when `operator` is not a registered operator. - error OperatorNotRegistered(); - /// @dev Thrown when caller is neither the StrategyManager or EigenPodManager contract. - error OnlyStrategyManagerOrEigenPodManager(); - /// @dev Thrown when an operator attempts to undelegate. - error OperatorsCannotUndelegate(); - /// @dev Thrown when an account is not actively delegated. - error NotActivelyDelegated(); - /// @dev Thrown when attempting to spend a spent eip-712 salt. - error SaltSpent(); - /// @dev Thrown when attempting to use an expired eip-712 signature. - error SignatureExpired(); /// @dev Thrown when provided `stakerOptOutWindowBlocks` cannot decrease. error StakerOptOutWindowBlocksCannotDecrease(); /// @dev Thrown when provided `stakerOptOutWindowBlocks` exceeds maximum. error StakerOptOutWindowBlocksExceedsMax(); + /// @dev Thrown when provided delay exceeds maximum. + error WithdrawalDelayExceedsMax(); + + /// Signatures + + /// @dev Thrown when attempting to spend a spent eip-712 salt. + error SignatureSaltSpent(); + /// @dev Thrown when attempting to use an expired eip-712 signature. + error SignatureExpired(); + + /// Withdrawal Processing + + /// @dev Thrown when attempting to execute an action that was not queued. + error WithdrawalDoesNotExist(); /// @dev Thrown when attempting to withdraw before delay has elapsed. error WithdrawalDelayNotElapsed(); - /// @dev Thrown when provided delay exceeds maximum. - error WithdrawalDelayExeedsMax(); - /// @dev Thrown when a withdraw amount larger than max is attempted. - error WithdrawalExeedsMax(); - /// @dev Thrown when withdrawer is not the current caller. - error WithdrawerNotCaller(); /// @dev Thrown when `withdrawer` is not staker. error WithdrawerNotStaker(); From 0b5790b594fcf5e53158a82c8b0561f4be870808 Mon Sep 17 00:00:00 2001 From: Yash Patil <40046473+ypatil12@users.noreply.github.com> Date: Wed, 26 Jun 2024 11:01:25 -0400 Subject: [PATCH 05/47] feat: operatorSets in AVSDirectory * feat: functionality * test: add tests * chore: address comments * chore: bindigns and fmt fix: block m2 deregistrations for opset AVSs (#688) * fix: prevent opSet AVS from m2 dereg * fix: naming build: bindings chore: compilation & bindings Feat: enumerating sets operators are in (#662) * feat: track sets operators in * feat: add natspec * refactor: reorganize * fix: tests passing * fix: compile warnings * fix: test passing * feat: add `operatorSetsMemberOf` pagination * test: add coverage * chore: bindings --------- fix: fix operator commission tests (#673) * fix: flakey tests * build: bindings * fix: out of gas error fix: deploy config fix: deployers chore: bindings chore: update gap chore: address comments feat: remove storage (#667) feat: operator set rewards (#663) * feat: operator set rewards * chore: forge fmt * feat: add operator set retroactive length & genesis timestamp * docs: add deprecation note and fix typo * build: bindings * feat: add tests * chore: bindings --------- feat: track total members and sets (#649) * feat: track total members and sets * test: track total members and sets * fix: review changes * refactor: review changes * test: register multiple sets * test: deregister multiple sets * test: fuzz set creation fix: compiling from conflict fix also pushed updated bindings feat: operator commission bips (#627) * feat: operator commission bips configured with a delay * build: bindings * fix: interfaces and comments * fix: storage gap and comments * chore: tests cleanup * build: bindings * chore: `forge fmt src/contracts` * feat: `operatorCommissionUpdates` length getter * fix: remove unused imports * fix: optimizations * chore: uncheckeds and remove dup view * build: bindings * chore: format --------- feat: operator set migration; completely separate legacy and opset reg (#636) * feat: bring back full storage; segregate events * feat: make operator set creation w/arrays; update interface * fix: update natspec * feat: update force dereg func * chore: fmt * feat: operator set migration (#637) * feat: add migration * test: add unit tests for migration * chore: format * fix: check operator set avs in parent func * fix: compilation * chore: format * feat: bring back opertor set struct (#639) test: operator set initialization feat: operator set initialization feat: add missing interface fns feat: add missing interface fns refactor: remove OperatorSet struct test: forced opset dereg chore: forge fmt src/contracts feat: forced opset dereg chore: forge fmt refactor: rename isOperatorInOperatorSet -> isMember feat: remove simp mode chore: improve comments + naming fix: variable name consistency nit: move updateStandbyParams fn refactor: storage optimization/overhaul refactor: remove unused beaconChainETHStrategy constant refactor: remove isOperatorSetAVS mapping nit: improve comments chore: run `forge fmt src/contracts` chore: run fix: remove unused immutable Feat/operator sets (#579) * feat: operator set scaffold * fix: impl/storage compile errors; pending updating of tests * chore: `forge fmt` * fix: `OperatorSet` struct misuse * fix: comment * chore: verbose use of `OperatorSet` * test: `registerOperatorToOperatorSet` * feat: `registerOperatorToOperatorSets` Enables registering multiple operator sets in a single call. * chore: `forge fmt` * feat: interface changes * fix: operator set digest * fix: `OPERATOR_SET_REGISTRATION_TYPEHASH` * chore: `forge fmt` * test: wrong avs using signature * fix: optimize for SSTOREs * test: `deregisterOperatorFromOperatorSets` * chore: rename `operatorSetStrategies` * test: `addStrategiesToOperatorSet` * test: `removeStrategiesFromOperatorSet` * test: more coverage * chore: improve natspec * WIP: simp mode * WIP: simp mode * WIP: simp mode - includes interface change, specifically the `StandbyParams` structure. `id` isn't needed for storage. * test: simp mode * test: simp mode * test: simp mode * refactor: simp mode storage * Revert "refactor: simp mode storage" This reverts commit 3b0450e60aeaa9e2b428da6f5795c5e3b5754743. * Reapply "refactor: simp mode storage" This reverts commit 5f90d78af72edff64f8ba4741f02c702956053c1. * feat: simp mode * fix(optimize): salt cancellation - remove check * test: improvements * test: improvements * fix: move `isOperatorSetAVS` update out of loop ooops * fix: standby update typehash * test: cleanup * fix: move mutation out of loop * nit: cleanup * fix: remove unused events --------- Co-Authored-By: Yash Patil Co-Authored-By: clandestine.eth <96172957+0xClandestine@users.noreply.github.com> --- pkg/bindings/AVSDirectory/binding.go | 1269 ++++++++++- pkg/bindings/AVSDirectoryStorage/binding.go | 1665 ++++++++++++-- .../DelayedWithdrawalRouter/binding.go | 1969 +++++++++++++++++ pkg/bindings/DelegationManager/binding.go | 4 +- pkg/bindings/EigenPodManager/binding.go | 4 +- pkg/bindings/IAVSDirectory/binding.go | 1668 ++++++++++++-- pkg/bindings/IRewardsCoordinator/binding.go | 657 ++++-- pkg/bindings/RewardsCoordinator/binding.go | 952 +++++--- .../RewardsCoordinatorStorage/binding.go | 836 ++++--- ...loy_RewardsCoordinator.holesky.config.json | 60 + .../Deploy_Test_RewardsCoordinator.s.sol | 10 +- script/deploy/local/Deploy_From_Scratch.s.sol | 5 +- .../mainnet/Deploy_Strategy_Factory.s.sol | 61 + .../mainnet/v0.3.0-mainnet-rewards.s.sol | 10 +- script/utils/ExistingDeploymentParser.sol | 8 + src/contracts/core/AVSDirectory.sol | 555 ++++- src/contracts/core/AVSDirectoryStorage.sol | 39 +- src/contracts/core/DelegationManager.sol | 1 + src/contracts/core/RewardsCoordinator.sol | 240 +- .../core/RewardsCoordinatorStorage.sol | 49 +- src/contracts/interfaces/IAVSDirectory.sol | 274 ++- .../interfaces/IRewardsCoordinator.sol | 112 +- src/contracts/pods/EigenPodManager.sol | 1 + src/test/events/IAVSDirectoryEvents.sol | 24 +- src/test/events/IRewardsCoordinatorEvents.sol | 17 + src/test/mocks/AVSDirectoryMock.sol | 105 + src/test/unit/AVSDirectoryUnit.t.sol | 1152 +++++++++- src/test/unit/RewardsCoordinatorUnit.t.sol | 725 +++++- src/test/utils/EigenLayerUnitTestSetup.sol | 3 + 29 files changed, 11112 insertions(+), 1363 deletions(-) create mode 100644 pkg/bindings/DelayedWithdrawalRouter/binding.go create mode 100644 script/configs/holesky/Deploy_RewardsCoordinator.holesky.config.json create mode 100644 script/deploy/mainnet/Deploy_Strategy_Factory.s.sol create mode 100644 src/test/mocks/AVSDirectoryMock.sol diff --git a/pkg/bindings/AVSDirectory/binding.go b/pkg/bindings/AVSDirectory/binding.go index 6ce82c72f..c78bf2f99 100644 --- a/pkg/bindings/AVSDirectory/binding.go +++ b/pkg/bindings/AVSDirectory/binding.go @@ -29,6 +29,12 @@ var ( _ = abi.ConvertType ) +// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryOperatorSet struct { + Avs common.Address + OperatorSetId uint32 +} + // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -38,8 +44,8 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryMetaData contains all meta data concerning the AVSDirectory contract. var AVSDirectoryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"enumIAVSDirectory.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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"InvalidAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b50604051611a17380380611a1783398101604081905261002f9161010e565b6001600160a01b03811660805261004461004e565b504660a05261013e565b600054610100900460ff16156100ba5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010c576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561012057600080fd5b81516001600160a01b038116811461013757600080fd5b9392505050565b60805160a0516118ad61016a6000396000610bff015260008181610324015261085f01526118ad6000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b1461037a578063f698da251461038d578063fabc1cbc1461039557600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a610155366004611406565b6103a8565b005b61015a61016a36600461142a565b61045c565b61015a61017d366004611443565b610547565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611484565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b6102286102083660046114b0565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906114ff565b61015a610676565b6101ea61024b366004611527565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a61073e565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba3660046115ba565b610752565b6101a96102cd3660046116af565b61099d565b61015a6102e0366004611406565b610a56565b61015a6102f33660046116f5565b610b3e565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000000000000000000000000000000000000000000081565b61015a61035436600461142a565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b61015a610388366004611406565b610b85565b6101a9610bfb565b61015a6103a336600461142a565b610c38565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041f9190611769565b6001600160a01b0316336001600160a01b0316146104505760405163794821ff60e01b815260040160405180910390fd5b61045981610d40565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190611786565b6104e557604051631d77d47760e21b815260040160405180910390fd5b606654818116146105095760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105675750600054600160ff909116105b806105815750303b158015610581575060005460ff166001145b6105e95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561060c576000805461ff0019166101001790555b6106168383610dd0565b61061e610e55565b60975561062a84610eec565b8015610670576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e29190611786565b6106ff57604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610746610f3e565b6107506000610eec565b565b60665460009060019081160361077b5760405163840a48d560e01b815260040160405180910390fd5b42826040015110156107a057604051630819bdcd60e01b815260040160405180910390fd5b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156107da576107da6114e9565b036107f85760405163ccea9e6f60e01b815260040160405180910390fd5b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff161561084057604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca9190611786565b6108e7576040516325ec6c1f60e01b815260040160405180910390fd5b60006108fd84338560200151866040015161099d565b905061090e84828560000151610f98565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b419161098f91906114ff565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610a13610bfb565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b606654600090600190811603610a7f5760405163840a48d560e01b815260040160405180910390fd5b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610ab957610ab96114e9565b14610ad75760405163ccea9e6f60e01b815260040160405180910390fd5b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b3291906114ff565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610b799291906117a8565b60405180910390a25050565b610b8d610f3e565b6001600160a01b038116610bf25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105e0565b61045981610eec565b60007f00000000000000000000000000000000000000000000000000000000000000004603610c2b575060975490565b610c33610e55565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caf9190611769565b6001600160a01b0316336001600160a01b031614610ce05760405163794821ff60e01b815260040160405180910390fd5b606654198119606654191614610d095760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161053c565b6001600160a01b038116610d67576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b0316158015610df157506001600160a01b03821615155b610e0e576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610e5182610d40565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e0565b6001600160a01b0383163b1561104657604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90610fd890869086906004016117d7565b602060405180830381865afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611019919061182c565b6001600160e01b031916146110415760405163026aa43360e31b815260040160405180910390fd5b505050565b826001600160a01b031661105a8383611081565b6001600160a01b03161461104157604051636d20896160e11b815260040160405180910390fd5b600080600061109085856110a7565b9150915061109d81611115565b5090505b92915050565b60008082516041036110dd5760208301516040840151606085015160001a6110d1878285856112cb565b9450945050505061110e565b825160400361110657602083015160408401516110fb8683836113b8565b93509350505061110e565b506000905060025b9250929050565b6000816004811115611129576111296114e9565b036111315750565b6001816004811115611145576111456114e9565b036111925760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016105e0565b60028160048111156111a6576111a66114e9565b036111f35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016105e0565b6003816004811115611207576112076114e9565b0361125f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016105e0565b6004816004811115611273576112736114e9565b036104595760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016105e0565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561130257506000905060036113af565b8460ff16601b1415801561131a57508460ff16601c14155b1561132b57506000905060046113af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561137f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a8576000600192509250506113af565b9150600090505b94509492505050565b6000806001600160ff1b038316816113d560ff86901c601b611856565b90506113e3878288856112cb565b935093505050935093915050565b6001600160a01b038116811461045957600080fd5b60006020828403121561141857600080fd5b8135611423816113f1565b9392505050565b60006020828403121561143c57600080fd5b5035919050565b60008060006060848603121561145857600080fd5b8335611463816113f1565b92506020840135611473816113f1565b929592945050506040919091013590565b6000806040838503121561149757600080fd5b82356114a2816113f1565b946020939093013593505050565b600080604083850312156114c357600080fd5b82356114ce816113f1565b915060208301356114de816113f1565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061152157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561153957600080fd5b813560ff8116811461142357600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156115835761158361154a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156115b2576115b261154a565b604052919050565b600080604083850312156115cd57600080fd5b82356115d8816113f1565b9150602083013567ffffffffffffffff8111156115f457600080fd5b83016060818603121561160657600080fd5b61160e611560565b813567ffffffffffffffff81111561162557600080fd5b8201601f8101871361163657600080fd5b803567ffffffffffffffff8111156116505761165061154a565b611663601f8201601f1916602001611589565b81815288602083850101111561167857600080fd5b8160208401602083013760006020928201830152835283810135908301525060409182013591810191909152919491935090915050565b600080600080608085870312156116c557600080fd5b84356116d0816113f1565b935060208501356116e0816113f1565b93969395505050506040820135916060013590565b6000806020838503121561170857600080fd5b823567ffffffffffffffff81111561171f57600080fd5b8301601f8101851361173057600080fd5b803567ffffffffffffffff81111561174757600080fd5b85602082840101111561175957600080fd5b6020919091019590945092505050565b60006020828403121561177b57600080fd5b8151611423816113f1565b60006020828403121561179857600080fd5b8151801515811461142357600080fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b828152604060208201526000825180604084015260005b8181101561180b57602081860181015160608684010152016117ee565b506000606082850101526060601f19601f8301168401019150509392505050565b60006020828403121561183e57600080fd5b81516001600160e01b03198116811461142357600080fd5b808201808211156110a157634e487b7160e01b600052601160045260246000fdfea2646970667358221220c74af5bb9516ee82aa09e6a5df65994aa3815df73ae3243b3a01ccae91a3408b64736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"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\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getNumOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetsOfOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetMemberAtIndex\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOfAtIndex\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", + Bin: "0x60c06040523480156200001157600080fd5b5060405162003f5938038062003f59833981016040819052620000349162000118565b6001600160a01b0381166080526200004b62000056565b504660a0526200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a051613ddb6200017e60003960006124c40152600081816105fa01528181610be601526115400152613ddb6000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c8063955e669611610146578063c825fe68116100c3578063df5cf72311610087578063df5cf723146105f5578063ec76f4421461061c578063ef2dfa8d14610650578063f2fde38b14610663578063f698da2514610676578063fabc1cbc1461067e57600080fd5b8063c825fe681461055a578063cbdf0e4214610581578063d79aceab14610594578063da2ff05d146105bb578063dce974b9146105ce57600080fd5b8063aec205c51161010a578063aec205c5146104f9578063afe02ed514610501578063b2841d4814610514578063b5a768ca14610527578063c1a8e2c51461054757600080fd5b8063955e66961461049a5780639926ee7d146104ad578063a1060c88146104c0578063a364f4da146104d3578063a98fb355146104e657600080fd5b806349075da3116101d45780637357723b116101985780637357723b146104055780637673e93a1461042557806384d76f7b14610448578063886f1195146104765780638da5cb5b1461048957600080fd5b806349075da31461038f578063595c6a67146103ca5780635ac86ab7146103d25780635c975abb146103f5578063715018a6146103fd57600080fd5b80631e2199e21161021b5780631e2199e2146102d957806320606b70146102ec578063374823b5146103135780633fee332d14610351578063411d415b1461036457600080fd5b80631023aa351461025857806310d67a2f1461027e578063136439dd1461029357806316ae76cb146102a65780631794bb3c146102c6575b600080fd5b61026b61026636600461325d565b610691565b6040519081526020015b60405180910390f35b61029161028c366004613279565b6106bc565b005b6102916102a1366004613296565b610778565b6102b96102b43660046132af565b6108b7565b60405161027591906132e4565b6102916102d436600461334a565b6109fc565b6102916102e7366004613481565b610b26565b61026b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103416103213660046134fc565b609960209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610275565b61029161035f366004613528565b610e46565b6103776103723660046135b6565b611090565b6040516001600160a01b039091168152602001610275565b6103bd61039d3660046135e1565b609860209081526000928352604080842090915290825290205460ff1681565b6040516102759190613630565b6102916110c6565b6103416103e0366004613658565b606654600160ff9092169190911b9081161490565b60665461026b565b61029161118d565b61041861041336600461367b565b6111a1565b60405161027591906136af565b610341610433366004613279565b609a6020526000908152604090205460ff1681565b6103416104563660046136fc565b609b60209081526000928352604080842090915290825290205460ff1681565b606554610377906001600160a01b031681565b6033546001600160a01b0316610377565b61026b6104a8366004613731565b611297565b6102916104bb366004613797565b6112fc565b61026b6104ce3660046137e6565b6116ca565b6102916104e1366004613279565b611734565b6102916104f436600461382c565b611902565b610291611949565b61029161050f36600461389d565b611a11565b61026b610522366004613731565b611bde565b61053a6105353660046134fc565b611c1e565b60405161027591906138de565b610291610555366004613904565b611c58565b61026b7f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61026b61058f366004613279565b611c8d565b61026b7fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6103416105c9366004613958565b611cae565b61026b7f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b6103777f000000000000000000000000000000000000000000000000000000000000000081565b61029161062a366004613296565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b61029161065e366004613985565b611cda565b610291610671366004613279565b612083565b61026b6120f9565b61029161068c366004613296565b612108565b60006106b6609d60006106a385612264565b81526020019081526020016000206122c9565b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561070f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073391906139f0565b6001600160a01b0316336001600160a01b03161461076c5760405162461bcd60e51b815260040161076390613a0d565b60405180910390fd5b610775816122d3565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156107c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e49190613a57565b6108005760405162461bcd60e51b815260040161076390613a79565b606654818116146108795760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610763565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b0383166000908152609c602052604081206060919084906108de906122c9565b6108e89190613ad7565b9050808311156108f6578092505b826001600160401b0381111561090e5761090e613162565b60405190808252806020026020018201604052801561095357816020015b604080518082019091526000808252602082015281526020019060019003908161092c5790505b50915060005b838110156109f3576109c561098f6109718388613aee565b6001600160a01b0389166000908152609c60205260409020906123ca565b60408051808201909152600080825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b8382815181106109d7576109d7613b06565b6020026020010181905250806109ec90613b1c565b9050610959565b50509392505050565b600054610100900460ff1615808015610a1c5750600054600160ff909116105b80610a365750303b158015610a36575060005460ff166001145b610a995760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610763565b6000805460ff191660011790558015610abc576000805461ff0019166101001790555b610ac683836123d6565b610ace6124c0565b609755610ada84612589565b8015610b20576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60665460019060029081161415610b4f5760405162461bcd60e51b815260040161076390613b37565b4282604001511015610bc75760405162461bcd60e51b81526020600482015260476024820152600080516020613d6683398151915260448201527f70657261746f72536574733a206f70657261746f72207369676e617475726520606482015266195e1c1a5c995960ca1b608482015260a401610763565b6040516336b87bd760e11b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015610c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c519190613a57565b610cd05760405162461bcd60e51b81526020600482015260566024820152600080516020613d6683398151915260448201527f70657261746f72536574733a206f70657261746f72206e6f7420726567697374606482015275195c9959081d1bc8115a59d95b93185e595c881e595d60521b608482015260a401610763565b336000908152609a602052604090205460ff16610d575760405162461bcd60e51b815260206004820152604b6024820152600080516020613d6683398151915260448201527f70657261746f72536574733a20415653206973206e6f7420616e206f7065726160648201526a746f72207365742041565360a81b608482015260a401610763565b6001600160a01b038516600090815260996020908152604080832085830151845290915290205460ff1615610de25760405162461bcd60e51b815260206004820152603f6024820152600080516020613d6683398151915260448201527f70657261746f72536574733a2073616c7420616c7265616479207370656e74006064820152608401610763565b610e0285610dfb33878787602001518860400151611297565b84516125db565b6001600160a01b03851660009081526099602090815260408083208583015184529091529020805460ff19166001179055610e3f85338686612795565b5050505050565b60665460019060029081161415610e6f5760405162461bcd60e51b815260040161076390613b37565b815151610f0757336001600160a01b03871614610f025760405162461bcd60e51b815260206004820152604560248201527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a2063616c6c6572206d757374206265206f70656064820152643930ba37b960d91b608482015260a401610763565b61107c565b4282604001511015610f925760405162461bcd60e51b815260206004820152604860248201527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a206f70657261746f72207369676e617475726560648201526708195e1c1a5c995960c21b608482015260a401610763565b6001600160a01b038616600090815260996020908152604080832085830151845290915290205460ff1615611031576040805162461bcd60e51b81526020600482015260248101919091527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a2073616c7420616c7265616479207370656e746064820152608401610763565b61104a86610dfb87878787602001518860400151611bde565b6001600160a01b03861660009081526099602090815260408083208583015184529091529020805460ff191660011790555b611088858786866129f9565b505050505050565b60006110bf82609d60006110a387612264565b81526020019081526020016000206123ca90919063ffffffff16565b9392505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561110e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111329190613a57565b61114e5760405162461bcd60e51b815260040161076390613a79565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611195612b86565b61119f6000612589565b565b606060006111ae85612264565b6000818152609d602052604081209192509085906111cb906122c9565b6111d59190613ad7565b9050808411156111e3578093505b836001600160401b038111156111fb576111fb613162565b604051908082528060200260200182016040528015611224578160200160208202803683370190505b50925060005b8481101561128d5761125361123f8288613aee565b6000858152609d60205260409020906123ca565b84828151811061126557611265613b06565b6001600160a01b039092166020928302919091019091015261128681613b1c565b905061122a565b5050509392505050565b60006112f27f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92987878787876040516020016112d796959493929190613bb2565b60405160208183030381529060405280519060200120612be0565b9695505050505050565b606654600090600190811614156113255760405162461bcd60e51b815260040161076390613b37565b428260400151101561138d5760405162461bcd60e51b815260206004820152603e6024820152600080516020613d8683398151915260448201527f56533a206f70657261746f72207369676e6174757265206578706972656400006064820152608401610763565b336000908152609a602052604090205460ff16156114015760405162461bcd60e51b815260206004820152603e6024820152600080516020613d8683398151915260448201527f56533a2041565320697320616e206f70657261746f72207365742041565300006064820152608401610763565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561143b5761143b61361a565b141561149d5760405162461bcd60e51b815260206004820152603f6024820152600080516020613d8683398151915260448201527f56533a206f70657261746f7220616c72656164792072656769737465726564006064820152608401610763565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156115215760405162461bcd60e51b81526020600482015260366024820152600080516020613d868339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b6064820152608401610763565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab9190613a57565b6116215760405162461bcd60e51b815260206004820152604d6024820152600080516020613d8683398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a401610763565b61163983610dfb8533866020015187604001516116ca565b6001600160a01b038316600081815260996020908152604080832086830151845282528083208054600160ff19918216811790925533808652609885528386208787529094529382902080549094168117909355519092917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916116bd9190613630565b60405180910390a3505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a0810182905260009061172b9060c0016112d7565b95945050505050565b6066546000906001908116141561175d5760405162461bcd60e51b815260040161076390613b37565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff1660018111156117975761179761361a565b1461180a5760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f742072656769737465726564006064820152608401610763565b336000908152609a602052604090205460ff161561189b5760405162461bcd60e51b815260206004820152604260248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a2041565320697320616e206f70657261746f72207365742041606482015261565360f01b608482015260a401610763565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916118f69190613630565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713838360405161193d929190613bf2565b60405180910390a25050565b336000908152609a602052604090205460ff16156119cf5760405162461bcd60e51b815260206004820152603e60248201527f4156534469726563746f72792e6265636f6d654f70657261746f72536574415660448201527f533a20616c726561647920616e206f70657261746f72207365742041565300006064820152608401610763565b336000818152609a6020526040808220805460ff19166001179055517f702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf9190a2565b60005b81811015611bd957336000908152609b6020526040812090848484818110611a3e57611a3e613b06565b9050602002016020810190611a539190613c21565b63ffffffff16815260208101919091526040016000205460ff1615611ae05760405162461bcd60e51b815260206004820152603b60248201527f4156534469726563746f72792e6372656174654f70657261746f725365743a2060448201527f6f70657261746f722073657420616c72656164792065786973747300000000006064820152608401610763565b336000908152609b60205260408120600191858585818110611b0457611b04613b06565b9050602002016020810190611b199190613c21565b63ffffffff1663ffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c6040518060400160405280336001600160a01b03168152602001858585818110611b9757611b97613b06565b9050602002016020810190611bac9190613c21565b63ffffffff169052604051611bc191906138de565b60405180910390a1611bd281613b1c565b9050611a14565b505050565b60006112f27f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49587878787876040516020016112d796959493929190613bb2565b60408051808201909152600080825260208201526001600160a01b0383166000908152609c602052604090206110bf9061098f90846123ca565b60665460019060029081161415611c815760405162461bcd60e51b815260040161076390613b37565b610b20338585856129f9565b6001600160a01b0381166000908152609c602052604081206106b6906122c9565b60006110bf611cbc83612264565b6001600160a01b0385166000908152609c6020526040902090612c27565b60665460019060029081161415611d035760405162461bcd60e51b815260040161076390613b37565b336000908152609a602052604090205460ff16611d9c5760405162461bcd60e51b815260206004820152604b60248201527f4156534469726563746f72792e6d6967726174654f70657261746f7273546f4f60448201527f70657261746f72536574733a20415653206973206e6f7420616e206f7065726160648201526a746f72207365742041565360a81b608482015260a401610763565b60005b8481101561108857600133600090815260986020526040812090888885818110611dcb57611dcb613b06565b9050602002016020810190611de09190613279565b6001600160a01b0316815260208101919091526040016000205460ff166001811115611e0e57611e0e61361a565b14611eba5760405162461bcd60e51b815260206004820152606a60248201527f4156534469726563746f72792e6d6967726174654f70657261746f7273546f4f60448201527f70657261746f72536574733a206f70657261746f7220616c7265616479206d6960648201527f677261746564206f72206e6f742061206c656761637920726567697374657265608482015269321037b832b930ba37b960b11b60a482015260c401610763565b611f0e868683818110611ecf57611ecf613b06565b9050602002016020810190611ee49190613279565b33868685818110611ef757611ef7613b06565b9050602002810190611f099190613c3c565b612795565b33600090815260986020526040812081888885818110611f3057611f30613b06565b9050602002016020810190611f459190613279565b6001600160a01b031681526020810191909152604001600020805460ff191660018381811115611f7757611f7761361a565b021790555033868683818110611f8f57611f8f613b06565b9050602002016020810190611fa49190613279565b6001600160a01b03167ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b416000604051611fdd9190613630565b60405180910390a333868683818110611ff857611ff8613b06565b905060200201602081019061200d9190613279565b6001600160a01b03167f54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a0186868581811061204957612049613b06565b905060200281019061205b9190613c3c565b604051612069929190613c85565b60405180910390a38061207b81613b1c565b915050611d9f565b61208b612b86565b6001600160a01b0381166120f05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610763565b61077581612589565b60006121036124c0565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217f91906139f0565b6001600160a01b0316336001600160a01b0316146121af5760405162461bcd60e51b815260040161076390613a0d565b60665419811960665419161461222d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610763565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016108ac565b60008160000151826020015163ffffffff166040516020016122b192919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b6040516020818303038152906040526106b690613ca1565b60006106b6825490565b6001600160a01b0381166123615760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610763565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60006110bf8383612c3f565b6065546001600160a01b03161580156123f757506001600160a01b03821615155b6124795760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610763565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26124bc826122d3565b5050565b60007f00000000000000000000000000000000000000000000000000000000000000004614156124f1575060975490565b50604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383163b156126f557604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061261b9086908690600401613cc8565b602060405180830381865afa158015612638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265c9190613d25565b6001600160e01b03191614611bd95760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610763565b826001600160a01b03166127098383612c69565b6001600160a01b031614611bd95760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610763565b60005b81811015610e3f5760006040518060400160405280866001600160a01b031681526020018585858181106127ce576127ce613b06565b90506020020160208101906127e39190613c21565b63ffffffff1690526001600160a01b0386166000908152609b6020526040812091925085858581811061281857612818613b06565b905060200201602081019061282d9190613c21565b63ffffffff16815260208101919091526040016000205460ff166128c45760405162461bcd60e51b815260206004820152604260248201527f4156534469726563746f72792e5f72656769737465724f70657261746f72546f60448201527f4f70657261746f72536574733a20696e76616c6964206f70657261746f722073606482015261195d60f21b608482015260a401610763565b60006128cf82612264565b6001600160a01b0388166000908152609c602052604090209091506128f49082612c8d565b61298c5760405162461bcd60e51b815260206004820152605960248201527f4156534469726563746f72792e5f72656769737465724f70657261746f72546f60448201527f4f70657261746f72536574733a206f70657261746f7220616c7265616479207260648201527f65676973746572656420746f206f70657261746f722073657400000000000000608482015260a401610763565b6000818152609d602052604090206129a49088612c99565b50866001600160a01b03167f43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e836040516129de91906138de565b60405180910390a25050806129f290613b1c565b9050612798565b60005b81811015610e3f5760006040518060400160405280876001600160a01b03168152602001858585818110612a3257612a32613b06565b9050602002016020810190612a479190613c21565b63ffffffff16905290506000612a5c82612264565b6001600160a01b0387166000908152609c60205260409020909150612a819082612cae565b612b195760405162461bcd60e51b815260206004820152605960248201527f4156534469726563746f72792e5f646572656769737465724f70657261746f7260448201527f46726f6d4f70657261746f725365743a206f70657261746f72206e6f7420726560648201527f676973746572656420666f72206f70657261746f722073657400000000000000608482015260a401610763565b6000818152609d60205260409020612b319087612cba565b50856001600160a01b03167fad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe83604051612b6b91906138de565b60405180910390a2505080612b7f90613b1c565b90506129fc565b6033546001600160a01b0316331461119f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6000612bea6124c0565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b600081815260018301602052604081205415156110bf565b6000826000018281548110612c5657612c56613b06565b9060005260206000200154905092915050565b6000806000612c788585612ccf565b91509150612c8581612d3f565b509392505050565b60006110bf8383612efa565b60006110bf836001600160a01b038416612efa565b60006110bf8383612f49565b60006110bf836001600160a01b038416612f49565b600080825160411415612d065760208301516040840151606085015160001a612cfa8782858561303c565b94509450505050612d38565b825160401415612d305760208301516040840151612d25868383613129565b935093505050612d38565b506000905060025b9250929050565b6000816004811115612d5357612d5361361a565b1415612d5c5750565b6001816004811115612d7057612d7061361a565b1415612dbe5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610763565b6002816004811115612dd257612dd261361a565b1415612e205760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610763565b6003816004811115612e3457612e3461361a565b1415612e8d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610763565b6004816004811115612ea157612ea161361a565b14156107755760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610763565b6000818152600183016020526040812054612f41575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106b6565b5060006106b6565b60008181526001830160205260408120548015613032576000612f6d600183613ad7565b8554909150600090612f8190600190613ad7565b9050818114612fe6576000866000018281548110612fa157612fa1613b06565b9060005260206000200154905080876000018481548110612fc457612fc4613b06565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ff757612ff7613d4f565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106b6565b60009150506106b6565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156130735750600090506003613120565b8460ff16601b1415801561308b57508460ff16601c14155b1561309c5750600090506004613120565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156130f0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661311957600060019250925050613120565b9150600090505b94509492505050565b6000806001600160ff1b0383168161314660ff86901c601b613aee565b90506131548782888561303c565b935093505050935093915050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561319a5761319a613162565b60405290565b604051601f8201601f191681016001600160401b03811182821017156131c8576131c8613162565b604052919050565b6001600160a01b038116811461077557600080fd5b803563ffffffff811681146131f957600080fd5b919050565b60006040828403121561321057600080fd5b604051604081018181106001600160401b038211171561323257613232613162565b6040529050808235613243816131d0565b8152613251602084016131e5565b60208201525092915050565b60006040828403121561326f57600080fd5b6110bf83836131fe565b60006020828403121561328b57600080fd5b81356110bf816131d0565b6000602082840312156132a857600080fd5b5035919050565b6000806000606084860312156132c457600080fd5b83356132cf816131d0565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b8281101561333d5761332d84835180516001600160a01b0316825260209081015163ffffffff16910152565b9284019290850190600101613301565b5091979650505050505050565b60008060006060848603121561335f57600080fd5b833561336a816131d0565b9250602084013561337a816131d0565b929592945050506040919091013590565b60008083601f84011261339d57600080fd5b5081356001600160401b038111156133b457600080fd5b6020830191508360208260051b8501011115612d3857600080fd5b6000606082840312156133e157600080fd5b6133e9613178565b905081356001600160401b038082111561340257600080fd5b818401915084601f83011261341657600080fd5b813560208282111561342a5761342a613162565b61343c601f8301601f191682016131a0565b9250818352868183860101111561345257600080fd5b818185018285013760008183850101528285528086013581860152505050506040820135604082015292915050565b6000806000806060858703121561349757600080fd5b84356134a2816131d0565b935060208501356001600160401b03808211156134be57600080fd5b6134ca8883890161338b565b909550935060408701359150808211156134e357600080fd5b506134f0878288016133cf565b91505092959194509250565b6000806040838503121561350f57600080fd5b823561351a816131d0565b946020939093013593505050565b60008060008060006080868803121561354057600080fd5b853561354b816131d0565b9450602086013561355b816131d0565b935060408601356001600160401b038082111561357757600080fd5b61358389838a0161338b565b9095509350606088013591508082111561359c57600080fd5b506135a9888289016133cf565b9150509295509295909350565b600080606083850312156135c957600080fd5b6135d384846131fe565b946040939093013593505050565b600080604083850312156135f457600080fd5b82356135ff816131d0565b9150602083013561360f816131d0565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061365257634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561366a57600080fd5b813560ff811681146110bf57600080fd5b60008060006080848603121561369057600080fd5b61369a85856131fe565b95604085013595506060909401359392505050565b6020808252825182820181905260009190848201906040850190845b818110156136f05783516001600160a01b0316835292840192918401916001016136cb565b50909695505050505050565b6000806040838503121561370f57600080fd5b823561371a816131d0565b9150613728602084016131e5565b90509250929050565b60008060008060006080868803121561374957600080fd5b8535613754816131d0565b945060208601356001600160401b0381111561376f57600080fd5b61377b8882890161338b565b9699909850959660408101359660609091013595509350505050565b600080604083850312156137aa57600080fd5b82356137b5816131d0565b915060208301356001600160401b038111156137d057600080fd5b6137dc858286016133cf565b9150509250929050565b600080600080608085870312156137fc57600080fd5b8435613807816131d0565b93506020850135613817816131d0565b93969395505050506040820135916060013590565b6000806020838503121561383f57600080fd5b82356001600160401b038082111561385657600080fd5b818501915085601f83011261386a57600080fd5b81358181111561387957600080fd5b86602082850101111561388b57600080fd5b60209290920196919550909350505050565b600080602083850312156138b057600080fd5b82356001600160401b038111156138c657600080fd5b6138d28582860161338b565b90969095509350505050565b81516001600160a01b0316815260208083015163ffffffff1690820152604081016106b6565b60008060006040848603121561391957600080fd5b8335613924816131d0565b925060208401356001600160401b0381111561393f57600080fd5b61394b8682870161338b565b9497909650939450505050565b6000806060838503121561396b57600080fd5b8235613976816131d0565b915061372884602085016131fe565b6000806000806040858703121561399b57600080fd5b84356001600160401b03808211156139b257600080fd5b6139be8883890161338b565b909650945060208701359150808211156139d757600080fd5b506139e48782880161338b565b95989497509550505050565b600060208284031215613a0257600080fd5b81516110bf816131d0565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613a6957600080fd5b815180151581146110bf57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015613ae957613ae9613ac1565b500390565b60008219821115613b0157613b01613ac1565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613b3057613b30613ac1565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b8183526000602080850194508260005b85811015613ba75763ffffffff613b94836131e5565b1687529582019590820190600101613b7e565b509495945050505050565b8681526001600160a01b038616602082015260a060408201819052600090613bdd9083018688613b6e565b60608301949094525060800152949350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060208284031215613c3357600080fd5b6110bf826131e5565b6000808335601e19843603018112613c5357600080fd5b8301803591506001600160401b03821115613c6d57600080fd5b6020019150600581901b3603821315612d3857600080fd5b602081526000613c99602083018486613b6e565b949350505050565b80516020808301519190811015613cc2576000198160200360031b1b821691505b50919050565b82815260006020604081840152835180604085015260005b81811015613cfc57858101830151858201606001528201613ce0565b81811115613d0e576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215613d3757600080fd5b81516001600160e01b0319811681146110bf57600080fd5b634e487b7160e01b600052603160045260246000fdfe4156534469726563746f72792e72656769737465724f70657261746f72546f4f4156534469726563746f72792e72656769737465724f70657261746f72546f41a264697066735822122005d3574a86f79ee534ef469f7b042b9e3750db3f062f6f79fd4302b9ad8baa7a64736f6c634300080c0033", } // AVSDirectoryABI is the input ABI used to generate the binding from. @@ -271,6 +277,68 @@ func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORAVSREGISTRATIONTYPEHASH( return _AVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) } +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCaller) OPERATORSETFORCEDEREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectorySession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) +} + +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) +} + +// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. +// +// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCaller) OPERATORSETREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "OPERATOR_SET_REGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. +// +// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectorySession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) +} + +// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. +// +// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) +} + // AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. // // Solidity: function avsOperatorStatus(address , address ) view returns(uint8) @@ -333,6 +401,68 @@ func (_AVSDirectory *AVSDirectoryCallerSession) CalculateOperatorAVSRegistration return _AVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectory.CallOpts, operator, avs, salt, expiry) } +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectorySession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +} + +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +} + +// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. +// +// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCaller) CalculateOperatorSetRegistrationDigestHash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "calculateOperatorSetRegistrationDigestHash", avs, operatorSetIds, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. +// +// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectorySession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectory.Contract.CalculateOperatorSetRegistrationDigestHash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +} + +// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. +// +// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCallerSession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectory.Contract.CalculateOperatorSetRegistrationDigestHash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +} + // Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // // Solidity: function delegation() view returns(address) @@ -395,6 +525,223 @@ func (_AVSDirectory *AVSDirectoryCallerSession) DomainSeparator() ([32]byte, err return _AVSDirectory.Contract.DomainSeparator(&_AVSDirectory.CallOpts) } +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_AVSDirectory *AVSDirectoryCaller) GetNumOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "getNumOperatorsInOperatorSet", operatorSet) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_AVSDirectory *AVSDirectorySession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + return _AVSDirectory.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectory.CallOpts, operatorSet) +} + +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_AVSDirectory *AVSDirectoryCallerSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + return _AVSDirectory.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectory.CallOpts, operatorSet) +} + +// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. +// +// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_AVSDirectory *AVSDirectoryCaller) GetOperatorSetsOfOperator(opts *bind.CallOpts, operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "getOperatorSetsOfOperator", operator, start, length) + + if err != nil { + return *new([]IAVSDirectoryOperatorSet), err + } + + out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) + + return out0, err + +} + +// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. +// +// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_AVSDirectory *AVSDirectorySession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + return _AVSDirectory.Contract.GetOperatorSetsOfOperator(&_AVSDirectory.CallOpts, operator, start, length) +} + +// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. +// +// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_AVSDirectory *AVSDirectoryCallerSession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + return _AVSDirectory.Contract.GetOperatorSetsOfOperator(&_AVSDirectory.CallOpts, operator, start, length) +} + +// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. +// +// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) +func (_AVSDirectory *AVSDirectoryCaller) GetOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "getOperatorsInOperatorSet", operatorSet, start, length) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. +// +// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) +func (_AVSDirectory *AVSDirectorySession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { + return _AVSDirectory.Contract.GetOperatorsInOperatorSet(&_AVSDirectory.CallOpts, operatorSet, start, length) +} + +// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. +// +// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) +func (_AVSDirectory *AVSDirectoryCallerSession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { + return _AVSDirectory.Contract.GetOperatorsInOperatorSet(&_AVSDirectory.CallOpts, operatorSet, start, length) +} + +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectory *AVSDirectoryCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "inTotalOperatorSets", operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectory *AVSDirectorySession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _AVSDirectory.Contract.InTotalOperatorSets(&_AVSDirectory.CallOpts, operator) +} + +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectory *AVSDirectoryCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _AVSDirectory.Contract.InTotalOperatorSets(&_AVSDirectory.CallOpts, operator) +} + +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. +// +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) IsMember(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "isMember", operator, operatorSet) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. +// +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, operator, operatorSet) +} + +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. +// +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, operator, operatorSet) +} + +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. +// +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) IsOperatorSet(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (bool, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "isOperatorSet", arg0, arg1) + + 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 0x84d76f7b. +// +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { + return _AVSDirectory.Contract.IsOperatorSet(&_AVSDirectory.CallOpts, arg0, arg1) +} + +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. +// +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { + return _AVSDirectory.Contract.IsOperatorSet(&_AVSDirectory.CallOpts, arg0, arg1) +} + +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) IsOperatorSetAVS(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "isOperatorSetAVS", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { + return _AVSDirectory.Contract.IsOperatorSetAVS(&_AVSDirectory.CallOpts, arg0) +} + +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { + return _AVSDirectory.Contract.IsOperatorSetAVS(&_AVSDirectory.CallOpts, arg0) +} + // OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // // Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) @@ -426,6 +773,68 @@ func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSaltIsSpent(arg0 common. return _AVSDirectory.Contract.OperatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) } +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectory *AVSDirectoryCaller) OperatorSetMemberAtIndex(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "operatorSetMemberAtIndex", operatorSet, index) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectory *AVSDirectorySession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + return _AVSDirectory.Contract.OperatorSetMemberAtIndex(&_AVSDirectory.CallOpts, operatorSet, index) +} + +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + return _AVSDirectory.Contract.OperatorSetMemberAtIndex(&_AVSDirectory.CallOpts, operatorSet, index) +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectory *AVSDirectoryCaller) OperatorSetsMemberOfAtIndex(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "operatorSetsMemberOfAtIndex", operator, index) + + if err != nil { + return *new(IAVSDirectoryOperatorSet), err + } + + out0 := *abi.ConvertType(out[0], new(IAVSDirectoryOperatorSet)).(*IAVSDirectoryOperatorSet) + + return out0, err + +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectory *AVSDirectorySession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _AVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectory.CallOpts, operator, index) +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _AVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectory.CallOpts, operator, index) +} + // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // // Solidity: function owner() view returns(address) @@ -550,6 +959,27 @@ func (_AVSDirectory *AVSDirectoryCallerSession) PauserRegistry() (common.Address return _AVSDirectory.Contract.PauserRegistry(&_AVSDirectory.CallOpts) } +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectory *AVSDirectoryTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "becomeOperatorSetAVS") +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectory *AVSDirectorySession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _AVSDirectory.Contract.BecomeOperatorSetAVS(&_AVSDirectory.TransactOpts) +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _AVSDirectory.Contract.BecomeOperatorSetAVS(&_AVSDirectory.TransactOpts) +} + // CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. // // Solidity: function cancelSalt(bytes32 salt) returns() @@ -571,11 +1001,32 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) CancelSalt(salt [32]byte) (* return _AVSDirectory.Contract.CancelSalt(&_AVSDirectory.TransactOpts, salt) } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectory *AVSDirectoryTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "createOperatorSets", operatorSetIds) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectorySession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.CreateOperatorSets(&_AVSDirectory.TransactOpts, operatorSetIds) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.CreateOperatorSets(&_AVSDirectory.TransactOpts, operatorSetIds) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectory *AVSDirectoryTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "deregisterOperatorFromAVS", operator) } // DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. @@ -592,6 +1043,48 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) DeregisterOperatorFromAVS(op return _AVSDirectory.Contract.DeregisterOperatorFromAVS(&_AVSDirectory.TransactOpts, operator) } +// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. +// +// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactor) DeregisterOperatorFromOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "deregisterOperatorFromOperatorSets", operator, operatorSetIds) +} + +// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. +// +// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectorySession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectory.TransactOpts, operator, operatorSetIds) +} + +// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. +// +// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectory.TransactOpts, operator, operatorSetIds) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectorySession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) +} + // Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. // // Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() @@ -613,6 +1106,27 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) Initialize(initialOwner comm return _AVSDirectory.Contract.Initialize(&_AVSDirectory.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) } +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectorySession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectory.TransactOpts, operators, operatorSetIds) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectory.TransactOpts, operators, operatorSetIds) +} + // Pause is a paid mutator transaction binding the contract method 0x136439dd. // // Solidity: function pause(uint256 newPausedStatus) returns() @@ -676,6 +1190,27 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) RegisterOperatorToAVS(operat return _AVSDirectory.Contract.RegisterOperatorToAVS(&_AVSDirectory.TransactOpts, operator, operatorSignature) } +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, operatorSignature) +} + +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectorySession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.RegisterOperatorToOperatorSets(&_AVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) +} + +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.RegisterOperatorToOperatorSets(&_AVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) +} + // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // // Solidity: function renounceOwnership() returns() @@ -926,6 +1461,150 @@ func (_AVSDirectory *AVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log types. return event, nil } +// AVSDirectoryAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the AVSDirectory contract. +type AVSDirectoryAVSMigratedToOperatorSetsIterator struct { + Event *AVSDirectoryAVSMigratedToOperatorSets // 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 *AVSDirectoryAVSMigratedToOperatorSetsIterator) 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(AVSDirectoryAVSMigratedToOperatorSets) + 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(AVSDirectoryAVSMigratedToOperatorSets) + 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 *AVSDirectoryAVSMigratedToOperatorSetsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryAVSMigratedToOperatorSetsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the AVSDirectory contract. +type AVSDirectoryAVSMigratedToOperatorSets struct { + Avs common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectory *AVSDirectoryFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryAVSMigratedToOperatorSetsIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) + if err != nil { + return nil, err + } + return &AVSDirectoryAVSMigratedToOperatorSetsIterator{contract: _AVSDirectory.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil +} + +// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectory *AVSDirectoryFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", 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(AVSDirectoryAVSMigratedToOperatorSets) + if err := _AVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", 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 +} + +// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectory *AVSDirectoryFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*AVSDirectoryAVSMigratedToOperatorSets, error) { + event := new(AVSDirectoryAVSMigratedToOperatorSets) + if err := _AVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // AVSDirectoryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AVSDirectory contract. type AVSDirectoryInitializedIterator struct { Event *AVSDirectoryInitialized // Event containing the contract specifics and raw log @@ -1214,6 +1893,584 @@ func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpd return event, nil } +// AVSDirectoryOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the AVSDirectory contract. +type AVSDirectoryOperatorAddedToOperatorSetIterator struct { + Event *AVSDirectoryOperatorAddedToOperatorSet // 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 *AVSDirectoryOperatorAddedToOperatorSetIterator) 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(AVSDirectoryOperatorAddedToOperatorSet) + 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(AVSDirectoryOperatorAddedToOperatorSet) + 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 *AVSDirectoryOperatorAddedToOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryOperatorAddedToOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the AVSDirectory contract. +type AVSDirectoryOperatorAddedToOperatorSet struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + 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 (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryOperatorAddedToOperatorSetIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + if err != nil { + return nil, err + } + return &AVSDirectoryOperatorAddedToOperatorSetIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AVSDirectory.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(AVSDirectoryOperatorAddedToOperatorSet) + if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*AVSDirectoryOperatorAddedToOperatorSet, error) { + event := new(AVSDirectoryOperatorAddedToOperatorSet) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the AVSDirectory contract. +type AVSDirectoryOperatorMigratedToOperatorSetsIterator struct { + Event *AVSDirectoryOperatorMigratedToOperatorSets // 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 *AVSDirectoryOperatorMigratedToOperatorSetsIterator) 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(AVSDirectoryOperatorMigratedToOperatorSets) + 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(AVSDirectoryOperatorMigratedToOperatorSets) + 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 *AVSDirectoryOperatorMigratedToOperatorSetsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryOperatorMigratedToOperatorSetsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the AVSDirectory contract. +type AVSDirectoryOperatorMigratedToOperatorSets struct { + Operator common.Address + Avs common.Address + OperatorSetIds []uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryOperatorMigratedToOperatorSetsIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) + if err != nil { + return nil, err + } + return &AVSDirectoryOperatorMigratedToOperatorSetsIterator{contract: _AVSDirectory.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil +} + +// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, 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(AVSDirectoryOperatorMigratedToOperatorSets) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", 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 +} + +// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*AVSDirectoryOperatorMigratedToOperatorSets, error) { + event := new(AVSDirectoryOperatorMigratedToOperatorSets) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the AVSDirectory contract. +type AVSDirectoryOperatorRemovedFromOperatorSetIterator struct { + Event *AVSDirectoryOperatorRemovedFromOperatorSet // 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 *AVSDirectoryOperatorRemovedFromOperatorSetIterator) 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(AVSDirectoryOperatorRemovedFromOperatorSet) + 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(AVSDirectoryOperatorRemovedFromOperatorSet) + 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 *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the AVSDirectory contract. +type AVSDirectoryOperatorRemovedFromOperatorSet struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + 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 (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + if err != nil { + return nil, err + } + return &AVSDirectoryOperatorRemovedFromOperatorSetIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AVSDirectory.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(AVSDirectoryOperatorRemovedFromOperatorSet) + if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*AVSDirectoryOperatorRemovedFromOperatorSet, error) { + event := new(AVSDirectoryOperatorRemovedFromOperatorSet) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the AVSDirectory contract. +type AVSDirectoryOperatorSetCreatedIterator struct { + Event *AVSDirectoryOperatorSetCreated // 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 *AVSDirectoryOperatorSetCreatedIterator) 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(AVSDirectoryOperatorSetCreated) + 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(AVSDirectoryOperatorSetCreated) + 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 *AVSDirectoryOperatorSetCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryOperatorSetCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryOperatorSetCreated represents a OperatorSetCreated event raised by the AVSDirectory contract. +type AVSDirectoryOperatorSetCreated struct { + OperatorSet IAVSDirectoryOperatorSet + 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 (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*AVSDirectoryOperatorSetCreatedIterator, error) { + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorSetCreated") + if err != nil { + return nil, err + } + return &AVSDirectoryOperatorSetCreatedIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorSetCreated) (event.Subscription, error) { + + logs, sub, err := _AVSDirectory.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(AVSDirectoryOperatorSetCreated) + if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorSetCreated(log types.Log) (*AVSDirectoryOperatorSetCreated, error) { + event := new(AVSDirectoryOperatorSetCreated) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // AVSDirectoryOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the AVSDirectory contract. type AVSDirectoryOwnershipTransferredIterator struct { Event *AVSDirectoryOwnershipTransferred // Event containing the contract specifics and raw log diff --git a/pkg/bindings/AVSDirectoryStorage/binding.go b/pkg/bindings/AVSDirectoryStorage/binding.go index 795a84873..b7fc38aa6 100644 --- a/pkg/bindings/AVSDirectoryStorage/binding.go +++ b/pkg/bindings/AVSDirectoryStorage/binding.go @@ -29,6 +29,12 @@ var ( _ = abi.ConvertType ) +// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryOperatorSet struct { + Avs common.Address + OperatorSetId uint32 +} + // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -38,7 +44,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryStorageMetaData contains all meta data concerning the AVSDirectoryStorage contract. var AVSDirectoryStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.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\":\"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\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"structISignatureUtils.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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"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\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getNumOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetsOfOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetMemberAtIndex\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOfAtIndex\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false}]", } // AVSDirectoryStorageABI is the input ABI used to generate the binding from. @@ -249,6 +255,68 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORAVSREGISTR return _AVSDirectoryStorage.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) } +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OPERATORSETFORCEDEREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) +} + +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) +} + +// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. +// +// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OPERATORSETREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "OPERATOR_SET_REGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. +// +// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) +} + +// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. +// +// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) +} + // AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. // // Solidity: function avsOperatorStatus(address , address ) view returns(uint8) @@ -311,6 +379,68 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateOperatorA return _AVSDirectoryStorage.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectoryStorage.CallOpts, operator, avs, salt, expiry) } +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectoryStorage.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) +} + +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectoryStorage.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) +} + +// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. +// +// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) CalculateOperatorSetRegistrationDigestHash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "calculateOperatorSetRegistrationDigestHash", avs, operatorSetIds, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. +// +// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectoryStorage.Contract.CalculateOperatorSetRegistrationDigestHash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) +} + +// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. +// +// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectoryStorage.Contract.CalculateOperatorSetRegistrationDigestHash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) +} + // Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // // Solidity: function delegation() view returns(address) @@ -342,204 +472,1258 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) Delegation() (comm return _AVSDirectoryStorage.Contract.Delegation(&_AVSDirectoryStorage.CallOpts) } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. // -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { +// Solidity: function domainSeparator() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) + err := _AVSDirectoryStorage.contract.Call(opts, &out, "domainSeparator") if err != nil { - return *new(bool), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. // -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +// Solidity: function domainSeparator() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) DomainSeparator() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.DomainSeparator(&_AVSDirectoryStorage.CallOpts) } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. // -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +// Solidity: function domainSeparator() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) DomainSeparator() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.DomainSeparator(&_AVSDirectoryStorage.CallOpts) } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetNumOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getNumOperatorsInOperatorSet", operatorSet) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + return _AVSDirectoryStorage.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet) } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + return _AVSDirectoryStorage.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet) } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetOperatorSetsOfOperator(opts *bind.CallOpts, operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getOperatorSetsOfOperator", operator, start, length) + + if err != nil { + return *new([]IAVSDirectoryOperatorSet), err + } + + out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) + + return out0, err + } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) +// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + return _AVSDirectoryStorage.Contract.GetOperatorSetsOfOperator(&_AVSDirectoryStorage.CallOpts, operator, start, length) } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) +// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + return _AVSDirectoryStorage.Contract.GetOperatorSetsOfOperator(&_AVSDirectoryStorage.CallOpts, operator, start, length) } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. // -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) +// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getOperatorsInOperatorSet", operatorSet, start, length) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. // -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.UpdateAVSMetadataURI(&_AVSDirectoryStorage.TransactOpts, metadataURI) +// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { + return _AVSDirectoryStorage.Contract.GetOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet, start, length) } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. // -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.UpdateAVSMetadataURI(&_AVSDirectoryStorage.TransactOpts, metadataURI) +// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { + return _AVSDirectoryStorage.Contract.GetOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet, start, length) } -// AVSDirectoryStorageAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageAVSMetadataURIUpdatedIterator struct { - Event *AVSDirectoryStorageAVSMetadataURIUpdated // 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 -} +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "inTotalOperatorSets", operator) -// 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 *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false + if err != nil { + return *new(*big.Int), err } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(AVSDirectoryStorageAVSMetadataURIUpdated) - 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(AVSDirectoryStorageAVSMetadataURIUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} + return out0, err -// Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) Error() error { - return it.fail } -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _AVSDirectoryStorage.Contract.InTotalOperatorSets(&_AVSDirectoryStorage.CallOpts, operator) } -// AVSDirectoryStorageAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageAVSMetadataURIUpdated struct { - Avs common.Address - MetadataURI string - Raw types.Log // Blockchain specific contextual infos +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _AVSDirectoryStorage.Contract.InTotalOperatorSets(&_AVSDirectoryStorage.CallOpts, operator) } -// FilterAVSMetadataURIUpdated is a free log retrieval operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. // -// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryStorageAVSMetadataURIUpdatedIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsMember(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "isMember", operator, operatorSet) - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) if err != nil { - return nil, err + return *new(bool), err } - return &AVSDirectoryStorageAVSMetadataURIUpdatedIterator{contract: _AVSDirectoryStorage.contract, event: "AVSMetadataURIUpdated", logs: logs, sub: sub}, nil + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + } -// WatchAVSMetadataURIUpdated is a free log subscription operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. // -// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) +} - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. +// +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) +} + +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. +// +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsOperatorSet(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (bool, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "isOperatorSet", arg0, arg1) - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "AVSMetadataURIUpdated", avsRule) if err != nil { - return nil, err + 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 0x84d76f7b. +// +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { + return _AVSDirectoryStorage.Contract.IsOperatorSet(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. +// +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { + return _AVSDirectoryStorage.Contract.IsOperatorSet(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsOperatorSetAVS(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "isOperatorSetAVS", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { + return _AVSDirectoryStorage.Contract.IsOperatorSetAVS(&_AVSDirectoryStorage.CallOpts, arg0) +} + +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { + return _AVSDirectoryStorage.Contract.IsOperatorSetAVS(&_AVSDirectoryStorage.CallOpts, arg0) +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetMemberAtIndex(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetMemberAtIndex", operatorSet, index) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + return _AVSDirectoryStorage.Contract.OperatorSetMemberAtIndex(&_AVSDirectoryStorage.CallOpts, operatorSet, index) +} + +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + return _AVSDirectoryStorage.Contract.OperatorSetMemberAtIndex(&_AVSDirectoryStorage.CallOpts, operatorSet, index) +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetsMemberOfAtIndex(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetsMemberOfAtIndex", operator, index) + + if err != nil { + return *new(IAVSDirectoryOperatorSet), err + } + + out0 := *abi.ConvertType(out[0], new(IAVSDirectoryOperatorSet)).(*IAVSDirectoryOperatorSet) + + return out0, err + +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _AVSDirectoryStorage.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectoryStorage.CallOpts, operator, index) +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _AVSDirectoryStorage.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectoryStorage.CallOpts, operator, index) +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "becomeOperatorSetAVS") +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.BecomeOperatorSetAVS(&_AVSDirectoryStorage.TransactOpts) +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.BecomeOperatorSetAVS(&_AVSDirectoryStorage.TransactOpts) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) CancelSalt(opts *bind.TransactOpts, salt [32]byte) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "cancelSalt", salt) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.CancelSalt(&_AVSDirectoryStorage.TransactOpts, salt) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.CancelSalt(&_AVSDirectoryStorage.TransactOpts, salt) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "createOperatorSets", operatorSetIds) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.CreateOperatorSets(&_AVSDirectoryStorage.TransactOpts, operatorSetIds) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.CreateOperatorSets(&_AVSDirectoryStorage.TransactOpts, operatorSetIds) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) +} + +// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. +// +// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) DeregisterOperatorFromOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "deregisterOperatorFromOperatorSets", operator, operatorSetIds) +} + +// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. +// +// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds) +} + +// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. +// +// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, avs, operatorSetIds, operatorSignature) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, avs, operatorSetIds, operatorSignature) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operators, operatorSetIds) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operators, operatorSetIds) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) +} + +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, operatorSignature) +} + +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, operatorSignature) +} + +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, operatorSignature) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.UpdateAVSMetadataURI(&_AVSDirectoryStorage.TransactOpts, metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.UpdateAVSMetadataURI(&_AVSDirectoryStorage.TransactOpts, metadataURI) +} + +// AVSDirectoryStorageAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageAVSMetadataURIUpdatedIterator struct { + Event *AVSDirectoryStorageAVSMetadataURIUpdated // 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 *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) 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(AVSDirectoryStorageAVSMetadataURIUpdated) + 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(AVSDirectoryStorageAVSMetadataURIUpdated) + 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 *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageAVSMetadataURIUpdated 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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryStorageAVSMetadataURIUpdatedIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) + if err != nil { + return nil, err + } + return &AVSDirectoryStorageAVSMetadataURIUpdatedIterator{contract: _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.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(AVSDirectoryStorageAVSMetadataURIUpdated) + if err := _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*AVSDirectoryStorageAVSMetadataURIUpdated, error) { + event := new(AVSDirectoryStorageAVSMetadataURIUpdated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryStorageAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageAVSMigratedToOperatorSetsIterator struct { + Event *AVSDirectoryStorageAVSMigratedToOperatorSets // 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 *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) 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(AVSDirectoryStorageAVSMigratedToOperatorSets) + 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(AVSDirectoryStorageAVSMigratedToOperatorSets) + 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 *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageAVSMigratedToOperatorSets struct { + Avs common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryStorageAVSMigratedToOperatorSetsIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) + if err != nil { + return nil, err + } + return &AVSDirectoryStorageAVSMigratedToOperatorSetsIterator{contract: _AVSDirectoryStorage.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil +} + +// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", 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(AVSDirectoryStorageAVSMigratedToOperatorSets) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMigratedToOperatorSets", 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 +} + +// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*AVSDirectoryStorageAVSMigratedToOperatorSets, error) { + event := new(AVSDirectoryStorageAVSMigratedToOperatorSets) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator struct { + Event *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated // 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 *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) 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(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + 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(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + 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 *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated struct { + Operator common.Address + Avs common.Address + Status uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + if err != nil { + return nil, err + } + return &AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, 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(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", 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 +} + +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, error) { + event := new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryStorageOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorAddedToOperatorSetIterator struct { + Event *AVSDirectoryStorageOperatorAddedToOperatorSet // 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 *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) 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(AVSDirectoryStorageOperatorAddedToOperatorSet) + 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(AVSDirectoryStorageOperatorAddedToOperatorSet) + 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 *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorAddedToOperatorSet struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + 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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryStorageOperatorAddedToOperatorSetIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + if err != nil { + return nil, err + } + return &AVSDirectoryStorageOperatorAddedToOperatorSetIterator{contract: _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AVSDirectoryStorage.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(AVSDirectoryStorageOperatorAddedToOperatorSet) + if err := _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*AVSDirectoryStorageOperatorAddedToOperatorSet, error) { + event := new(AVSDirectoryStorageOperatorAddedToOperatorSet) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator struct { + Event *AVSDirectoryStorageOperatorMigratedToOperatorSets // 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 *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) 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(AVSDirectoryStorageOperatorMigratedToOperatorSets) + 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(AVSDirectoryStorageOperatorMigratedToOperatorSets) + 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 *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorMigratedToOperatorSets struct { + Operator common.Address + Avs common.Address + OperatorSetIds []uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) + if err != nil { + return nil, err + } + return &AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil +} + +// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) + if err != nil { + return nil, err } return event.NewSubscription(func(quit <-chan struct{}) error { defer sub.Unsubscribe() @@ -547,8 +1731,8 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchAVSMetadataURIUpda select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryStorageAVSMetadataURIUpdated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { + event := new(AVSDirectoryStorageOperatorMigratedToOperatorSets) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { return err } event.Raw = log @@ -569,21 +1753,21 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchAVSMetadataURIUpda }), nil } -// ParseAVSMetadataURIUpdated is a log parse operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. // -// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*AVSDirectoryStorageAVSMetadataURIUpdated, error) { - event := new(AVSDirectoryStorageAVSMetadataURIUpdated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*AVSDirectoryStorageOperatorMigratedToOperatorSets, error) { + event := new(AVSDirectoryStorageOperatorMigratedToOperatorSets) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { return nil, err } event.Raw = log return event, nil } -// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator struct { - Event *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated // Event containing the contract specifics and raw log +// AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator struct { + Event *AVSDirectoryStorageOperatorRemovedFromOperatorSet // 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 @@ -597,7 +1781,7 @@ type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator 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 *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Next() bool { +func (it *AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -606,7 +1790,7 @@ func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Next( if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + it.Event = new(AVSDirectoryStorageOperatorRemovedFromOperatorSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -621,7 +1805,7 @@ func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Next( // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + it.Event = new(AVSDirectoryStorageOperatorRemovedFromOperatorSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -637,61 +1821,186 @@ func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Next( } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Error() error { +func (it *AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Close() error { +func (it *AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated struct { - Operator common.Address - Avs common.Address - Status uint8 - Raw types.Log // Blockchain specific contextual infos +// AVSDirectoryStorageOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorRemovedFromOperatorSet struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator, error) { +// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator, error) { var operatorRule []interface{} for _, operatorItem := range operator { operatorRule = append(operatorRule, operatorItem) } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) if err != nil { return nil, err } - return &AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil + return &AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil } -// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { +// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { var operatorRule []interface{} for _, operatorItem := range operator { operatorRule = append(operatorRule, operatorItem) } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) + + logs, sub, err := _AVSDirectoryStorage.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(AVSDirectoryStorageOperatorRemovedFromOperatorSet) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { + return err + } + event.Raw = log - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + 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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*AVSDirectoryStorageOperatorRemovedFromOperatorSet, error) { + event := new(AVSDirectoryStorageOperatorRemovedFromOperatorSet) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryStorageOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorSetCreatedIterator struct { + Event *AVSDirectoryStorageOperatorSetCreated // 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 *AVSDirectoryStorageOperatorSetCreatedIterator) 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(AVSDirectoryStorageOperatorSetCreated) + 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(AVSDirectoryStorageOperatorSetCreated) + 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 *AVSDirectoryStorageOperatorSetCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageOperatorSetCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageOperatorSetCreated represents a OperatorSetCreated event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorSetCreated struct { + OperatorSet IAVSDirectoryOperatorSet + 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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*AVSDirectoryStorageOperatorSetCreatedIterator, error) { + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorSetCreated") + if err != nil { + return nil, err + } + return &AVSDirectoryStorageOperatorSetCreatedIterator{contract: _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorSetCreated) (event.Subscription, error) { + + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorSetCreated") if err != nil { return nil, err } @@ -701,8 +2010,8 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistr select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + event := new(AVSDirectoryStorageOperatorSetCreated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { return err } event.Raw = log @@ -723,12 +2032,12 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistr }), nil } -// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// ParseOperatorSetCreated is a log parse operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, error) { - event := new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { +// Solidity: event OperatorSetCreated((address,uint32) operatorSet) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorSetCreated(log types.Log) (*AVSDirectoryStorageOperatorSetCreated, error) { + event := new(AVSDirectoryStorageOperatorSetCreated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { return nil, err } event.Raw = log diff --git a/pkg/bindings/DelayedWithdrawalRouter/binding.go b/pkg/bindings/DelayedWithdrawalRouter/binding.go new file mode 100644 index 000000000..31fb64ca0 --- /dev/null +++ b/pkg/bindings/DelayedWithdrawalRouter/binding.go @@ -0,0 +1,1969 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package DelayedWithdrawalRouter + +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 +) + +// IDelayedWithdrawalRouterDelayedWithdrawal is an auto generated low-level Go binding around an user-defined struct. +type IDelayedWithdrawalRouterDelayedWithdrawal struct { + Amount *big.Int + BlockCreated uint32 +} + +// IDelayedWithdrawalRouterUserDelayedWithdrawals is an auto generated low-level Go binding around an user-defined struct. +type IDelayedWithdrawalRouterUserDelayedWithdrawals struct { + DelayedWithdrawalsCompleted *big.Int + DelayedWithdrawals []IDelayedWithdrawalRouterDelayedWithdrawal +} + +// DelayedWithdrawalRouterMetaData contains all meta data concerning the DelayedWithdrawalRouter contract. +var DelayedWithdrawalRouterMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"canClaimDelayedWithdrawal\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDelayedWithdrawals\",\"inputs\":[{\"name\":\"maxNumberOfDelayedWithdrawalsToClaim\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimDelayedWithdrawals\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxNumberOfDelayedWithdrawalsToClaim\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createDelayedWithdrawal\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getClaimableUserDelayedWithdrawals\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIDelayedWithdrawalRouter.DelayedWithdrawal[]\",\"components\":[{\"name\":\"amount\",\"type\":\"uint224\",\"internalType\":\"uint224\"},{\"name\":\"blockCreated\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getUserDelayedWithdrawals\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIDelayedWithdrawalRouter.DelayedWithdrawal[]\",\"components\":[{\"name\":\"amount\",\"type\":\"uint224\",\"internalType\":\"uint224\"},{\"name\":\"blockCreated\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_withdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"userDelayedWithdrawalByIndex\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelayedWithdrawalRouter.DelayedWithdrawal\",\"components\":[{\"name\":\"amount\",\"type\":\"uint224\",\"internalType\":\"uint224\"},{\"name\":\"blockCreated\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"userWithdrawals\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelayedWithdrawalRouter.UserDelayedWithdrawals\",\"components\":[{\"name\":\"delayedWithdrawalsCompleted\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delayedWithdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelayedWithdrawalRouter.DelayedWithdrawal[]\",\"components\":[{\"name\":\"amount\",\"type\":\"uint224\",\"internalType\":\"uint224\"},{\"name\":\"blockCreated\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"userWithdrawalsLength\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DelayedWithdrawalCreated\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelayedWithdrawalsClaimed\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amountClaimed\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"delayedWithdrawalsCompleted\",\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"event\",\"name\":\"WithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162001f0e38038062001f0e8339810160408190526200003491620001a8565b6001600160a01b038116620000cb5760405162461bcd60e51b815260206004820152604c60248201527f44656c617965645769746864726177616c526f757465722e636f6e737472756360448201527f746f723a205f656967656e506f644d616e616765722063616e6e6f742062652060648201526b7a65726f206164647265737360a01b608482015260a4015b60405180910390fd5b6001600160a01b038116608052620000e2620000e9565b50620001da565b600054610100900460ff1615620001535760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000c2565b60005460ff9081161015620001a6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b600060208284031215620001bb57600080fd5b81516001600160a01b0381168114620001d357600080fd5b9392505050565b608051611d11620001fd600039600081816101fa0152610c000152611d116000f3fe60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f0000000000000000000000000000000000000000000000000000000000000000169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea264697066735822122000d7cf28f4403941c299573f87dac2e0ac298f40aace10d232ce8c2e9d0894a564736f6c634300080c0033", +} + +// DelayedWithdrawalRouterABI is the input ABI used to generate the binding from. +// Deprecated: Use DelayedWithdrawalRouterMetaData.ABI instead. +var DelayedWithdrawalRouterABI = DelayedWithdrawalRouterMetaData.ABI + +// DelayedWithdrawalRouterBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use DelayedWithdrawalRouterMetaData.Bin instead. +var DelayedWithdrawalRouterBin = DelayedWithdrawalRouterMetaData.Bin + +// DeployDelayedWithdrawalRouter deploys a new Ethereum contract, binding an instance of DelayedWithdrawalRouter to it. +func DeployDelayedWithdrawalRouter(auth *bind.TransactOpts, backend bind.ContractBackend, _eigenPodManager common.Address) (common.Address, *types.Transaction, *DelayedWithdrawalRouter, error) { + parsed, err := DelayedWithdrawalRouterMetaData.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(DelayedWithdrawalRouterBin), backend, _eigenPodManager) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &DelayedWithdrawalRouter{DelayedWithdrawalRouterCaller: DelayedWithdrawalRouterCaller{contract: contract}, DelayedWithdrawalRouterTransactor: DelayedWithdrawalRouterTransactor{contract: contract}, DelayedWithdrawalRouterFilterer: DelayedWithdrawalRouterFilterer{contract: contract}}, nil +} + +// DelayedWithdrawalRouter is an auto generated Go binding around an Ethereum contract. +type DelayedWithdrawalRouter struct { + DelayedWithdrawalRouterCaller // Read-only binding to the contract + DelayedWithdrawalRouterTransactor // Write-only binding to the contract + DelayedWithdrawalRouterFilterer // Log filterer for contract events +} + +// DelayedWithdrawalRouterCaller is an auto generated read-only Go binding around an Ethereum contract. +type DelayedWithdrawalRouterCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelayedWithdrawalRouterTransactor is an auto generated write-only Go binding around an Ethereum contract. +type DelayedWithdrawalRouterTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelayedWithdrawalRouterFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type DelayedWithdrawalRouterFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// DelayedWithdrawalRouterSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type DelayedWithdrawalRouterSession struct { + Contract *DelayedWithdrawalRouter // 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 +} + +// DelayedWithdrawalRouterCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type DelayedWithdrawalRouterCallerSession struct { + Contract *DelayedWithdrawalRouterCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// DelayedWithdrawalRouterTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type DelayedWithdrawalRouterTransactorSession struct { + Contract *DelayedWithdrawalRouterTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// DelayedWithdrawalRouterRaw is an auto generated low-level Go binding around an Ethereum contract. +type DelayedWithdrawalRouterRaw struct { + Contract *DelayedWithdrawalRouter // Generic contract binding to access the raw methods on +} + +// DelayedWithdrawalRouterCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type DelayedWithdrawalRouterCallerRaw struct { + Contract *DelayedWithdrawalRouterCaller // Generic read-only contract binding to access the raw methods on +} + +// DelayedWithdrawalRouterTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type DelayedWithdrawalRouterTransactorRaw struct { + Contract *DelayedWithdrawalRouterTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewDelayedWithdrawalRouter creates a new instance of DelayedWithdrawalRouter, bound to a specific deployed contract. +func NewDelayedWithdrawalRouter(address common.Address, backend bind.ContractBackend) (*DelayedWithdrawalRouter, error) { + contract, err := bindDelayedWithdrawalRouter(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouter{DelayedWithdrawalRouterCaller: DelayedWithdrawalRouterCaller{contract: contract}, DelayedWithdrawalRouterTransactor: DelayedWithdrawalRouterTransactor{contract: contract}, DelayedWithdrawalRouterFilterer: DelayedWithdrawalRouterFilterer{contract: contract}}, nil +} + +// NewDelayedWithdrawalRouterCaller creates a new read-only instance of DelayedWithdrawalRouter, bound to a specific deployed contract. +func NewDelayedWithdrawalRouterCaller(address common.Address, caller bind.ContractCaller) (*DelayedWithdrawalRouterCaller, error) { + contract, err := bindDelayedWithdrawalRouter(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouterCaller{contract: contract}, nil +} + +// NewDelayedWithdrawalRouterTransactor creates a new write-only instance of DelayedWithdrawalRouter, bound to a specific deployed contract. +func NewDelayedWithdrawalRouterTransactor(address common.Address, transactor bind.ContractTransactor) (*DelayedWithdrawalRouterTransactor, error) { + contract, err := bindDelayedWithdrawalRouter(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouterTransactor{contract: contract}, nil +} + +// NewDelayedWithdrawalRouterFilterer creates a new log filterer instance of DelayedWithdrawalRouter, bound to a specific deployed contract. +func NewDelayedWithdrawalRouterFilterer(address common.Address, filterer bind.ContractFilterer) (*DelayedWithdrawalRouterFilterer, error) { + contract, err := bindDelayedWithdrawalRouter(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouterFilterer{contract: contract}, nil +} + +// bindDelayedWithdrawalRouter binds a generic wrapper to an already deployed contract. +func bindDelayedWithdrawalRouter(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := DelayedWithdrawalRouterMetaData.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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DelayedWithdrawalRouter.Contract.DelayedWithdrawalRouterCaller.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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.DelayedWithdrawalRouterTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.DelayedWithdrawalRouterTransactor.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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _DelayedWithdrawalRouter.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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.contract.Transact(opts, method, params...) +} + +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) MAXWITHDRAWALDELAYBLOCKS(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.contract.Call(opts, &out, "MAX_WITHDRAWAL_DELAY_BLOCKS") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { + return _DelayedWithdrawalRouter.Contract.MAXWITHDRAWALDELAYBLOCKS(&_DelayedWithdrawalRouter.CallOpts) +} + +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { + return _DelayedWithdrawalRouter.Contract.MAXWITHDRAWALDELAYBLOCKS(&_DelayedWithdrawalRouter.CallOpts) +} + +// CanClaimDelayedWithdrawal is a free data retrieval call binding the contract method 0x75608896. +// +// Solidity: function canClaimDelayedWithdrawal(address user, uint256 index) view returns(bool) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) CanClaimDelayedWithdrawal(opts *bind.CallOpts, user common.Address, index *big.Int) (bool, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.contract.Call(opts, &out, "canClaimDelayedWithdrawal", user, index) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// CanClaimDelayedWithdrawal is a free data retrieval call binding the contract method 0x75608896. +// +// Solidity: function canClaimDelayedWithdrawal(address user, uint256 index) view returns(bool) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) CanClaimDelayedWithdrawal(user common.Address, index *big.Int) (bool, error) { + return _DelayedWithdrawalRouter.Contract.CanClaimDelayedWithdrawal(&_DelayedWithdrawalRouter.CallOpts, user, index) +} + +// CanClaimDelayedWithdrawal is a free data retrieval call binding the contract method 0x75608896. +// +// Solidity: function canClaimDelayedWithdrawal(address user, uint256 index) view returns(bool) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) CanClaimDelayedWithdrawal(user common.Address, index *big.Int) (bool, error) { + return _DelayedWithdrawalRouter.Contract.CanClaimDelayedWithdrawal(&_DelayedWithdrawalRouter.CallOpts, user, index) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) EigenPodManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.contract.Call(opts, &out, "eigenPodManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) EigenPodManager() (common.Address, error) { + return _DelayedWithdrawalRouter.Contract.EigenPodManager(&_DelayedWithdrawalRouter.CallOpts) +} + +// EigenPodManager is a free data retrieval call binding the contract method 0x4665bcda. +// +// Solidity: function eigenPodManager() view returns(address) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) EigenPodManager() (common.Address, error) { + return _DelayedWithdrawalRouter.Contract.EigenPodManager(&_DelayedWithdrawalRouter.CallOpts) +} + +// GetClaimableUserDelayedWithdrawals is a free data retrieval call binding the contract method 0x1f39d87f. +// +// Solidity: function getClaimableUserDelayedWithdrawals(address user) view returns((uint224,uint32)[]) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) GetClaimableUserDelayedWithdrawals(opts *bind.CallOpts, user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.contract.Call(opts, &out, "getClaimableUserDelayedWithdrawals", user) + + if err != nil { + return *new([]IDelayedWithdrawalRouterDelayedWithdrawal), err + } + + out0 := *abi.ConvertType(out[0], new([]IDelayedWithdrawalRouterDelayedWithdrawal)).(*[]IDelayedWithdrawalRouterDelayedWithdrawal) + + return out0, err + +} + +// GetClaimableUserDelayedWithdrawals is a free data retrieval call binding the contract method 0x1f39d87f. +// +// Solidity: function getClaimableUserDelayedWithdrawals(address user) view returns((uint224,uint32)[]) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) GetClaimableUserDelayedWithdrawals(user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _DelayedWithdrawalRouter.Contract.GetClaimableUserDelayedWithdrawals(&_DelayedWithdrawalRouter.CallOpts, user) +} + +// GetClaimableUserDelayedWithdrawals is a free data retrieval call binding the contract method 0x1f39d87f. +// +// Solidity: function getClaimableUserDelayedWithdrawals(address user) view returns((uint224,uint32)[]) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) GetClaimableUserDelayedWithdrawals(user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _DelayedWithdrawalRouter.Contract.GetClaimableUserDelayedWithdrawals(&_DelayedWithdrawalRouter.CallOpts, user) +} + +// GetUserDelayedWithdrawals is a free data retrieval call binding the contract method 0x3e1de008. +// +// Solidity: function getUserDelayedWithdrawals(address user) view returns((uint224,uint32)[]) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) GetUserDelayedWithdrawals(opts *bind.CallOpts, user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.contract.Call(opts, &out, "getUserDelayedWithdrawals", user) + + if err != nil { + return *new([]IDelayedWithdrawalRouterDelayedWithdrawal), err + } + + out0 := *abi.ConvertType(out[0], new([]IDelayedWithdrawalRouterDelayedWithdrawal)).(*[]IDelayedWithdrawalRouterDelayedWithdrawal) + + return out0, err + +} + +// GetUserDelayedWithdrawals is a free data retrieval call binding the contract method 0x3e1de008. +// +// Solidity: function getUserDelayedWithdrawals(address user) view returns((uint224,uint32)[]) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) GetUserDelayedWithdrawals(user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _DelayedWithdrawalRouter.Contract.GetUserDelayedWithdrawals(&_DelayedWithdrawalRouter.CallOpts, user) +} + +// GetUserDelayedWithdrawals is a free data retrieval call binding the contract method 0x3e1de008. +// +// Solidity: function getUserDelayedWithdrawals(address user) view returns((uint224,uint32)[]) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) GetUserDelayedWithdrawals(user common.Address) ([]IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _DelayedWithdrawalRouter.Contract.GetUserDelayedWithdrawals(&_DelayedWithdrawalRouter.CallOpts, user) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) Owner() (common.Address, error) { + return _DelayedWithdrawalRouter.Contract.Owner(&_DelayedWithdrawalRouter.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) Owner() (common.Address, error) { + return _DelayedWithdrawalRouter.Contract.Owner(&_DelayedWithdrawalRouter.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) Paused(index uint8) (bool, error) { + return _DelayedWithdrawalRouter.Contract.Paused(&_DelayedWithdrawalRouter.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) Paused(index uint8) (bool, error) { + return _DelayedWithdrawalRouter.Contract.Paused(&_DelayedWithdrawalRouter.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) Paused0() (*big.Int, error) { + return _DelayedWithdrawalRouter.Contract.Paused0(&_DelayedWithdrawalRouter.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) Paused0() (*big.Int, error) { + return _DelayedWithdrawalRouter.Contract.Paused0(&_DelayedWithdrawalRouter.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.contract.Call(opts, &out, "pauserRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) PauserRegistry() (common.Address, error) { + return _DelayedWithdrawalRouter.Contract.PauserRegistry(&_DelayedWithdrawalRouter.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. +// +// Solidity: function pauserRegistry() view returns(address) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) PauserRegistry() (common.Address, error) { + return _DelayedWithdrawalRouter.Contract.PauserRegistry(&_DelayedWithdrawalRouter.CallOpts) +} + +// UserDelayedWithdrawalByIndex is a free data retrieval call binding the contract method 0x85594e58. +// +// Solidity: function userDelayedWithdrawalByIndex(address user, uint256 index) view returns((uint224,uint32)) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) UserDelayedWithdrawalByIndex(opts *bind.CallOpts, user common.Address, index *big.Int) (IDelayedWithdrawalRouterDelayedWithdrawal, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.contract.Call(opts, &out, "userDelayedWithdrawalByIndex", user, index) + + if err != nil { + return *new(IDelayedWithdrawalRouterDelayedWithdrawal), err + } + + out0 := *abi.ConvertType(out[0], new(IDelayedWithdrawalRouterDelayedWithdrawal)).(*IDelayedWithdrawalRouterDelayedWithdrawal) + + return out0, err + +} + +// UserDelayedWithdrawalByIndex is a free data retrieval call binding the contract method 0x85594e58. +// +// Solidity: function userDelayedWithdrawalByIndex(address user, uint256 index) view returns((uint224,uint32)) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) UserDelayedWithdrawalByIndex(user common.Address, index *big.Int) (IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _DelayedWithdrawalRouter.Contract.UserDelayedWithdrawalByIndex(&_DelayedWithdrawalRouter.CallOpts, user, index) +} + +// UserDelayedWithdrawalByIndex is a free data retrieval call binding the contract method 0x85594e58. +// +// Solidity: function userDelayedWithdrawalByIndex(address user, uint256 index) view returns((uint224,uint32)) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) UserDelayedWithdrawalByIndex(user common.Address, index *big.Int) (IDelayedWithdrawalRouterDelayedWithdrawal, error) { + return _DelayedWithdrawalRouter.Contract.UserDelayedWithdrawalByIndex(&_DelayedWithdrawalRouter.CallOpts, user, index) +} + +// UserWithdrawals is a free data retrieval call binding the contract method 0xecb7cb1b. +// +// Solidity: function userWithdrawals(address user) view returns((uint256,(uint224,uint32)[])) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) UserWithdrawals(opts *bind.CallOpts, user common.Address) (IDelayedWithdrawalRouterUserDelayedWithdrawals, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.contract.Call(opts, &out, "userWithdrawals", user) + + if err != nil { + return *new(IDelayedWithdrawalRouterUserDelayedWithdrawals), err + } + + out0 := *abi.ConvertType(out[0], new(IDelayedWithdrawalRouterUserDelayedWithdrawals)).(*IDelayedWithdrawalRouterUserDelayedWithdrawals) + + return out0, err + +} + +// UserWithdrawals is a free data retrieval call binding the contract method 0xecb7cb1b. +// +// Solidity: function userWithdrawals(address user) view returns((uint256,(uint224,uint32)[])) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) UserWithdrawals(user common.Address) (IDelayedWithdrawalRouterUserDelayedWithdrawals, error) { + return _DelayedWithdrawalRouter.Contract.UserWithdrawals(&_DelayedWithdrawalRouter.CallOpts, user) +} + +// UserWithdrawals is a free data retrieval call binding the contract method 0xecb7cb1b. +// +// Solidity: function userWithdrawals(address user) view returns((uint256,(uint224,uint32)[])) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) UserWithdrawals(user common.Address) (IDelayedWithdrawalRouterUserDelayedWithdrawals, error) { + return _DelayedWithdrawalRouter.Contract.UserWithdrawals(&_DelayedWithdrawalRouter.CallOpts, user) +} + +// UserWithdrawalsLength is a free data retrieval call binding the contract method 0xe4f4f887. +// +// Solidity: function userWithdrawalsLength(address user) view returns(uint256) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) UserWithdrawalsLength(opts *bind.CallOpts, user common.Address) (*big.Int, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.contract.Call(opts, &out, "userWithdrawalsLength", user) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UserWithdrawalsLength is a free data retrieval call binding the contract method 0xe4f4f887. +// +// Solidity: function userWithdrawalsLength(address user) view returns(uint256) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) UserWithdrawalsLength(user common.Address) (*big.Int, error) { + return _DelayedWithdrawalRouter.Contract.UserWithdrawalsLength(&_DelayedWithdrawalRouter.CallOpts, user) +} + +// UserWithdrawalsLength is a free data retrieval call binding the contract method 0xe4f4f887. +// +// Solidity: function userWithdrawalsLength(address user) view returns(uint256) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) UserWithdrawalsLength(user common.Address) (*big.Int, error) { + return _DelayedWithdrawalRouter.Contract.UserWithdrawalsLength(&_DelayedWithdrawalRouter.CallOpts, user) +} + +// WithdrawalDelayBlocks is a free data retrieval call binding the contract method 0x50f73e7c. +// +// Solidity: function withdrawalDelayBlocks() view returns(uint256) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCaller) WithdrawalDelayBlocks(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DelayedWithdrawalRouter.contract.Call(opts, &out, "withdrawalDelayBlocks") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// WithdrawalDelayBlocks is a free data retrieval call binding the contract method 0x50f73e7c. +// +// Solidity: function withdrawalDelayBlocks() view returns(uint256) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) WithdrawalDelayBlocks() (*big.Int, error) { + return _DelayedWithdrawalRouter.Contract.WithdrawalDelayBlocks(&_DelayedWithdrawalRouter.CallOpts) +} + +// WithdrawalDelayBlocks is a free data retrieval call binding the contract method 0x50f73e7c. +// +// Solidity: function withdrawalDelayBlocks() view returns(uint256) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterCallerSession) WithdrawalDelayBlocks() (*big.Int, error) { + return _DelayedWithdrawalRouter.Contract.WithdrawalDelayBlocks(&_DelayedWithdrawalRouter.CallOpts) +} + +// ClaimDelayedWithdrawals is a paid mutator transaction binding the contract method 0xd44e1b76. +// +// Solidity: function claimDelayedWithdrawals(uint256 maxNumberOfDelayedWithdrawalsToClaim) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactor) ClaimDelayedWithdrawals(opts *bind.TransactOpts, maxNumberOfDelayedWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.contract.Transact(opts, "claimDelayedWithdrawals", maxNumberOfDelayedWithdrawalsToClaim) +} + +// ClaimDelayedWithdrawals is a paid mutator transaction binding the contract method 0xd44e1b76. +// +// Solidity: function claimDelayedWithdrawals(uint256 maxNumberOfDelayedWithdrawalsToClaim) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) ClaimDelayedWithdrawals(maxNumberOfDelayedWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.ClaimDelayedWithdrawals(&_DelayedWithdrawalRouter.TransactOpts, maxNumberOfDelayedWithdrawalsToClaim) +} + +// ClaimDelayedWithdrawals is a paid mutator transaction binding the contract method 0xd44e1b76. +// +// Solidity: function claimDelayedWithdrawals(uint256 maxNumberOfDelayedWithdrawalsToClaim) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorSession) ClaimDelayedWithdrawals(maxNumberOfDelayedWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.ClaimDelayedWithdrawals(&_DelayedWithdrawalRouter.TransactOpts, maxNumberOfDelayedWithdrawalsToClaim) +} + +// ClaimDelayedWithdrawals0 is a paid mutator transaction binding the contract method 0xe5db06c0. +// +// Solidity: function claimDelayedWithdrawals(address recipient, uint256 maxNumberOfDelayedWithdrawalsToClaim) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactor) ClaimDelayedWithdrawals0(opts *bind.TransactOpts, recipient common.Address, maxNumberOfDelayedWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.contract.Transact(opts, "claimDelayedWithdrawals0", recipient, maxNumberOfDelayedWithdrawalsToClaim) +} + +// ClaimDelayedWithdrawals0 is a paid mutator transaction binding the contract method 0xe5db06c0. +// +// Solidity: function claimDelayedWithdrawals(address recipient, uint256 maxNumberOfDelayedWithdrawalsToClaim) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) ClaimDelayedWithdrawals0(recipient common.Address, maxNumberOfDelayedWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.ClaimDelayedWithdrawals0(&_DelayedWithdrawalRouter.TransactOpts, recipient, maxNumberOfDelayedWithdrawalsToClaim) +} + +// ClaimDelayedWithdrawals0 is a paid mutator transaction binding the contract method 0xe5db06c0. +// +// Solidity: function claimDelayedWithdrawals(address recipient, uint256 maxNumberOfDelayedWithdrawalsToClaim) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorSession) ClaimDelayedWithdrawals0(recipient common.Address, maxNumberOfDelayedWithdrawalsToClaim *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.ClaimDelayedWithdrawals0(&_DelayedWithdrawalRouter.TransactOpts, recipient, maxNumberOfDelayedWithdrawalsToClaim) +} + +// CreateDelayedWithdrawal is a paid mutator transaction binding the contract method 0xc0db354c. +// +// Solidity: function createDelayedWithdrawal(address podOwner, address recipient) payable returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactor) CreateDelayedWithdrawal(opts *bind.TransactOpts, podOwner common.Address, recipient common.Address) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.contract.Transact(opts, "createDelayedWithdrawal", podOwner, recipient) +} + +// CreateDelayedWithdrawal is a paid mutator transaction binding the contract method 0xc0db354c. +// +// Solidity: function createDelayedWithdrawal(address podOwner, address recipient) payable returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) CreateDelayedWithdrawal(podOwner common.Address, recipient common.Address) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.CreateDelayedWithdrawal(&_DelayedWithdrawalRouter.TransactOpts, podOwner, recipient) +} + +// CreateDelayedWithdrawal is a paid mutator transaction binding the contract method 0xc0db354c. +// +// Solidity: function createDelayedWithdrawal(address podOwner, address recipient) payable returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorSession) CreateDelayedWithdrawal(podOwner common.Address, recipient common.Address) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.CreateDelayedWithdrawal(&_DelayedWithdrawalRouter.TransactOpts, podOwner, recipient) +} + +// Initialize is a paid mutator transaction binding the contract method 0xeb990c59. +// +// Solidity: function initialize(address initOwner, address _pauserRegistry, uint256 initPausedStatus, uint256 _withdrawalDelayBlocks) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactor) Initialize(opts *bind.TransactOpts, initOwner common.Address, _pauserRegistry common.Address, initPausedStatus *big.Int, _withdrawalDelayBlocks *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.contract.Transact(opts, "initialize", initOwner, _pauserRegistry, initPausedStatus, _withdrawalDelayBlocks) +} + +// Initialize is a paid mutator transaction binding the contract method 0xeb990c59. +// +// Solidity: function initialize(address initOwner, address _pauserRegistry, uint256 initPausedStatus, uint256 _withdrawalDelayBlocks) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) Initialize(initOwner common.Address, _pauserRegistry common.Address, initPausedStatus *big.Int, _withdrawalDelayBlocks *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.Initialize(&_DelayedWithdrawalRouter.TransactOpts, initOwner, _pauserRegistry, initPausedStatus, _withdrawalDelayBlocks) +} + +// Initialize is a paid mutator transaction binding the contract method 0xeb990c59. +// +// Solidity: function initialize(address initOwner, address _pauserRegistry, uint256 initPausedStatus, uint256 _withdrawalDelayBlocks) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorSession) Initialize(initOwner common.Address, _pauserRegistry common.Address, initPausedStatus *big.Int, _withdrawalDelayBlocks *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.Initialize(&_DelayedWithdrawalRouter.TransactOpts, initOwner, _pauserRegistry, initPausedStatus, _withdrawalDelayBlocks) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.Pause(&_DelayedWithdrawalRouter.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.Pause(&_DelayedWithdrawalRouter.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) PauseAll() (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.PauseAll(&_DelayedWithdrawalRouter.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorSession) PauseAll() (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.PauseAll(&_DelayedWithdrawalRouter.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) RenounceOwnership() (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.RenounceOwnership(&_DelayedWithdrawalRouter.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.RenounceOwnership(&_DelayedWithdrawalRouter.TransactOpts) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.SetPauserRegistry(&_DelayedWithdrawalRouter.TransactOpts, newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.SetPauserRegistry(&_DelayedWithdrawalRouter.TransactOpts, newPauserRegistry) +} + +// SetWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x4d50f9a4. +// +// Solidity: function setWithdrawalDelayBlocks(uint256 newValue) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactor) SetWithdrawalDelayBlocks(opts *bind.TransactOpts, newValue *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.contract.Transact(opts, "setWithdrawalDelayBlocks", newValue) +} + +// SetWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x4d50f9a4. +// +// Solidity: function setWithdrawalDelayBlocks(uint256 newValue) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) SetWithdrawalDelayBlocks(newValue *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.SetWithdrawalDelayBlocks(&_DelayedWithdrawalRouter.TransactOpts, newValue) +} + +// SetWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x4d50f9a4. +// +// Solidity: function setWithdrawalDelayBlocks(uint256 newValue) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorSession) SetWithdrawalDelayBlocks(newValue *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.SetWithdrawalDelayBlocks(&_DelayedWithdrawalRouter.TransactOpts, newValue) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.TransferOwnership(&_DelayedWithdrawalRouter.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.TransferOwnership(&_DelayedWithdrawalRouter.TransactOpts, newOwner) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.Unpause(&_DelayedWithdrawalRouter.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _DelayedWithdrawalRouter.Contract.Unpause(&_DelayedWithdrawalRouter.TransactOpts, newPausedStatus) +} + +// DelayedWithdrawalRouterDelayedWithdrawalCreatedIterator is returned from FilterDelayedWithdrawalCreated and is used to iterate over the raw logs and unpacked data for DelayedWithdrawalCreated events raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterDelayedWithdrawalCreatedIterator struct { + Event *DelayedWithdrawalRouterDelayedWithdrawalCreated // 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 *DelayedWithdrawalRouterDelayedWithdrawalCreatedIterator) 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(DelayedWithdrawalRouterDelayedWithdrawalCreated) + 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(DelayedWithdrawalRouterDelayedWithdrawalCreated) + 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 *DelayedWithdrawalRouterDelayedWithdrawalCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedWithdrawalRouterDelayedWithdrawalCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedWithdrawalRouterDelayedWithdrawalCreated represents a DelayedWithdrawalCreated event raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterDelayedWithdrawalCreated struct { + PodOwner common.Address + Recipient common.Address + Amount *big.Int + Index *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDelayedWithdrawalCreated is a free log retrieval operation binding the contract event 0xb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f59. +// +// Solidity: event DelayedWithdrawalCreated(address podOwner, address recipient, uint256 amount, uint256 index) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) FilterDelayedWithdrawalCreated(opts *bind.FilterOpts) (*DelayedWithdrawalRouterDelayedWithdrawalCreatedIterator, error) { + + logs, sub, err := _DelayedWithdrawalRouter.contract.FilterLogs(opts, "DelayedWithdrawalCreated") + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouterDelayedWithdrawalCreatedIterator{contract: _DelayedWithdrawalRouter.contract, event: "DelayedWithdrawalCreated", logs: logs, sub: sub}, nil +} + +// WatchDelayedWithdrawalCreated is a free log subscription operation binding the contract event 0xb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f59. +// +// Solidity: event DelayedWithdrawalCreated(address podOwner, address recipient, uint256 amount, uint256 index) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) WatchDelayedWithdrawalCreated(opts *bind.WatchOpts, sink chan<- *DelayedWithdrawalRouterDelayedWithdrawalCreated) (event.Subscription, error) { + + logs, sub, err := _DelayedWithdrawalRouter.contract.WatchLogs(opts, "DelayedWithdrawalCreated") + 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(DelayedWithdrawalRouterDelayedWithdrawalCreated) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "DelayedWithdrawalCreated", 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 +} + +// ParseDelayedWithdrawalCreated is a log parse operation binding the contract event 0xb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f59. +// +// Solidity: event DelayedWithdrawalCreated(address podOwner, address recipient, uint256 amount, uint256 index) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) ParseDelayedWithdrawalCreated(log types.Log) (*DelayedWithdrawalRouterDelayedWithdrawalCreated, error) { + event := new(DelayedWithdrawalRouterDelayedWithdrawalCreated) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "DelayedWithdrawalCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator is returned from FilterDelayedWithdrawalsClaimed and is used to iterate over the raw logs and unpacked data for DelayedWithdrawalsClaimed events raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator struct { + Event *DelayedWithdrawalRouterDelayedWithdrawalsClaimed // 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 *DelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator) 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(DelayedWithdrawalRouterDelayedWithdrawalsClaimed) + 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(DelayedWithdrawalRouterDelayedWithdrawalsClaimed) + 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 *DelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedWithdrawalRouterDelayedWithdrawalsClaimed represents a DelayedWithdrawalsClaimed event raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterDelayedWithdrawalsClaimed struct { + Recipient common.Address + AmountClaimed *big.Int + DelayedWithdrawalsCompleted *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDelayedWithdrawalsClaimed is a free log retrieval operation binding the contract event 0x6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943. +// +// Solidity: event DelayedWithdrawalsClaimed(address recipient, uint256 amountClaimed, uint256 delayedWithdrawalsCompleted) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) FilterDelayedWithdrawalsClaimed(opts *bind.FilterOpts) (*DelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator, error) { + + logs, sub, err := _DelayedWithdrawalRouter.contract.FilterLogs(opts, "DelayedWithdrawalsClaimed") + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouterDelayedWithdrawalsClaimedIterator{contract: _DelayedWithdrawalRouter.contract, event: "DelayedWithdrawalsClaimed", logs: logs, sub: sub}, nil +} + +// WatchDelayedWithdrawalsClaimed is a free log subscription operation binding the contract event 0x6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943. +// +// Solidity: event DelayedWithdrawalsClaimed(address recipient, uint256 amountClaimed, uint256 delayedWithdrawalsCompleted) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) WatchDelayedWithdrawalsClaimed(opts *bind.WatchOpts, sink chan<- *DelayedWithdrawalRouterDelayedWithdrawalsClaimed) (event.Subscription, error) { + + logs, sub, err := _DelayedWithdrawalRouter.contract.WatchLogs(opts, "DelayedWithdrawalsClaimed") + 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(DelayedWithdrawalRouterDelayedWithdrawalsClaimed) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "DelayedWithdrawalsClaimed", 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 +} + +// ParseDelayedWithdrawalsClaimed is a log parse operation binding the contract event 0x6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943. +// +// Solidity: event DelayedWithdrawalsClaimed(address recipient, uint256 amountClaimed, uint256 delayedWithdrawalsCompleted) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) ParseDelayedWithdrawalsClaimed(log types.Log) (*DelayedWithdrawalRouterDelayedWithdrawalsClaimed, error) { + event := new(DelayedWithdrawalRouterDelayedWithdrawalsClaimed) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "DelayedWithdrawalsClaimed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelayedWithdrawalRouterInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterInitializedIterator struct { + Event *DelayedWithdrawalRouterInitialized // 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 *DelayedWithdrawalRouterInitializedIterator) 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(DelayedWithdrawalRouterInitialized) + 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(DelayedWithdrawalRouterInitialized) + 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 *DelayedWithdrawalRouterInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedWithdrawalRouterInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedWithdrawalRouterInitialized represents a Initialized event raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterInitialized 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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) FilterInitialized(opts *bind.FilterOpts) (*DelayedWithdrawalRouterInitializedIterator, error) { + + logs, sub, err := _DelayedWithdrawalRouter.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouterInitializedIterator{contract: _DelayedWithdrawalRouter.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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *DelayedWithdrawalRouterInitialized) (event.Subscription, error) { + + logs, sub, err := _DelayedWithdrawalRouter.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(DelayedWithdrawalRouterInitialized) + if err := _DelayedWithdrawalRouter.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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) ParseInitialized(log types.Log) (*DelayedWithdrawalRouterInitialized, error) { + event := new(DelayedWithdrawalRouterInitialized) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelayedWithdrawalRouterOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterOwnershipTransferredIterator struct { + Event *DelayedWithdrawalRouterOwnershipTransferred // 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 *DelayedWithdrawalRouterOwnershipTransferredIterator) 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(DelayedWithdrawalRouterOwnershipTransferred) + 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(DelayedWithdrawalRouterOwnershipTransferred) + 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 *DelayedWithdrawalRouterOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedWithdrawalRouterOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedWithdrawalRouterOwnershipTransferred represents a OwnershipTransferred event raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*DelayedWithdrawalRouterOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _DelayedWithdrawalRouter.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouterOwnershipTransferredIterator{contract: _DelayedWithdrawalRouter.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *DelayedWithdrawalRouterOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _DelayedWithdrawalRouter.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + 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(DelayedWithdrawalRouterOwnershipTransferred) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "OwnershipTransferred", 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 +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) ParseOwnershipTransferred(log types.Log) (*DelayedWithdrawalRouterOwnershipTransferred, error) { + event := new(DelayedWithdrawalRouterOwnershipTransferred) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelayedWithdrawalRouterPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterPausedIterator struct { + Event *DelayedWithdrawalRouterPaused // 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 *DelayedWithdrawalRouterPausedIterator) 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(DelayedWithdrawalRouterPaused) + 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(DelayedWithdrawalRouterPaused) + 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 *DelayedWithdrawalRouterPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedWithdrawalRouterPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedWithdrawalRouterPaused represents a Paused event raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterPaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*DelayedWithdrawalRouterPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _DelayedWithdrawalRouter.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouterPausedIterator{contract: _DelayedWithdrawalRouter.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *DelayedWithdrawalRouterPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _DelayedWithdrawalRouter.contract.WatchLogs(opts, "Paused", 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(DelayedWithdrawalRouterPaused) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "Paused", 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 +} + +// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) ParsePaused(log types.Log) (*DelayedWithdrawalRouterPaused, error) { + event := new(DelayedWithdrawalRouterPaused) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelayedWithdrawalRouterPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterPauserRegistrySetIterator struct { + Event *DelayedWithdrawalRouterPauserRegistrySet // 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 *DelayedWithdrawalRouterPauserRegistrySetIterator) 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(DelayedWithdrawalRouterPauserRegistrySet) + 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(DelayedWithdrawalRouterPauserRegistrySet) + 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 *DelayedWithdrawalRouterPauserRegistrySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedWithdrawalRouterPauserRegistrySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedWithdrawalRouterPauserRegistrySet represents a PauserRegistrySet event raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterPauserRegistrySet struct { + PauserRegistry common.Address + NewPauserRegistry common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPauserRegistrySet is a free log retrieval operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*DelayedWithdrawalRouterPauserRegistrySetIterator, error) { + + logs, sub, err := _DelayedWithdrawalRouter.contract.FilterLogs(opts, "PauserRegistrySet") + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouterPauserRegistrySetIterator{contract: _DelayedWithdrawalRouter.contract, event: "PauserRegistrySet", logs: logs, sub: sub}, nil +} + +// WatchPauserRegistrySet is a free log subscription operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *DelayedWithdrawalRouterPauserRegistrySet) (event.Subscription, error) { + + logs, sub, err := _DelayedWithdrawalRouter.contract.WatchLogs(opts, "PauserRegistrySet") + 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(DelayedWithdrawalRouterPauserRegistrySet) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "PauserRegistrySet", 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 +} + +// ParsePauserRegistrySet is a log parse operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6. +// +// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) ParsePauserRegistrySet(log types.Log) (*DelayedWithdrawalRouterPauserRegistrySet, error) { + event := new(DelayedWithdrawalRouterPauserRegistrySet) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelayedWithdrawalRouterUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterUnpausedIterator struct { + Event *DelayedWithdrawalRouterUnpaused // 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 *DelayedWithdrawalRouterUnpausedIterator) 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(DelayedWithdrawalRouterUnpaused) + 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(DelayedWithdrawalRouterUnpaused) + 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 *DelayedWithdrawalRouterUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedWithdrawalRouterUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedWithdrawalRouterUnpaused represents a Unpaused event raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterUnpaused 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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*DelayedWithdrawalRouterUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _DelayedWithdrawalRouter.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouterUnpausedIterator{contract: _DelayedWithdrawalRouter.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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *DelayedWithdrawalRouterUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _DelayedWithdrawalRouter.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(DelayedWithdrawalRouterUnpaused) + if err := _DelayedWithdrawalRouter.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 (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) ParseUnpaused(log types.Log) (*DelayedWithdrawalRouterUnpaused, error) { + event := new(DelayedWithdrawalRouterUnpaused) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// DelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator is returned from FilterWithdrawalDelayBlocksSet and is used to iterate over the raw logs and unpacked data for WithdrawalDelayBlocksSet events raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator struct { + Event *DelayedWithdrawalRouterWithdrawalDelayBlocksSet // 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 *DelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator) 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(DelayedWithdrawalRouterWithdrawalDelayBlocksSet) + 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(DelayedWithdrawalRouterWithdrawalDelayBlocksSet) + 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 *DelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelayedWithdrawalRouterWithdrawalDelayBlocksSet represents a WithdrawalDelayBlocksSet event raised by the DelayedWithdrawalRouter contract. +type DelayedWithdrawalRouterWithdrawalDelayBlocksSet struct { + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalDelayBlocksSet is a free log retrieval operation binding the contract event 0x4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e. +// +// Solidity: event WithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) FilterWithdrawalDelayBlocksSet(opts *bind.FilterOpts) (*DelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator, error) { + + logs, sub, err := _DelayedWithdrawalRouter.contract.FilterLogs(opts, "WithdrawalDelayBlocksSet") + if err != nil { + return nil, err + } + return &DelayedWithdrawalRouterWithdrawalDelayBlocksSetIterator{contract: _DelayedWithdrawalRouter.contract, event: "WithdrawalDelayBlocksSet", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalDelayBlocksSet is a free log subscription operation binding the contract event 0x4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e. +// +// Solidity: event WithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) WatchWithdrawalDelayBlocksSet(opts *bind.WatchOpts, sink chan<- *DelayedWithdrawalRouterWithdrawalDelayBlocksSet) (event.Subscription, error) { + + logs, sub, err := _DelayedWithdrawalRouter.contract.WatchLogs(opts, "WithdrawalDelayBlocksSet") + 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(DelayedWithdrawalRouterWithdrawalDelayBlocksSet) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "WithdrawalDelayBlocksSet", 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 +} + +// ParseWithdrawalDelayBlocksSet is a log parse operation binding the contract event 0x4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e. +// +// Solidity: event WithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue) +func (_DelayedWithdrawalRouter *DelayedWithdrawalRouterFilterer) ParseWithdrawalDelayBlocksSet(log types.Log) (*DelayedWithdrawalRouterWithdrawalDelayBlocksSet, error) { + event := new(DelayedWithdrawalRouterWithdrawalDelayBlocksSet) + if err := _DelayedWithdrawalRouter.contract.UnpackLog(event, "WithdrawalDelayBlocksSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/DelegationManager/binding.go b/pkg/bindings/DelegationManager/binding.go index 1e2bd72ed..27c91c8d8 100644 --- a/pkg/bindings/DelegationManager/binding.go +++ b/pkg/bindings/DelegationManager/binding.go @@ -62,8 +62,8 @@ type ISignatureUtilsSignatureWithExpiry 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\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotCurrentlyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureSaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksCannotDecrease\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotStaker\",\"inputs\":[]}]", - Bin: "0x61010060405234801561001157600080fd5b50604051614ca9380380614ca983398101604081905261003091610135565b6001600160a01b0380841660805280821660c052821660a05261005161005d565b50504660e05250610182565b600054610100900460ff16156100c95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013257600080fd5b50565b60008060006060848603121561014a57600080fd5b83516101558161011d565b60208501519093506101668161011d565b60408501519092506101778161011d565b809150509250925092565b60805160a05160c05160e051614a9361021660003960006120e50152600081816105b101528181610f0401528181611232015281816118fa01528181612312015281816131a401526135ba015260006107620152600081816104f901528181610ed2015281816112000152818161198e015281816123df015281816124b3015281816132ca01526136600152614a936000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a610355366004613a69565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a2366004613acf565b6109c8565b6103ba6103b5366004613a69565b610a8a565b6040516103649190613b2a565b6103da6103d5366004613bbb565b610d36565b005b6103da6103ea366004613c0e565b610e13565b6103da6103fd366004613c32565b610ec7565b6103da610410366004613c73565b610f7f565b6103da610423366004613c8c565b61106a565b61035a610436366004613c0e565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004613c32565b61107e565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004613cfb565b6110ac565b6103da6104bc366004613c32565b6111f5565b61035a6104cf366004613c0e565b609b6020526000908152604090205481565b6103da6104ef366004613da6565b6112a6565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b610541366004613c0e565b6001600160a01b039081166000908152609960205260409020600101541690565b610575610570366004613c0e565b6113da565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da6113fa565b61035a6105f33660046140bd565b6114c2565b6105756106063660046140f9565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da61063136600461412a565b6114f2565b6103da610644366004613c73565b61158c565b61051b610657366004613c0e565b609a602052600090815260409020546001600160a01b031681565b610575610680366004613c0e565b61159d565b6103da6115d4565b61035a61069b3660046141ba565b609860209081526000928352604080842090915290825290205481565b6103da6106c636600461429e565b6115e8565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd366004614332565b6116db565b60405161036491906143bd565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da6107383660046143d0565b6117ad565b61035a61074b366004613c0e565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004613c73565b609e6020526000908152604090205460ff1681565b6105756107b5366004614405565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec366004613c0e565b60a16020526000908152604090205481565b61086e61080c366004613c0e565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b2366004614431565b61181a565b61035a62034bc081565b6108d46108cf366004613c0e565b6118d3565b6040516103649291906144b4565b6103ba6108f0366004613c0e565b611c8a565b6103da6109033660046144d9565b611fe2565b6103da610916366004614532565b61203b565b6103da610929366004613c0e565b61206b565b61035a6120e1565b6103da610944366004613c73565b61211e565b609d54600090815b838110156109be57600060a160008787858181106109715761097161454e565b90506020020160208101906109869190613c0e565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b50600101610951565b5090505b92915050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a466120e1565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b606654606090600190600290811603610ab65760405163840a48d560e01b815260040160405180910390fd5b6000836001600160401b03811115610ad057610ad0613e59565b604051908082528060200260200182016040528015610af9578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610d2b57868682818110610b3457610b3461454e565b9050602002810190610b469190614564565b610b54906020810190614584565b9050878783818110610b6857610b6861454e565b9050602002810190610b7a9190614564565b610b849080614584565b905014610ba4576040516343714afd60e01b815260040160405180910390fd5b33878783818110610bb757610bb761454e565b9050602002810190610bc99190614564565b610bda906060810190604001613c0e565b6001600160a01b031614610c01576040516330c4716960e21b815260040160405180910390fd5b610d063383898985818110610c1857610c1861454e565b9050602002810190610c2a9190614564565b610c3b906060810190604001613c0e565b8a8a86818110610c4d57610c4d61454e565b9050602002810190610c5f9190614564565b610c699080614584565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610caf57610caf61454e565b9050602002810190610cc19190614564565b610ccf906020810190614584565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061222692505050565b838281518110610d1857610d1861454e565b6020908102919091010152600101610b1a565b509095945050505050565b610d3f336113da565b15610d5d57604051631a30c08d60e31b815260040160405180910390fd5b610d673384612660565b604080518082019091526060815260006020820152610d893380836000612752565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610dc291906145cd565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610e05929190614624565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a9190614653565b6001600160a01b0316336001600160a01b031614610ebb5760405163794821ff60e01b815260040160405180910390fd5b610ec48161293e565b50565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610f265750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610f4357604051635c427cd960e01b815260040160405180910390fd5b610f4c836113da565b15610f7a576001600160a01b038084166000908152609a602052604090205416610f78818585856129ce565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190614670565b61100857604051631d77d47760e21b815260040160405180910390fd5b6066548181161461102c5760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b611072612a49565b610f7884848484612aa3565b6001600160a01b0383166000908152609b60205260408120546110a38582868661181a565b95945050505050565b600054610100900460ff16158080156110cc5750600054600160ff909116105b806110e65750303b1580156110e6575060005460ff166001145b61114e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015611171576000805461ff0019166101001790555b61117b8888612bc4565b611183612c49565b60975561118f89612ce0565b61119886612d32565b6111a485858585612aa3565b80156111ea576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112545750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61127157604051635c427cd960e01b815260040160405180910390fd5b61127a836113da565b15610f7a576001600160a01b038084166000908152609a602052604090205416610f7881858585612d97565b6066546002906004908116036112cf5760405163840a48d560e01b815260040160405180910390fd5b600260c954036113215760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611145565b600260c95560005b888110156113c9576113c18a8a838181106113465761134661454e565b9050602002810190611358919061468d565b89898481811061136a5761136a61454e565b905060200281019061137c9190614584565b89898681811061138e5761138e61454e565b905060200201358888878181106113a7576113a761454e565b90506020020160208101906113bc91906146a3565b612e12565b600101611329565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190614670565b61148357604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016114d5919061473f565b604051602081830303815290604052805190602001209050919050565b60665460029060049081160361151b5760405163840a48d560e01b815260040160405180910390fd5b600260c9540361156d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611145565b600260c95561157f8686868686612e12565b5050600160c95550505050565b611594612a49565b610ec481612d32565b60006001600160a01b038216158015906109c25750506001600160a01b039081166000818152609a60205260409020549091161490565b6115dc612a49565b6115e66000612ce0565b565b428360200151101561160d57604051630819bdcd60e01b815260040160405180910390fd5b611616856113da565b1561163457604051631a30c08d60e31b815260040160405180910390fd5b61163d8461159d565b61165a576040516325878fa360e21b815260040160405180910390fd5b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611696878388886020015161181a565b6001600160a01b0388166000908152609b6020526040902060018401905585519091506116c6908890839061349b565b6116d287878686612752565b50505050505050565b6060600082516001600160401b038111156116f8576116f8613e59565b604051908082528060200260200182016040528015611721578160200160208202803683370190505b50905060005b83518110156109be576001600160a01b0385166000908152609860205260408120855190919086908490811061175f5761175f61454e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061179a5761179a61454e565b6020908102919091010152600101611727565b6117b63361159d565b6117d3576040516325878fa360e21b815260040160405180910390fd5b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090838360405161180e929190614624565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c09092019092528051910120600090816118906120e1565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119679190614752565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa1580156119d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119ff91908101906147c9565b9150915060008313611a1657909590945092505050565b6060808351600003611acf576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611a8a57611a8a61454e565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611abe57611abe61454e565b602002602001018181525050611c7d565b8351611adc9060016148a0565b6001600160401b03811115611af357611af3613e59565b604051908082528060200260200182016040528015611b1c578160200160208202803683370190505b50915081516001600160401b03811115611b3857611b38613e59565b604051908082528060200260200182016040528015611b61578160200160208202803683370190505b50905060005b8451811015611bfb57848181518110611b8257611b8261454e565b6020026020010151838281518110611b9c57611b9c61454e565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611bce57611bce61454e565b6020026020010151828281518110611be857611be861454e565b6020908102919091010152600101611b67565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611c2091906148b3565b81518110611c3057611c3061454e565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611c6091906148b3565b81518110611c7057611c7061454e565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811603611cb65760405163840a48d560e01b815260040160405180910390fd5b611cbf836113da565b611cdc57604051630b3d63f960e11b815260040160405180910390fd5b611ce58361159d565b15611d03576040516311ca333560e31b815260040160405180910390fd5b6001600160a01b038316611d2a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b038084166000818152609a602052604090205490911690331480611d5d5750336001600160a01b038216145b80611d8457506001600160a01b038181166000908152609960205260409020600101541633145b611da157604051635c427cd960e01b815260040160405180910390fd5b600080611dad866118d3565b9092509050336001600160a01b03871614611e0357826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040812080546001600160a01b031916905582519003611e87576040805160008152602081019091529450611fd9565b81516001600160401b03811115611ea057611ea0613e59565b604051908082528060200260200182016040528015611ec9578160200160208202803683370190505b50945060005b8251811015611fd757604080516001808252818301909252600091602080830190803683375050604080516001808252818301909252929350600092915060208083019080368337019050509050848381518110611f2f57611f2f61454e565b602002602001015182600081518110611f4a57611f4a61454e565b60200260200101906001600160a01b031690816001600160a01b031681525050838381518110611f7c57611f7c61454e565b602002602001015181600081518110611f9757611f9761454e565b602002602001018181525050611fb089878b8585612226565b888481518110611fc257611fc261454e565b60209081029190910101525050600101611ecf565b505b50505050919050565b611feb336113da565b1561200957604051631a30c08d60e31b815260040160405180910390fd5b6120128361159d565b61202f576040516325878fa360e21b815260040160405180910390fd5b610f7a33848484612752565b6120443361159d565b612061576040516325878fa360e21b815260040160405180910390fd5b610ec43382612660565b612073612a49565b6001600160a01b0381166120d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611145565b610ec481612ce0565b60007f00000000000000000000000000000000000000000000000000000000000000004603612111575060975490565b612119612c49565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121959190614653565b6001600160a01b0316336001600160a01b0316146121c65760405163794821ff60e01b815260040160405180910390fd5b6066541981196066541916146121ef5760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161105f565b60006001600160a01b03861661224f576040516339b190bb60e11b815260040160405180910390fd5b82516000036122715760405163796cc52560e01b815260040160405180910390fd5b60005b835181101561256e576001600160a01b038616156122ca576122ca86888684815181106122a3576122a361454e565b60200260200101518685815181106122bd576122bd61454e565b60200260200101516129ce565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106122fa576122fa61454e565b60200260200101516001600160a01b0316036123c2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb89888584815181106123525761235261454e565b60200260200101516040518363ffffffff1660e01b815260040161238b9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b1580156123a557600080fd5b505af11580156123b9573d6000803e3d6000fd5b50505050612566565b846001600160a01b0316876001600160a01b0316148061249457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d85838151811061241e5761241e61454e565b60200260200101516040518263ffffffff1660e01b815260040161245191906001600160a01b0391909116815260200190565b602060405180830381865afa15801561246e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124929190614670565b155b6124b1576040516330c4716960e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e5888684815181106124f3576124f361454e565b602002602001015186858151811061250d5761250d61454e565b60200260200101516040518463ffffffff1660e01b8152600401612533939291906148c6565b600060405180830381600087803b15801561254d57600080fd5b505af1158015612561573d6000803e3d6000fd5b505050505b600101612274565b506001600160a01b0386166000908152609f60205260408120805491829190612596836148ea565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff16815260200186815260200185815250905060006125fe826114c2565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f99061264c9083908590614903565b60405180910390a198975050505050505050565b6213c680612674606083016040840161491c565b63ffffffff16111561269957604051638b11ba2f60e01b815260040160405180910390fd5b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff16906126d5906060840190840161491c565b63ffffffff1610156126fa5760405163102b92a760e01b815260040160405180910390fd5b6001600160a01b0382166000908152609960205260409020819061271e8282614959565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac9061180e9084906145cd565b60665460009060019081160361277b5760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b038085166000908152609960205260409020600101541680158015906127b15750336001600160a01b03821614155b80156127c65750336001600160a01b03861614155b156128895742846020015110156127f057604051630819bdcd60e01b815260040160405180910390fd5b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff161561283557604051639a5afeb760e01b815260040160405180910390fd5b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516128769088908890859088906109c8565b90506128878282876000015161349b565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806128e8886118d3565b9150915060005b82518110156111ea57612936888a85848151811061290f5761290f61454e565b60200260200101518585815181106129295761292961454e565b6020026020010151612d97565b6001016128ef565b6001600160a01b038116612965576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290612a059084906148b3565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610e05939291906148c6565b6033546001600160a01b031633146115e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611145565b828114612ac3576040516343714afd60e01b815260040160405180910390fd5b8260005b81811015612bbc576000868683818110612ae357612ae361454e565b9050602002016020810190612af89190613c0e565b6001600160a01b038116600090815260a16020526040812054919250868685818110612b2657612b2661454e565b90506020020135905062034bc0811115612b5357604051639373e7cf60e01b815260040160405180910390fd5b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806001019050612ac7565b505050505050565b6065546001600160a01b0316158015612be557506001600160a01b03821615155b612c02576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2612c458261293e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc0811115612d5657604051639373e7cf60e01b815260040160405180910390fd5b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290612dce9084906148a0565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610e05939291906148c6565b6000612e206105f3876149bc565b6000818152609e602052604090205490915060ff16612e525760405163295a66e160e11b815260040160405180910390fd5b609d544390612e6760a0890160808a0161491c565b63ffffffff16612e7791906148a0565b1115612e96576040516378f67ae160e11b815260040160405180910390fd5b612ea66060870160408801613c0e565b6001600160a01b0316336001600160a01b031614612ed757604051635c427cd960e01b815260040160405180910390fd5b8115612f0b57612eea60a0870187614584565b85149050612f0b576040516343714afd60e01b815260040160405180910390fd5b6000818152609e60205260409020805460ff1916905581156130715760005b612f3760a0880188614584565b905081101561306b574360a16000612f5260a08b018b614584565b85818110612f6257612f6261454e565b9050602002016020810190612f779190613c0e565b6001600160a01b03168152602081019190915260400160002054612fa160a08a0160808b0161491c565b63ffffffff16612fb191906148a0565b1115612fd0576040516378f67ae160e11b815260040160405180910390fd5b613063612fe06020890189613c0e565b33612fee60a08b018b614584565b85818110612ffe57612ffe61454e565b90506020020160208101906130139190613c0e565b61302060c08c018c614584565b868181106130305761303061454e565b905060200201358a8a878181106130495761304961454e565b905060200201602081019061305e9190613c0e565b61357f565b600101612f2a565b50613460565b336000908152609a60205260408120546001600160a01b0316905b61309960a0890189614584565b905081101561345d574360a160006130b460a08c018c614584565b858181106130c4576130c461454e565b90506020020160208101906130d99190613c0e565b6001600160a01b0316815260208101919091526040016000205461310360a08b0160808c0161491c565b63ffffffff1661311391906148a0565b1115613132576040516378f67ae160e11b815260040160405180910390fd5b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061315460a08a018a614584565b838181106131645761316461454e565b90506020020160208101906131799190613c0e565b6001600160a01b0316036132c857600061319660208a018a613c0e565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c836131d760c08e018e614584565b878181106131e7576131e761454e565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af115801561323b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325f9190614752565b6001600160a01b038084166000908152609a60205260409020549192501680156132c0576132c0818461329560a08f018f614584565b888181106132a5576132a561454e565b90506020020160208101906132ba9190613c0e565b85612d97565b505050613455565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061330a5761330a61454e565b905060200201602081019061331f9190613c0e565b61332c60a08d018d614584565b8681811061333c5761333c61454e565b90506020020160208101906133519190613c0e565b61335e60c08e018e614584565b8781811061336e5761336e61454e565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156133ce57600080fd5b505af11580156133e2573d6000803e3d6000fd5b505050506001600160a01b0382161561345557613455823361340760a08c018c614584565b858181106134175761341761454e565b905060200201602081019061342c9190613c0e565b61343960c08d018d614584565b868181106134495761344961454e565b90506020020135612d97565b60010161308c565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b1561354457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906134db90869086906004016149c8565b602060405180830381865afa1580156134f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351c9190614a1d565b6001600160e01b03191614610f7a5760405163026aa43360e31b815260040160405180910390fd5b826001600160a01b031661355883836136bf565b6001600160a01b031614610f7a57604051636d20896160e11b815260040160405180910390fd5b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b0384160161362a5760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b1300906135f3908890889087906004016148c6565b600060405180830381600087803b15801561360d57600080fd5b505af1158015613621573d6000803e3d6000fd5b505050506136b8565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b1580156136a457600080fd5b505af11580156111ea573d6000803e3d6000fd5b5050505050565b60008060006136ce85856136db565b915091506109be81613749565b60008082516041036137115760208301516040840151606085015160001a613705878285856138ff565b94509450505050613742565b825160400361373a576020830151604084015161372f8683836139ec565b935093505050613742565b506000905060025b9250929050565b600081600481111561375d5761375d614a47565b036137655750565b600181600481111561377957613779614a47565b036137c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611145565b60028160048111156137da576137da614a47565b036138275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611145565b600381600481111561383b5761383b614a47565b036138935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611145565b60048160048111156138a7576138a7614a47565b03610ec45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401611145565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561393657506000905060036139e3565b8460ff16601b1415801561394e57508460ff16601c14155b1561395f57506000905060046139e3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156139b3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166139dc576000600192509250506139e3565b9150600090505b94509492505050565b6000806001600160ff1b03831681613a0960ff86901c601b6148a0565b9050613a17878288856138ff565b935093505050935093915050565b60008083601f840112613a3757600080fd5b5081356001600160401b03811115613a4e57600080fd5b6020830191508360208260051b850101111561374257600080fd5b60008060208385031215613a7c57600080fd5b82356001600160401b03811115613a9257600080fd5b613a9e85828601613a25565b90969095509350505050565b6001600160a01b0381168114610ec457600080fd5b8035613aca81613aaa565b919050565b600080600080600060a08688031215613ae757600080fd5b8535613af281613aaa565b94506020860135613b0281613aaa565b93506040860135613b1281613aaa565b94979396509394606081013594506080013592915050565b602080825282518282018190526000918401906040840190835b81811015610d2b578351835260209384019390920191600101613b44565b600060608284031215613b7457600080fd5b50919050565b60008083601f840112613b8c57600080fd5b5081356001600160401b03811115613ba357600080fd5b60208301915083602082850101111561374257600080fd5b600080600060808486031215613bd057600080fd5b613bda8585613b62565b925060608401356001600160401b03811115613bf557600080fd5b613c0186828701613b7a565b9497909650939450505050565b600060208284031215613c2057600080fd5b8135613c2b81613aaa565b9392505050565b600080600060608486031215613c4757600080fd5b8335613c5281613aaa565b92506020840135613c6281613aaa565b929592945050506040919091013590565b600060208284031215613c8557600080fd5b5035919050565b60008060008060408587031215613ca257600080fd5b84356001600160401b03811115613cb857600080fd5b613cc487828801613a25565b90955093505060208501356001600160401b03811115613ce357600080fd5b613cef87828801613a25565b95989497509550505050565b60008060008060008060008060c0898b031215613d1757600080fd5b8835613d2281613aaa565b97506020890135613d3281613aaa565b9650604089013595506060890135945060808901356001600160401b03811115613d5b57600080fd5b613d678b828c01613a25565b90955093505060a08901356001600160401b03811115613d8657600080fd5b613d928b828c01613a25565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215613dc257600080fd5b88356001600160401b03811115613dd857600080fd5b613de48b828c01613a25565b90995097505060208901356001600160401b03811115613e0357600080fd5b613e0f8b828c01613a25565b90975095505060408901356001600160401b03811115613e2e57600080fd5b613e3a8b828c01613a25565b90955093505060608901356001600160401b03811115613d8657600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715613e9157613e91613e59565b60405290565b604080519081016001600160401b0381118282101715613e9157613e91613e59565b604051601f8201601f191681016001600160401b0381118282101715613ee157613ee1613e59565b604052919050565b63ffffffff81168114610ec457600080fd5b8035613aca81613ee9565b60006001600160401b03821115613f1f57613f1f613e59565b5060051b60200190565b600082601f830112613f3a57600080fd5b8135613f4d613f4882613f06565b613eb9565b8082825260208201915060208360051b860101925085831115613f6f57600080fd5b602085015b83811015613f95578035613f8781613aaa565b835260209283019201613f74565b5095945050505050565b600082601f830112613fb057600080fd5b8135613fbe613f4882613f06565b8082825260208201915060208360051b860101925085831115613fe057600080fd5b602085015b83811015613f95578035835260209283019201613fe5565b600060e0828403121561400f57600080fd5b614017613e6f565b905061402282613abf565b815261403060208301613abf565b602082015261404160408301613abf565b60408201526060828101359082015261405c60808301613efb565b608082015260a08201356001600160401b0381111561407a57600080fd5b61408684828501613f29565b60a08301525060c08201356001600160401b038111156140a557600080fd5b6140b184828501613f9f565b60c08301525092915050565b6000602082840312156140cf57600080fd5b81356001600160401b038111156140e557600080fd5b6140f184828501613ffd565b949350505050565b60006020828403121561410b57600080fd5b813560ff81168114613c2b57600080fd5b8015158114610ec457600080fd5b60008060008060006080868803121561414257600080fd5b85356001600160401b0381111561415857600080fd5b860160e0818903121561416a57600080fd5b945060208601356001600160401b0381111561418557600080fd5b61419188828901613a25565b9095509350506040860135915060608601356141ac8161411c565b809150509295509295909350565b600080604083850312156141cd57600080fd5b82356141d881613aaa565b915060208301356141e881613aaa565b809150509250929050565b60006040828403121561420557600080fd5b61420d613e97565b905081356001600160401b0381111561422557600080fd5b8201601f8101841361423657600080fd5b80356001600160401b0381111561424f5761424f613e59565b614262601f8201601f1916602001613eb9565b81815285602083850101111561427757600080fd5b81602084016020830137600060209282018301528352928301359282019290925292915050565b600080600080600060a086880312156142b657600080fd5b85356142c181613aaa565b945060208601356142d181613aaa565b935060408601356001600160401b038111156142ec57600080fd5b6142f8888289016141f3565b93505060608601356001600160401b0381111561431457600080fd5b614320888289016141f3565b95989497509295608001359392505050565b6000806040838503121561434557600080fd5b823561435081613aaa565b915060208301356001600160401b0381111561436b57600080fd5b61437785828601613f29565b9150509250929050565b600081518084526020840193506020830160005b828110156143b3578151865260209586019590910190600101614395565b5093949350505050565b602081526000613c2b6020830184614381565b600080602083850312156143e357600080fd5b82356001600160401b038111156143f957600080fd5b613a9e85828601613b7a565b6000806040838503121561441857600080fd5b823561442381613aaa565b946020939093013593505050565b6000806000806080858703121561444757600080fd5b843561445281613aaa565b935060208501359250604085013561446981613aaa565b9396929550929360600135925050565b600081518084526020840193506020830160005b828110156143b35781516001600160a01b031686526020958601959091019060010161448d565b6040815260006144c76040830185614479565b82810360208401526110a38185614381565b6000806000606084860312156144ee57600080fd5b83356144f981613aaa565b925060208401356001600160401b0381111561451457600080fd5b614520868287016141f3565b93969395505050506040919091013590565b60006060828403121561454457600080fd5b613c2b8383613b62565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261457a57600080fd5b9190910192915050565b6000808335601e1984360301811261459b57600080fd5b8301803591506001600160401b038211156145b557600080fd5b6020019150600581901b360382131561374257600080fd5b6060810182356145dc81613aaa565b6001600160a01b0316825260208301356145f581613aaa565b6001600160a01b03166020830152604083013561461181613ee9565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561466557600080fd5b8151613c2b81613aaa565b60006020828403121561468257600080fd5b8151613c2b8161411c565b6000823560de1983360301811261457a57600080fd5b6000602082840312156146b557600080fd5b8135613c2b8161411c565b80516001600160a01b039081168352602080830151821690840152604080830151909116908301526060808201519083015260808082015160009161470c9085018263ffffffff169052565b5060a082015160e060a085015261472660e0850182614479565b905060c083015184820360c08601526110a38282614381565b602081526000613c2b60208301846146c0565b60006020828403121561476457600080fd5b5051919050565b600082601f83011261477c57600080fd5b815161478a613f4882613f06565b8082825260208201915060208360051b8601019250858311156147ac57600080fd5b602085015b83811015613f955780518352602092830192016147b1565b600080604083850312156147dc57600080fd5b82516001600160401b038111156147f257600080fd5b8301601f8101851361480357600080fd5b8051614811613f4882613f06565b8082825260208201915060208360051b85010192508783111561483357600080fd5b6020840193505b8284101561485e57835161484d81613aaa565b82526020938401939091019061483a565b8095505050505060208301516001600160401b0381111561487e57600080fd5b6143778582860161476b565b634e487b7160e01b600052601160045260246000fd5b808201808211156109c2576109c261488a565b818103818111156109c2576109c261488a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000600182016148fc576148fc61488a565b5060010190565b8281526040602082015260006140f160408301846146c0565b60006020828403121561492e57600080fd5b8135613c2b81613ee9565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561496481613aaa565b61496e8183614939565b5060018101602083013561498181613aaa565b61498b8183614939565b50604083013561499a81613ee9565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006109c23683613ffd565b828152604060208201526000825180604084015260005b818110156149fc57602081860181015160608684010152016149df565b506000606082850101526060601f19601f8301168401019150509392505050565b600060208284031215614a2f57600080fd5b81516001600160e01b031981168114613c2b57600080fd5b634e487b7160e01b600052602160045260246000fdfea264697066735822122060f42e0d820098db4247013bf6e62a8bf7ebcc0389ba32d5bc5de4169fb8f70264736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false}]", + Bin: "0x6101006040523480156200001257600080fd5b5060405162005c4638038062005c46833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051615a1d6200022960003960006126a00152600081816105b10152818161102e015281816113aa01528181611c23015281816129f901528181613eac0152614398015260006107620152600081816104f901528181610ffc0152818161137801528181611cb701528181612ac601528181612c4901528181613fd2015261443e0152615a1d6000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a61035536600461484e565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a23660046148b4565b6109ce565b6103ba6103b536600461484e565b610a90565b604051610364919061490f565b6103da6103d53660046149ac565b610df9565b005b6103da6103ea3660046149ff565b610f3e565b6103da6103fd366004614a23565b610ff1565b6103da610410366004614a64565b6110a8565b6103da610423366004614a7d565b6111e7565b61035a6104363660046149ff565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614a23565b6111fb565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614ae8565b611229565b6103da6104bc366004614a23565b61136d565b61035a6104cf3660046149ff565b609b6020526000908152604090205481565b6103da6104ef366004614b8f565b61141d565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b6105413660046149ff565b6001600160a01b039081166000908152609960205260409020600101541690565b6105756105703660046149ff565b61155a565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da61157a565b61035a6105f3366004614e8c565b611641565b610575610606366004614ec8565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614ef9565b611671565b6103da610644366004614a64565b61170c565b61051b6106573660046149ff565b609a602052600090815260409020546001600160a01b031681565b6105756106803660046149ff565b61171d565b6103da611757565b61035a61069b366004614f88565b609860209081526000928352604080842090915290825290205481565b6103da6106c6366004615069565b61176b565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd3660046150f9565b611997565b6040516103649190615183565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da610738366004615196565b611a71565b61035a61074b3660046149ff565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004614a64565b609e6020526000908152604090205460ff1681565b6105756107b53660046151cb565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec3660046149ff565b60a16020526000908152604090205481565b61086e61080c3660046149ff565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b23660046151f7565b611b43565b61035a62034bc081565b6108d46108cf3660046149ff565b611bfc565b604051610364929190615278565b6103ba6108f03660046149ff565b611fb4565b6103da61090336600461529d565b612478565b6103da6109163660046152f5565b612595565b6103da6109293660046149ff565b612626565b61035a61269c565b6103da610944366004614a64565b6126da565b609d54600090815b838110156109c657600060a1600087878581811061097157610971615311565b905060200201602081019061098691906149ff565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b506109bf8161533d565b9050610951565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a4c61269c565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ac55760405162461bcd60e51b8152600401610abc90615358565b60405180910390fd5b6000836001600160401b03811115610adf57610adf614c31565b604051908082528060200260200182016040528015610b08578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610dee57868682818110610b4357610b43615311565b9050602002810190610b55919061538f565b610b639060208101906153af565b9050878783818110610b7757610b77615311565b9050602002810190610b89919061538f565b610b9390806153af565b905014610c085760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610abc565b33878783818110610c1b57610c1b615311565b9050602002810190610c2d919061538f565b610c3e9060608101906040016149ff565b6001600160a01b031614610cba5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610abc565b610dbf3383898985818110610cd157610cd1615311565b9050602002810190610ce3919061538f565b610cf49060608101906040016149ff565b8a8a86818110610d0657610d06615311565b9050602002810190610d18919061538f565b610d2290806153af565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d6857610d68615311565b9050602002810190610d7a919061538f565b610d889060208101906153af565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061283692505050565b838281518110610dd157610dd1615311565b602090810291909101015280610de68161533d565b915050610b29565b509095945050505050565b610e023361155a565b15610e885760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610abc565b610e923384612df6565b604080518082019091526060815260006020820152610eb43380836000612fe9565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610eed91906153f8565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f3092919061544a565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615479565b6001600160a01b0316336001600160a01b031614610fe55760405162461bcd60e51b8152600401610abc90615496565b610fee8161327f565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110505750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61106c5760405162461bcd60e51b8152600401610abc906154e0565b6110758361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a181858585613376565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611114919061553d565b6111305760405162461bcd60e51b8152600401610abc9061555a565b606654818116146111a95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6111ef6133f1565b6110a18484848461344b565b6001600160a01b0383166000908152609b602052604081205461122085828686611b43565b95945050505050565b600054610100900460ff16158080156112495750600054600160ff909116105b806112635750303b158015611263575060005460ff166001145b6112c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610abc565b6000805460ff1916600117905580156112e9576000805461ff0019166101001790555b6112f38888613671565b6112fb61375b565b609755611307896137f2565b61131086613844565b61131c8585858561344b565b8015611362576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113cc5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6113e85760405162461bcd60e51b8152600401610abc906154e0565b6113f18361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a18185858561393e565b606654600290600490811614156114465760405162461bcd60e51b8152600401610abc90615358565b600260c95414156114995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c95560005b88811015611549576115398a8a838181106114be576114be615311565b90506020028101906114d091906155a2565b8989848181106114e2576114e2615311565b90506020028101906114f491906153af565b89898681811061150657611506615311565b9050602002013588888781811061151f5761151f615311565b905060200201602081019061153491906155b8565b6139b9565b6115428161533d565b90506114a1565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e6919061553d565b6116025760405162461bcd60e51b8152600401610abc9061555a565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116549190615649565b604051602081830303815290604052805190602001209050919050565b6066546002906004908116141561169a5760405162461bcd60e51b8152600401610abc90615358565b600260c95414156116ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c9556116ff86868686866139b9565b5050600160c95550505050565b6117146133f1565b610fee81613844565b60006001600160a01b0382161580159061175157506001600160a01b038083166000818152609a6020526040902054909116145b92915050565b61175f6133f1565b61176960006137f2565b565b42836020015110156117ef5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610abc565b6117f88561155a565b156118815760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610abc565b61188a8461171d565b6119165760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610abc565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119528783888860200151611b43565b6001600160a01b0388166000908152609b60205260409020600184019055855190915061198290889083906141a3565b61198e87878686612fe9565b50505050505050565b6060600082516001600160401b038111156119b4576119b4614c31565b6040519080825280602002602001820160405280156119dd578160200160208202803683370190505b50905060005b83518110156109c6576001600160a01b03851660009081526098602052604081208551909190869084908110611a1b57611a1b615311565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a5657611a56615311565b6020908102919091010152611a6a8161533d565b90506119e3565b611a7a3361171d565b611afc5760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610abc565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611b3792919061544a565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611bb961269c565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c90919061565c565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015611d00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d2891908101906156d0565b9150915060008313611d3f57909590945092505050565b606080835160001415611df9576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611db457611db4615311565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611de857611de8615311565b602002602001018181525050611fa7565b8351611e0690600161578a565b6001600160401b03811115611e1d57611e1d614c31565b604051908082528060200260200182016040528015611e46578160200160208202803683370190505b50915081516001600160401b03811115611e6257611e62614c31565b604051908082528060200260200182016040528015611e8b578160200160208202803683370190505b50905060005b8451811015611f2557848181518110611eac57611eac615311565b6020026020010151838281518110611ec657611ec6615311565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611ef857611ef8615311565b6020026020010151828281518110611f1257611f12615311565b6020908102919091010152600101611e91565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611f4a91906157a2565b81518110611f5a57611f5a615311565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611f8a91906157a2565b81518110611f9a57611f9a615311565b6020026020010181815250505b9097909650945050505050565b60665460609060019060029081161415611fe05760405162461bcd60e51b8152600401610abc90615358565b611fe98361155a565b6120695760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610abc565b6120728361171d565b156120e55760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610abc565b6001600160a01b0383166121615760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610abc565b6001600160a01b038084166000818152609a6020526040902054909116903314806121945750336001600160a01b038216145b806121bb57506001600160a01b038181166000908152609960205260409020600101541633145b61222d5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610abc565b60008061223986611bfc565b9092509050336001600160a01b0387161461228f57826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b0319169055815161231157604080516000815260208101909152945061246f565b81516001600160401b0381111561232a5761232a614c31565b604051908082528060200260200182016040528015612353578160200160208202803683370190505b50945060005b825181101561246d576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106123b9576123b9615311565b6020026020010151826000815181106123d4576123d4615311565b60200260200101906001600160a01b031690816001600160a01b03168152505083838151811061240657612406615311565b60200260200101518160008151811061242157612421615311565b60200260200101818152505061243a89878b8585612836565b88848151811061244c5761244c615311565b602002602001018181525050505080806124659061533d565b915050612359565b505b50505050919050565b6124813361155a565b156124ff5760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610abc565b6125088361171d565b6125895760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610abc565b6110a333848484612fe9565b61259e3361171d565b61261c5760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610abc565b610fee3382612df6565b61262e6133f1565b6001600160a01b0381166126935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abc565b610fee816137f2565b60007f00000000000000000000000000000000000000000000000000000000000000004614156126cd575060975490565b6126d561375b565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561272d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127519190615479565b6001600160a01b0316336001600160a01b0316146127815760405162461bcd60e51b8152600401610abc90615496565b6066541981196066541916146127ff5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016111dc565b60006001600160a01b0386166128cd5760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610abc565b82516129575760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610abc565b60005b8351811015612d04576001600160a01b038616156129b0576129b0868886848151811061298957612989615311565b60200260200101518685815181106129a3576129a3615311565b6020026020010151613376565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129e0576129e0615311565b60200260200101516001600160a01b03161415612aa9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb8988858481518110612a3957612a39615311565b60200260200101516040518363ffffffff1660e01b8152600401612a729291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b50505050612cfc565b846001600160a01b0316876001600160a01b03161480612b7b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d858381518110612b0557612b05615311565b60200260200101516040518263ffffffff1660e01b8152600401612b3891906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b79919061553d565b155b612c475760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610abc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612c8957612c89615311565b6020026020010151868581518110612ca357612ca3615311565b60200260200101516040518463ffffffff1660e01b8152600401612cc9939291906157b9565b600060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050505b60010161295a565b506001600160a01b0386166000908152609f60205260408120805491829190612d2c8361533d565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d9482611641565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612de290839085906157dd565b60405180910390a198975050505050505050565b6213c680612e0a60608301604084016157f6565b63ffffffff161115612ebf5760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610abc565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612efb90606084019084016157f6565b63ffffffff161015612f915760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610abc565b6001600160a01b03821660009081526099602052604090208190612fb58282615833565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611b379084906153f8565b606654600090600190811614156130125760405162461bcd60e51b8152600401610abc90615358565b6001600160a01b038085166000908152609960205260409020600101541680158015906130485750336001600160a01b03821614155b801561305d5750336001600160a01b03861614155b156131ca5742846020015110156130dc5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156131765760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516131b79088908890859088906109ce565b90506131c8828287600001516141a3565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061322988611bfc565b9150915060005b825181101561136257613277888a85848151811061325057613250615311565b602002602001015185858151811061326a5761326a615311565b602002602001015161393e565b600101613230565b6001600160a01b03811661330d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610abc565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038085166000908152609860209081526040808320938616835292905290812080548392906133ad9084906157a2565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f30939291906157b9565b6033546001600160a01b031633146117695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abc565b8281146134d35760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610abc565b8260005b818110156136695760008686838181106134f3576134f3615311565b905060200201602081019061350891906149ff565b6001600160a01b038116600090815260a1602052604081205491925086868581811061353657613536615311565b90506020020135905062034bc08111156135fa5760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610abc565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806136629061533d565b90506134d7565b505050505050565b6065546001600160a01b031615801561369257506001600160a01b03821615155b6137145760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26137578261327f565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc08111156138fd5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610abc565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061397590849061578a565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f30939291906157b9565b60006139c76105f387615896565b6000818152609e602052604090205490915060ff16613a485760405162461bcd60e51b815260206004820152604360248201526000805160206159c883398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610abc565b609d544390613a5d60a0890160808a016157f6565b63ffffffff16613a6d919061578a565b1115613af55760405162461bcd60e51b815260206004820152605f60248201526000805160206159c883398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610abc565b613b0560608701604088016149ff565b6001600160a01b0316336001600160a01b031614613b925760405162461bcd60e51b815260206004820152605060248201526000805160206159c883398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610abc565b8115613c1457613ba560a08701876153af565b85149050613c145760405162461bcd60e51b815260206004820152604260248201526000805160206159c883398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610abc565b6000818152609e60205260409020805460ff191690558115613d795760005b613c4060a08801886153af565b9050811015613d73574360a16000613c5b60a08b018b6153af565b85818110613c6b57613c6b615311565b9050602002016020810190613c8091906149ff565b6001600160a01b03168152602081019190915260400160002054613caa60a08a0160808b016157f6565b63ffffffff16613cba919061578a565b1115613cd85760405162461bcd60e51b8152600401610abc906158a2565b613d6b613ce860208901896149ff565b33613cf660a08b018b6153af565b85818110613d0657613d06615311565b9050602002016020810190613d1b91906149ff565b613d2860c08c018c6153af565b86818110613d3857613d38615311565b905060200201358a8a87818110613d5157613d51615311565b9050602002016020810190613d6691906149ff565b61435d565b600101613c33565b50614168565b336000908152609a60205260408120546001600160a01b0316905b613da160a08901896153af565b9050811015614165574360a16000613dbc60a08c018c6153af565b85818110613dcc57613dcc615311565b9050602002016020810190613de191906149ff565b6001600160a01b03168152602081019190915260400160002054613e0b60a08b0160808c016157f6565b63ffffffff16613e1b919061578a565b1115613e395760405162461bcd60e51b8152600401610abc906158a2565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613e5b60a08a018a6153af565b83818110613e6b57613e6b615311565b9050602002016020810190613e8091906149ff565b6001600160a01b03161415613fd0576000613e9e60208a018a6149ff565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c83613edf60c08e018e6153af565b87818110613eef57613eef615311565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f67919061565c565b6001600160a01b038084166000908152609a6020526040902054919250168015613fc857613fc88184613f9d60a08f018f6153af565b88818110613fad57613fad615311565b9050602002016020810190613fc291906149ff565b8561393e565b50505061415d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061401257614012615311565b905060200201602081019061402791906149ff565b61403460a08d018d6153af565b8681811061404457614044615311565b905060200201602081019061405991906149ff565b61406660c08e018e6153af565b8781811061407657614076615311565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156140d657600080fd5b505af11580156140ea573d6000803e3d6000fd5b505050506001600160a01b0382161561415d5761415d823361410f60a08c018c6153af565b8581811061411f5761411f615311565b905060200201602081019061413491906149ff565b61414160c08d018d6153af565b8681811061415157614151615311565b9050602002013561393e565b600101613d94565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b156142bd57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906141e3908690869060040161592a565b602060405180830381865afa158015614200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142249190615987565b6001600160e01b031916146110a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610abc565b826001600160a01b03166142d1838361449d565b6001600160a01b0316146110a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610abc565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156144085760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b1300906143d1908890889087906004016157b9565b600060405180830381600087803b1580156143eb57600080fd5b505af11580156143ff573d6000803e3d6000fd5b50505050614496565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b15801561448257600080fd5b505af1158015611362573d6000803e3d6000fd5b5050505050565b60008060006144ac85856144b9565b915091506109c681614529565b6000808251604114156144f05760208301516040840151606085015160001a6144e4878285856146e4565b94509450505050614522565b82516040141561451a576020830151604084015161450f8683836147d1565b935093505050614522565b506000905060025b9250929050565b600081600481111561453d5761453d6159b1565b14156145465750565b600181600481111561455a5761455a6159b1565b14156145a85760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610abc565b60028160048111156145bc576145bc6159b1565b141561460a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610abc565b600381600481111561461e5761461e6159b1565b14156146775760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610abc565b600481600481111561468b5761468b6159b1565b1415610fee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610abc565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561471b57506000905060036147c8565b8460ff16601b1415801561473357508460ff16601c14155b1561474457506000905060046147c8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614798573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147c1576000600192509250506147c8565b9150600090505b94509492505050565b6000806001600160ff1b038316816147ee60ff86901c601b61578a565b90506147fc878288856146e4565b935093505050935093915050565b60008083601f84011261481c57600080fd5b5081356001600160401b0381111561483357600080fd5b6020830191508360208260051b850101111561452257600080fd5b6000806020838503121561486157600080fd5b82356001600160401b0381111561487757600080fd5b6148838582860161480a565b90969095509350505050565b6001600160a01b0381168114610fee57600080fd5b80356148af8161488f565b919050565b600080600080600060a086880312156148cc57600080fd5b85356148d78161488f565b945060208601356148e78161488f565b935060408601356148f78161488f565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b818110156149475783518352928401929184019160010161492b565b50909695505050505050565b60006060828403121561496557600080fd5b50919050565b60008083601f84011261497d57600080fd5b5081356001600160401b0381111561499457600080fd5b60208301915083602082850101111561452257600080fd5b6000806000608084860312156149c157600080fd5b6149cb8585614953565b925060608401356001600160401b038111156149e657600080fd5b6149f28682870161496b565b9497909650939450505050565b600060208284031215614a1157600080fd5b8135614a1c8161488f565b9392505050565b600080600060608486031215614a3857600080fd5b8335614a438161488f565b92506020840135614a538161488f565b929592945050506040919091013590565b600060208284031215614a7657600080fd5b5035919050565b60008060008060408587031215614a9357600080fd5b84356001600160401b0380821115614aaa57600080fd5b614ab68883890161480a565b90965094506020870135915080821115614acf57600080fd5b50614adc8782880161480a565b95989497509550505050565b60008060008060008060008060c0898b031215614b0457600080fd5b8835614b0f8161488f565b97506020890135614b1f8161488f565b9650604089013595506060890135945060808901356001600160401b0380821115614b4957600080fd5b614b558c838d0161480a565b909650945060a08b0135915080821115614b6e57600080fd5b50614b7b8b828c0161480a565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614bab57600080fd5b88356001600160401b0380821115614bc257600080fd5b614bce8c838d0161480a565b909a50985060208b0135915080821115614be757600080fd5b614bf38c838d0161480a565b909850965060408b0135915080821115614c0c57600080fd5b614c188c838d0161480a565b909650945060608b0135915080821115614b6e57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614c6957614c69614c31565b60405290565b604080519081016001600160401b0381118282101715614c6957614c69614c31565b604051601f8201601f191681016001600160401b0381118282101715614cb957614cb9614c31565b604052919050565b63ffffffff81168114610fee57600080fd5b80356148af81614cc1565b60006001600160401b03821115614cf757614cf7614c31565b5060051b60200190565b600082601f830112614d1257600080fd5b81356020614d27614d2283614cde565b614c91565b82815260059290921b84018101918181019086841115614d4657600080fd5b8286015b84811015614d6a578035614d5d8161488f565b8352918301918301614d4a565b509695505050505050565b600082601f830112614d8657600080fd5b81356020614d96614d2283614cde565b82815260059290921b84018101918181019086841115614db557600080fd5b8286015b84811015614d6a5780358352918301918301614db9565b600060e08284031215614de257600080fd5b614dea614c47565b9050614df5826148a4565b8152614e03602083016148a4565b6020820152614e14604083016148a4565b604082015260608201356060820152614e2f60808301614cd3565b608082015260a08201356001600160401b0380821115614e4e57600080fd5b614e5a85838601614d01565b60a084015260c0840135915080821115614e7357600080fd5b50614e8084828501614d75565b60c08301525092915050565b600060208284031215614e9e57600080fd5b81356001600160401b03811115614eb457600080fd5b614ec084828501614dd0565b949350505050565b600060208284031215614eda57600080fd5b813560ff81168114614a1c57600080fd5b8015158114610fee57600080fd5b600080600080600060808688031215614f1157600080fd5b85356001600160401b0380821115614f2857600080fd5b9087019060e0828a031215614f3c57600080fd5b90955060208701359080821115614f5257600080fd5b50614f5f8882890161480a565b909550935050604086013591506060860135614f7a81614eeb565b809150509295509295909350565b60008060408385031215614f9b57600080fd5b8235614fa68161488f565b91506020830135614fb68161488f565b809150509250929050565b600060408284031215614fd357600080fd5b614fdb614c6f565b905081356001600160401b0380821115614ff457600080fd5b818401915084601f83011261500857600080fd5b813560208282111561501c5761501c614c31565b61502e601f8301601f19168201614c91565b9250818352868183860101111561504457600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561508157600080fd5b853561508c8161488f565b9450602086013561509c8161488f565b935060408601356001600160401b03808211156150b857600080fd5b6150c489838a01614fc1565b945060608801359150808211156150da57600080fd5b506150e788828901614fc1565b95989497509295608001359392505050565b6000806040838503121561510c57600080fd5b82356151178161488f565b915060208301356001600160401b0381111561513257600080fd5b61513e85828601614d01565b9150509250929050565b600081518084526020808501945080840160005b838110156151785781518752958201959082019060010161515c565b509495945050505050565b602081526000614a1c6020830184615148565b600080602083850312156151a957600080fd5b82356001600160401b038111156151bf57600080fd5b6148838582860161496b565b600080604083850312156151de57600080fd5b82356151e98161488f565b946020939093013593505050565b6000806000806080858703121561520d57600080fd5b84356152188161488f565b935060208501359250604085013561522f8161488f565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156151785781516001600160a01b031687529582019590820190600101615253565b60408152600061528b604083018561523f565b82810360208401526112208185615148565b6000806000606084860312156152b257600080fd5b83356152bd8161488f565b925060208401356001600160401b038111156152d857600080fd5b6152e486828701614fc1565b925050604084013590509250925092565b60006060828403121561530757600080fd5b614a1c8383614953565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561535157615351615327565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e198336030181126153a557600080fd5b9190910192915050565b6000808335601e198436030181126153c657600080fd5b8301803591506001600160401b038211156153e057600080fd5b6020019150600581901b360382131561452257600080fd5b6060810182356154078161488f565b6001600160a01b0390811683526020840135906154238261488f565b166020830152604083013561543781614cc1565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561548b57600080fd5b8151614a1c8161488f565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561554f57600080fd5b8151614a1c81614eeb565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de198336030181126153a557600080fd5b6000602082840312156155ca57600080fd5b8135614a1c81614eeb565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261563060e085018261523f565b905060c083015184820360c08601526112208282615148565b602081526000614a1c60208301846155d5565b60006020828403121561566e57600080fd5b5051919050565b600082601f83011261568657600080fd5b81516020615696614d2283614cde565b82815260059290921b840181019181810190868411156156b557600080fd5b8286015b84811015614d6a57805183529183019183016156b9565b600080604083850312156156e357600080fd5b82516001600160401b03808211156156fa57600080fd5b818501915085601f83011261570e57600080fd5b8151602061571e614d2283614cde565b82815260059290921b8401810191818101908984111561573d57600080fd5b948201945b838610156157645785516157558161488f565b82529482019490820190615742565b9188015191965090935050508082111561577d57600080fd5b5061513e85828601615675565b6000821982111561579d5761579d615327565b500190565b6000828210156157b4576157b4615327565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000614ec060408301846155d5565b60006020828403121561580857600080fd5b8135614a1c81614cc1565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561583e8161488f565b6158488183615813565b5060018101602083013561585b8161488f565b6158658183615813565b50604083013561587481614cc1565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006117513683614dd0565b6020808252606e908201526000805160206159c883398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b8181101561595e57858101830151858201606001528201615942565b81811115615970576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561599957600080fd5b81516001600160e01b031981168114614a1c57600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a26469706673582212201a88ea42e4cac4dd0831a1f8bfe22cc6c2ba4c8776376923419ad9ee255481f164736f6c634300080c0033", } // DelegationManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenPodManager/binding.go b/pkg/bindings/EigenPodManager/binding.go index 5ae4f0e4d..3d1d31267 100644 --- a/pkg/bindings/EigenPodManager/binding.go +++ b/pkg/bindings/EigenPodManager/binding.go @@ -31,8 +31,8 @@ var ( // 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\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]}]", - Bin: "0x61012060405234801561001157600080fd5b5060405161296b38038061296b83398101604081905261003091610140565b6001600160a01b0380861660805280851660a05280841660c05280831660e05281166101005261005e610068565b50505050506101b5565b600054610100900460ff16156100d45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610126576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013d57600080fd5b50565b600080600080600060a0868803121561015857600080fd5b855161016381610128565b602087015190955061017481610128565b604087015190945061018581610128565b606087015190935061019681610128565b60808701519092506101a781610128565b809150509295509295909350565b60805160a05160c05160e0516101005161274161022a60003960008181610551015281816105fb01528181610a2d01528181610fda015281816112430152611333015260006104dd015260006102cf01526000818161026301528181610f5901526117c8015260006103af01526127416000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b1461053f578063f2fde38b14610573578063f6848d2414610593578063fabc1cbc146105ce57600080fd5b8063b1344271146104cb578063beffbb89146104ff578063c2c51c401461051f57600080fd5b80639b4e4634116100c65780639b4e46341461044c5780639ba062751461045f578063a38406a314610495578063a6a509be146104b557600080fd5b8063886f1195146103e65780638da5cb5b146104065780639104c3191461042457600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461035b578063715018a61461038857806374cdd7981461039d57806384d81062146103d157600080fd5b8063595c6a67146102f15780635ac86ab7146103065780635c975abb1461034657600080fd5b80631794bb3c116101955780631794bb3c14610231578063292b7b2b14610251578063387b13001461029d57806339b70e38146102bd57600080fd5b80630e81073c146101bc57806310d67a2f146101ef578063136439dd14610211575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004611a63565b6105ee565b6040519081526020015b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004611a8f565b61075f565b005b34801561021d57600080fd5b5061020f61022c366004611aac565b610813565b34801561023d57600080fd5b5061020f61024c366004611ac5565b6108fe565b34801561025d57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e6565b3480156102a957600080fd5b5061020f6102b8366004611ac5565b610a22565b3480156102c957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fd57600080fd5b5061020f610ceb565b34801561031257600080fd5b50610336610321366004611b06565b606654600160ff9092169190911b9081161490565b60405190151581526020016101e6565b34801561035257600080fd5b506066546101dc565b34801561036757600080fd5b506101dc610376366004611a8f565b609b6020526000908152604090205481565b34801561039457600080fd5b5061020f610db3565b3480156103a957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b50610285610dc7565b3480156103f257600080fd5b50606554610285906001600160a01b031681565b34801561041257600080fd5b506033546001600160a01b0316610285565b34801561043057600080fd5b5061028573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61020f61045a366004611b72565b610e3a565b34801561046b57600080fd5b5061028561047a366004611a8f565b6098602052600090815260409020546001600160a01b031681565b3480156104a157600080fd5b506102856104b0366004611a8f565b610efd565b3480156104c157600080fd5b506101dc60995481565b3480156104d757600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061020f61051a366004611a63565b610fcf565b34801561052b57600080fd5b5061020f61053a366004611a63565b6110f6565b34801561054b57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b5061020f61058e366004611a8f565b6113ff565b34801561059f57600080fd5b506103366105ae366004611a8f565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105da57600080fd5b5061020f6105e9366004611aac565b611475565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106395760405163f739589b60e01b815260040160405180910390fd5b6001600160a01b038316610660576040516339b190bb60e11b815260040160405180910390fd5b60008212156106825760405163ef147de160e01b815260040160405180910390fd5b610690633b9aca0083611c01565b156106ae576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b6020526040812054906106d28483611c2b565b6001600160a01b0386166000818152609b60205260409081902083905551919250906000805160206126ec833981519152906107119087815260200190565b60405180910390a2846001600160a01b0316600080516020611dbe8339815191528260405161074291815260200190565b60405180910390a2610754828261157d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d69190611c53565b6001600160a01b0316336001600160a01b0316146108075760405163794821ff60e01b815260040160405180910390fd5b610810816115bf565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561085b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087f9190611c70565b61089c57604051631d77d47760e21b815260040160405180910390fd5b606654818116146108c05760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff161580801561091e5750600054600160ff909116105b806109385750303b158015610938575060005460ff166001145b6109a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156109c3576000805461ff0019166101001790555b6109cc8461164f565b6109d683836116a1565b8015610a1c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6b5760405163f739589b60e01b815260040160405180910390fd5b6001600160a01b038316610a92576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b038216610ab9576040516339b190bb60e11b815260040160405180910390fd5b6000811215610adb5760405163ef147de160e01b815260040160405180910390fd5b610ae9633b9aca0082611c01565b15610b07576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b602052604081205490811215610c70576000610b3382611c92565b905080831115610bca576001600160a01b0385166000908152609b6020526040812055610b608184611cae565b9250846001600160a01b03166000805160206126ec83398151915282604051610b8b91815260200190565b60405180910390a2846001600160a01b0316600080516020611dbe8339815191526000604051610bbd91815260200190565b60405180910390a2610c6e565b6001600160a01b0385166000908152609b6020526040812054610bee908590611c2b565b6001600160a01b0387166000818152609b60205260409081902083905551919250906000805160206126ec83398151915290610c2d9087815260200190565b60405180910390a2856001600160a01b0316600080516020611dbe83398151915282604051610c5e91815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610ccd57600080fd5b505af1158015610ce1573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190611c70565b610d7457604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610dbb611726565b610dc5600061164f565b565b6066546000908190600190811603610df25760405163840a48d560e01b815260040160405180910390fd5b336000908152609860205260409020546001600160a01b031615610e295760405163031a852160e21b815260040160405180910390fd5b6000610e33611780565b9250505090565b606654600090600190811603610e635760405163840a48d560e01b815260040160405180910390fd5b336000908152609860205260409020546001600160a01b031680610e8c57610e89611780565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610ec2908b908b908b908b908b90600401611cea565b6000604051808303818588803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061075957610fc8836001600160a01b031660001b60405180610940016040528061090e8152602001611dde61090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052610fad9291602001611d54565b604051602081830303815290604052805190602001206118e5565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110185760405163f739589b60e01b815260040160405180910390fd5b600081121561103a5760405163ef147de160e01b815260040160405180910390fd5b611048633b9aca0082611c01565b15611066576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0382166000908152609b602052604081205461108a908390611d69565b905060008112156110ae5760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0383166000818152609b60205260409081902083905551600080516020611dbe833981519152906110e99084815260200190565b60405180910390a2505050565b6001600160a01b038083166000908152609860205260409020548391163314611132576040516312e16d7160e11b815260040160405180910390fd5b600260c954036111845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610997565b600260c9556001600160a01b0383166111b0576040516339b190bb60e11b815260040160405180910390fd5b6111be633b9aca0083611d90565b156111dc576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b6020526040812054906112008483611c2b565b6001600160a01b0386166000908152609b60205260408120829055909150611228838361157d565b905080156113905760008112156112f3576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061128785611c92565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156112d657600080fd5b505af11580156112ea573d6000803e3d6000fd5b50505050611390565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b15801561137757600080fd5b505af115801561138b573d6000803e3d6000fd5b505050505b856001600160a01b03166000805160206126ec833981519152866040516113b991815260200190565b60405180910390a2856001600160a01b0316600080516020611dbe833981519152836040516113ea91815260200190565b60405180910390a25050600160c95550505050565b611407611726565b6001600160a01b03811661146c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610997565b6108108161164f565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ec9190611c53565b6001600160a01b0316336001600160a01b03161461151d5760405163794821ff60e01b815260040160405180910390fd5b6066541981196066541916146115465760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016108f3565b600080831361159d576000821361159657506000610759565b5080610759565b600082136115b5576115ae83611c92565b9050610759565b6115ae8383611d69565b6001600160a01b0381166115e6576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b03161580156116c257506001600160a01b03821615155b6116df576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611722826115bf565b5050565b6033546001600160a01b03163314610dc55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610997565b600060996000815461179190611da4565b9091555060408051610940810190915261090e8082526000916118309183913391611dde6020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f198184030181529082905261181c9291602001611d54565b604051602081830303815290604052611941565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b15801561187457600080fd5b505af1158015611888573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090610fc8565b600080844710156119945760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610997565b82516000036119e55760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610997565b8383516020850187f590506001600160a01b038116611a465760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610997565b949350505050565b6001600160a01b038116811461081057600080fd5b60008060408385031215611a7657600080fd5b8235611a8181611a4e565b946020939093013593505050565b600060208284031215611aa157600080fd5b8135610fc881611a4e565b600060208284031215611abe57600080fd5b5035919050565b600080600060608486031215611ada57600080fd5b8335611ae581611a4e565b92506020840135611af581611a4e565b929592945050506040919091013590565b600060208284031215611b1857600080fd5b813560ff81168114610fc857600080fd5b60008083601f840112611b3b57600080fd5b50813567ffffffffffffffff811115611b5357600080fd5b602083019150836020828501011115611b6b57600080fd5b9250929050565b600080600080600060608688031215611b8a57600080fd5b853567ffffffffffffffff811115611ba157600080fd5b611bad88828901611b29565b909650945050602086013567ffffffffffffffff811115611bcd57600080fd5b611bd988828901611b29565b96999598509660400135949350505050565b634e487b7160e01b600052601260045260246000fd5b600082611c1057611c10611beb565b500690565b634e487b7160e01b600052601160045260246000fd5b8082018281126000831280158216821582161715611c4b57611c4b611c15565b505092915050565b600060208284031215611c6557600080fd5b8151610fc881611a4e565b600060208284031215611c8257600080fd5b81518015158114610fc857600080fd5b6000600160ff1b8201611ca757611ca7611c15565b5060000390565b8181038181111561075957610759611c15565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000611cfe606083018789611cc1565b8281036020840152611d11818688611cc1565b9150508260408301529695505050505050565b6000815160005b81811015611d455760208185018101518683015201611d2b565b50600093019283525090919050565b6000611a46611d638386611d24565b84611d24565b8181036000831280158383131683831282161715611d8957611d89611c15565b5092915050565b600082611d9f57611d9f611beb565b500790565b600060018201611db657611db6611c15565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193a2646970667358221220e4ffeebe0cfc3dbe2c2146c1f161bd9a2b47ecfcc79aafee8e07bb3e86f51f6964736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodBeacon\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x6101206040523480156200001257600080fd5b50604051620031693803806200316983398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e05161010051612f286200024160003960008181610551015281816105fb01528181610b7901528181611313015281816117bf01526118af015260006104dd015260006102cf015260008181610263015281816112920152611e64015260006103af0152612f286000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b1461053f578063f2fde38b14610573578063f6848d2414610593578063fabc1cbc146105ce57600080fd5b8063b1344271146104cb578063beffbb89146104ff578063c2c51c401461051f57600080fd5b80639b4e4634116100c65780639b4e46341461044c5780639ba062751461045f578063a38406a314610495578063a6a509be146104b557600080fd5b8063886f1195146103e65780638da5cb5b146104065780639104c3191461042457600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461035b578063715018a61461038857806374cdd7981461039d57806384d81062146103d157600080fd5b8063595c6a67146102f15780635ac86ab7146103065780635c975abb1461034657600080fd5b80631794bb3c116101955780631794bb3c14610231578063292b7b2b14610251578063387b13001461029d57806339b70e38146102bd57600080fd5b80630e81073c146101bc57806310d67a2f146101ef578063136439dd14610211575b600080fd5b3480156101c857600080fd5b506101dc6101d73660046120fc565b6105ee565b6040519081526020015b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004612128565b61085d565b005b34801561021d57600080fd5b5061020f61022c366004612145565b610910565b34801561023d57600080fd5b5061020f61024c36600461215e565b610a4f565b34801561025d57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e6565b3480156102a957600080fd5b5061020f6102b836600461215e565b610b6e565b3480156102c957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fd57600080fd5b5061020f610f82565b34801561031257600080fd5b5061033661032136600461219f565b606654600160ff9092169190911b9081161490565b60405190151581526020016101e6565b34801561035257600080fd5b506066546101dc565b34801561036757600080fd5b506101dc610376366004612128565b609b6020526000908152604090205481565b34801561039457600080fd5b5061020f611049565b3480156103a957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b5061028561105d565b3480156103f257600080fd5b50606554610285906001600160a01b031681565b34801561041257600080fd5b506033546001600160a01b0316610285565b34801561043057600080fd5b5061028573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61020f61045a36600461220b565b611147565b34801561046b57600080fd5b5061028561047a366004612128565b6098602052600090815260409020546001600160a01b031681565b3480156104a157600080fd5b506102856104b0366004612128565b611236565b3480156104c157600080fd5b506101dc60995481565b3480156104d757600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061020f61051a3660046120fc565b611308565b34801561052b57600080fd5b5061020f61053a3660046120fc565b611547565b34801561054b57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b5061020f61058e366004612128565b61197b565b34801561059f57600080fd5b506103366105ae366004612128565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105da57600080fd5b5061020f6105e9366004612145565b6119f1565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106415760405162461bcd60e51b81526004016106389061227f565b60405180910390fd5b6001600160a01b0383166106bd5760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f20616464726573730000000000006064820152608401610638565b600082121561072b5760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b6064820152608401610638565b610739633b9aca00836122f3565b156107ac5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e740000006064820152608401610638565b6001600160a01b0383166000908152609b6020526040812054906107d0848361231d565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020612eb38339815191529061080f9087815260200190565b60405180910390a2846001600160a01b03166000805160206125858339815191528260405161084091815260200190565b60405180910390a26108528282611b4d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d4919061235e565b6001600160a01b0316336001600160a01b0316146109045760405162461bcd60e51b81526004016106389061237b565b61090d81611b8f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097c91906123c5565b6109985760405162461bcd60e51b8152600401610638906123e7565b60665481811614610a115760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610638565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff1615808015610a6f5750600054600160ff909116105b80610a895750303b158015610a89575060005460ff166001145b610aec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610638565b6000805460ff191660011790558015610b0f576000805461ff0019166101001790555b610b1884611c86565b610b228383611cd8565b8015610b68576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bb65760405162461bcd60e51b81526004016106389061227f565b6001600160a01b038316610c305760405162461bcd60e51b81526020600482015260476024820152600080516020612ed383398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a401610638565b6001600160a01b038216610cad5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ed383398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a401610638565b6000811215610d1c5760405162461bcd60e51b81526020600482015260416024820152600080516020612ed383398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a401610638565b610d2a633b9aca00826122f3565b15610d9e5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ed383398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a401610638565b6001600160a01b0383166000908152609b602052604081205490811215610f07576000610dca8261242f565b905080831115610e61576001600160a01b0385166000908152609b6020526040812055610df7818461244c565b9250846001600160a01b0316600080516020612eb383398151915282604051610e2291815260200190565b60405180910390a2846001600160a01b03166000805160206125858339815191526000604051610e5491815260200190565b60405180910390a2610f05565b6001600160a01b0385166000908152609b6020526040812054610e8590859061231d565b6001600160a01b0387166000818152609b6020526040908190208390555191925090600080516020612eb383398151915290610ec49087815260200190565b60405180910390a2856001600160a01b031660008051602061258583398151915282604051610ef591815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610f6457600080fd5b505af1158015610f78573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fee91906123c5565b61100a5760405162461bcd60e51b8152600401610638906123e7565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611051611dc2565b61105b6000611c86565b565b6066546000908190600190811614156110b45760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610638565b336000908152609860205260409020546001600160a01b0316156111365760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b6064820152608401610638565b6000611140611e1c565b9250505090565b6066546000906001908116141561119c5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610638565b336000908152609860205260409020546001600160a01b0316806111c5576111c2611e1c565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906111fb908b908b908b908b908b9060040161248c565b6000604051808303818588803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061085757611301836001600160a01b031660001b60405180610940016040528061090e81526020016125a561090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f19818403018152908290526112e69291602001612501565b60405160208183030381529060405280519060200120611f81565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113505760405162461bcd60e51b81526004016106389061227f565b60008112156113c75760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e656761746976650000000000000000006064820152608401610638565b6113d5633b9aca00826122f3565b1561144a576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e746064820152608401610638565b6001600160a01b0382166000908152609b602052604081205461146e908390612516565b905060008112156114ff5760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a401610638565b6001600160a01b0383166000818152609b602052604090819020839055516000805160206125858339815191529061153a9084815260200190565b60405180910390a2505050565b6001600160a01b0380831660009081526098602052604090205483911633146115c25760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b6064820152608401610638565b600260c95414156116155760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610638565b600260c9556001600160a01b0383166116b15760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a401610638565b6116bf633b9aca0083612555565b156117585760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a401610638565b6001600160a01b0383166000908152609b60205260408120549061177c848361231d565b6001600160a01b0386166000908152609b602052604081208290559091506117a48383611b4d565b9050801561190c57600081121561186f576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118038561242f565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561185257600080fd5b505af1158015611866573d6000803e3d6000fd5b5050505061190c565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156118f357600080fd5b505af1158015611907573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020612eb38339815191528660405161193591815260200190565b60405180910390a2856001600160a01b03166000805160206125858339815191528360405161196691815260200190565b60405180910390a25050600160c95550505050565b611983611dc2565b6001600160a01b0381166119e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610638565b61090d81611c86565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a68919061235e565b6001600160a01b0316336001600160a01b031614611a985760405162461bcd60e51b81526004016106389061237b565b606654198119606654191614611b165760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610638565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610a44565b6000808313611b6d5760008213611b6657506000610857565b5080610857565b60008213611b8557611b7e8361242f565b9050610857565b611b7e8383612516565b6001600160a01b038116611c1d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610638565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b0316158015611cf957506001600160a01b03821615155b611d7b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610638565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611dbe82611b8f565b5050565b6033546001600160a01b0316331461105b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000609960008154611e2d90612569565b9091555060408051610940810190915261090e808252600091611ecc91839133916125a56020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052611eb89291602001612501565b604051602081830303815290604052611fdd565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b158015611f1057600080fd5b505af1158015611f24573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090611301565b600080844710156120305760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610638565b825161207e5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610638565b8383516020850187f590506001600160a01b0381166120df5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610638565b949350505050565b6001600160a01b038116811461090d57600080fd5b6000806040838503121561210f57600080fd5b823561211a816120e7565b946020939093013593505050565b60006020828403121561213a57600080fd5b8135611301816120e7565b60006020828403121561215757600080fd5b5035919050565b60008060006060848603121561217357600080fd5b833561217e816120e7565b9250602084013561218e816120e7565b929592945050506040919091013590565b6000602082840312156121b157600080fd5b813560ff8116811461130157600080fd5b60008083601f8401126121d457600080fd5b50813567ffffffffffffffff8111156121ec57600080fd5b60208301915083602082850101111561220457600080fd5b9250929050565b60008060008060006060868803121561222357600080fd5b853567ffffffffffffffff8082111561223b57600080fd5b61224789838a016121c2565b9097509550602088013591508082111561226057600080fd5b5061226d888289016121c2565b96999598509660400135949350505050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612302576123026122dd565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b038490038513161561233f5761233f612307565b600160ff1b839003841281161561235857612358612307565b50500190565b60006020828403121561237057600080fd5b8151611301816120e7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156123d757600080fd5b8151801515811461130157600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b82141561244557612445612307565b5060000390565b60008282101561245e5761245e612307565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006124a0606083018789612463565b82810360208401526124b3818688612463565b9150508260408301529695505050505050565b6000815160005b818110156124e757602081850181015186830152016124cd565b818111156124f6576000828601525b509290920192915050565b60006120df61251083866124c6565b846124c6565b60008083128015600160ff1b85018412161561253457612534612307565b6001600160ff1b038401831381161561254f5761254f612307565b50500390565b600082612564576125646122dd565b500790565b600060001982141561257d5761257d612307565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220ab15fe92e05748fd03441d98a7837905194deb492a89f580b320661f7cb8204164736f6c634300080c0033", } // EigenPodManagerABI 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 fafba8a42..baafb9a34 100644 --- a/pkg/bindings/IAVSDirectory/binding.go +++ b/pkg/bindings/IAVSDirectory/binding.go @@ -29,6 +29,12 @@ var ( _ = abi.ConvertType ) +// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryOperatorSet struct { + Avs common.Address + OperatorSetId uint32 +} + // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -38,7 +44,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry 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\":\"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\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"structISignatureUtils.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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"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\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getNumOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetsOfOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"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\":\"operatorSetMemberAtIndex\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOfAtIndex\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false}]", } // IAVSDirectoryABI is the input ABI used to generate the binding from. @@ -218,6 +224,37 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) OPERATORAVSREGISTRATIONTYPEHAS return _IAVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_IAVSDirectory.CallOpts) } +// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. +// +// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCaller) OPERATORSETREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "OPERATOR_SET_REGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. +// +// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_IAVSDirectory *IAVSDirectorySession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { + return _IAVSDirectory.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_IAVSDirectory.CallOpts) +} + +// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. +// +// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCallerSession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { + return _IAVSDirectory.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_IAVSDirectory.CallOpts) +} + // CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. // // Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -249,248 +286,1210 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorAVSRegistrati return _IAVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_IAVSDirectory.CallOpts, operator, avs, salt, expiry) } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. // -// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) -func (_IAVSDirectory *IAVSDirectoryCaller) OperatorSaltIsSpent(opts *bind.CallOpts, operator common.Address, salt [32]byte) (bool, error) { +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "operatorSaltIsSpent", operator, salt) + err := _IAVSDirectory.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) if err != nil { - return *new(bool), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. // -// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) -func (_IAVSDirectory *IAVSDirectorySession) OperatorSaltIsSpent(operator common.Address, salt [32]byte) (bool, error) { - return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectorySession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IAVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. // -// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) -func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSaltIsSpent(operator common.Address, salt [32]byte) (bool, error) { - return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IAVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCaller) CalculateOperatorSetRegistrationDigestHash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "calculateOperatorSetRegistrationDigestHash", avs, operatorSetIds, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_IAVSDirectory *IAVSDirectorySession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) +// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectorySession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IAVSDirectory.Contract.CalculateOperatorSetRegistrationDigestHash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) +// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IAVSDirectory.Contract.CalculateOperatorSetRegistrationDigestHash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +// Solidity: function domainSeparator() view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "domainSeparator") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) +// Solidity: function domainSeparator() view returns(bytes32) +func (_IAVSDirectory *IAVSDirectorySession) DomainSeparator() ([32]byte, error) { + return _IAVSDirectory.Contract.DomainSeparator(&_IAVSDirectory.CallOpts) } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) +// Solidity: function domainSeparator() view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCallerSession) DomainSeparator() ([32]byte, error) { + return _IAVSDirectory.Contract.DomainSeparator(&_IAVSDirectory.CallOpts) } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_IAVSDirectory *IAVSDirectoryCaller) GetNumOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "getNumOperatorsInOperatorSet", operatorSet) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_IAVSDirectory *IAVSDirectorySession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_IAVSDirectory *IAVSDirectorySession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + return _IAVSDirectory.Contract.GetNumOperatorsInOperatorSet(&_IAVSDirectory.CallOpts, operatorSet) } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + return _IAVSDirectory.Contract.GetNumOperatorsInOperatorSet(&_IAVSDirectory.CallOpts, operatorSet) } -// IAVSDirectoryAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the IAVSDirectory contract. -type IAVSDirectoryAVSMetadataURIUpdatedIterator struct { - Event *IAVSDirectoryAVSMetadataURIUpdated // Event containing the contract specifics and raw log +// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. +// +// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_IAVSDirectory *IAVSDirectoryCaller) GetOperatorSetsOfOperator(opts *bind.CallOpts, operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "getOperatorSetsOfOperator", operator, start, length) - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data + if err != nil { + return *new([]IAVSDirectoryOperatorSet), err + } - 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 -} + out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) -// 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 *IAVSDirectoryAVSMetadataURIUpdatedIterator) 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(IAVSDirectoryAVSMetadataURIUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true + return out0, err - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(IAVSDirectoryAVSMetadataURIUpdated) - 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() - } +// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. +// +// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_IAVSDirectory *IAVSDirectorySession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + return _IAVSDirectory.Contract.GetOperatorSetsOfOperator(&_IAVSDirectory.CallOpts, operator, start, length) } -// Error returns any retrieval or parsing error occurred during filtering. -func (it *IAVSDirectoryAVSMetadataURIUpdatedIterator) Error() error { - return it.fail +// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. +// +// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + return _IAVSDirectory.Contract.GetOperatorSetsOfOperator(&_IAVSDirectory.CallOpts, operator, start, length) } -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryAVSMetadataURIUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil +// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. +// +// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) +func (_IAVSDirectory *IAVSDirectoryCaller) GetOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "getOperatorsInOperatorSet", operatorSet, start, length) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + } -// IAVSDirectoryAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the IAVSDirectory contract. -type IAVSDirectoryAVSMetadataURIUpdated struct { - Avs common.Address - MetadataURI string - Raw types.Log // Blockchain specific contextual infos +// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. +// +// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) +func (_IAVSDirectory *IAVSDirectorySession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { + return _IAVSDirectory.Contract.GetOperatorsInOperatorSet(&_IAVSDirectory.CallOpts, operatorSet, start, length) } -// FilterAVSMetadataURIUpdated is a free log retrieval operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. // -// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*IAVSDirectoryAVSMetadataURIUpdatedIterator, error) { +// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { + return _IAVSDirectory.Contract.GetOperatorsInOperatorSet(&_IAVSDirectory.CallOpts, operatorSet, start, length) +} - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_IAVSDirectory *IAVSDirectoryCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "inTotalOperatorSets", operator) - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) if err != nil { - return nil, err + return *new(*big.Int), err } - return &IAVSDirectoryAVSMetadataURIUpdatedIterator{contract: _IAVSDirectory.contract, event: "AVSMetadataURIUpdated", logs: logs, sub: sub}, nil + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + } -// WatchAVSMetadataURIUpdated is a free log subscription operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. // -// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_IAVSDirectory *IAVSDirectorySession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _IAVSDirectory.Contract.InTotalOperatorSets(&_IAVSDirectory.CallOpts, operator) +} - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_IAVSDirectory *IAVSDirectoryCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _IAVSDirectory.Contract.InTotalOperatorSets(&_IAVSDirectory.CallOpts, operator) +} + +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. +// +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_IAVSDirectory *IAVSDirectoryCaller) IsMember(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "isMember", operator, operatorSet) - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "AVSMetadataURIUpdated", avsRule) if err != nil { - return nil, err + return *new(bool), 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(IAVSDirectoryAVSMetadataURIUpdated) - if err := _IAVSDirectory.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 + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + } -// ParseAVSMetadataURIUpdated is a log parse operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. // -// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*IAVSDirectoryAVSMetadataURIUpdated, error) { - event := new(IAVSDirectoryAVSMetadataURIUpdated) - if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_IAVSDirectory *IAVSDirectorySession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _IAVSDirectory.Contract.IsMember(&_IAVSDirectory.CallOpts, operator, operatorSet) } -// IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { - Event *IAVSDirectoryOperatorAVSRegistrationStatusUpdated // Event containing the contract specifics and raw log +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. +// +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_IAVSDirectory *IAVSDirectoryCallerSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _IAVSDirectory.Contract.IsMember(&_IAVSDirectory.CallOpts, operator, operatorSet) +} + +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. +// +// Solidity: function isOperatorSet(address avs, uint32 operatorSetId) view returns(bool) +func (_IAVSDirectory *IAVSDirectoryCaller) IsOperatorSet(opts *bind.CallOpts, avs common.Address, operatorSetId uint32) (bool, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "isOperatorSet", avs, operatorSetId) + + 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 0x84d76f7b. +// +// Solidity: function isOperatorSet(address avs, uint32 operatorSetId) view returns(bool) +func (_IAVSDirectory *IAVSDirectorySession) IsOperatorSet(avs common.Address, operatorSetId uint32) (bool, error) { + return _IAVSDirectory.Contract.IsOperatorSet(&_IAVSDirectory.CallOpts, avs, operatorSetId) +} + +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. +// +// Solidity: function isOperatorSet(address avs, uint32 operatorSetId) view returns(bool) +func (_IAVSDirectory *IAVSDirectoryCallerSession) IsOperatorSet(avs common.Address, operatorSetId uint32) (bool, error) { + return _IAVSDirectory.Contract.IsOperatorSet(&_IAVSDirectory.CallOpts, avs, operatorSetId) +} + +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// +// Solidity: function isOperatorSetAVS(address avs) view returns(bool) +func (_IAVSDirectory *IAVSDirectoryCaller) IsOperatorSetAVS(opts *bind.CallOpts, avs common.Address) (bool, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "isOperatorSetAVS", avs) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// +// Solidity: function isOperatorSetAVS(address avs) view returns(bool) +func (_IAVSDirectory *IAVSDirectorySession) IsOperatorSetAVS(avs common.Address) (bool, error) { + return _IAVSDirectory.Contract.IsOperatorSetAVS(&_IAVSDirectory.CallOpts, avs) +} + +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// +// Solidity: function isOperatorSetAVS(address avs) view returns(bool) +func (_IAVSDirectory *IAVSDirectoryCallerSession) IsOperatorSetAVS(avs common.Address) (bool, error) { + return _IAVSDirectory.Contract.IsOperatorSetAVS(&_IAVSDirectory.CallOpts, avs) +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) +func (_IAVSDirectory *IAVSDirectoryCaller) OperatorSaltIsSpent(opts *bind.CallOpts, operator common.Address, salt [32]byte) (bool, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "operatorSaltIsSpent", operator, salt) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) +func (_IAVSDirectory *IAVSDirectorySession) OperatorSaltIsSpent(operator common.Address, salt [32]byte) (bool, error) { + return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) +func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSaltIsSpent(operator common.Address, salt [32]byte) (bool, error) { + return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) +} + +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_IAVSDirectory *IAVSDirectoryCaller) OperatorSetMemberAtIndex(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "operatorSetMemberAtIndex", operatorSet, index) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_IAVSDirectory *IAVSDirectorySession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + return _IAVSDirectory.Contract.OperatorSetMemberAtIndex(&_IAVSDirectory.CallOpts, operatorSet, index) +} + +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + return _IAVSDirectory.Contract.OperatorSetMemberAtIndex(&_IAVSDirectory.CallOpts, operatorSet, index) +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_IAVSDirectory *IAVSDirectoryCaller) OperatorSetsMemberOfAtIndex(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "operatorSetsMemberOfAtIndex", operator, index) + + if err != nil { + return *new(IAVSDirectoryOperatorSet), err + } + + out0 := *abi.ConvertType(out[0], new(IAVSDirectoryOperatorSet)).(*IAVSDirectoryOperatorSet) + + return out0, err + +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_IAVSDirectory *IAVSDirectorySession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _IAVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_IAVSDirectory.CallOpts, operator, index) +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _IAVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_IAVSDirectory.CallOpts, operator, index) +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "becomeOperatorSetAVS") +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_IAVSDirectory *IAVSDirectorySession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _IAVSDirectory.Contract.BecomeOperatorSetAVS(&_IAVSDirectory.TransactOpts) +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _IAVSDirectory.Contract.BecomeOperatorSetAVS(&_IAVSDirectory.TransactOpts) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) CancelSalt(opts *bind.TransactOpts, salt [32]byte) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "cancelSalt", salt) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_IAVSDirectory *IAVSDirectorySession) CancelSalt(salt [32]byte) (*types.Transaction, error) { + return _IAVSDirectory.Contract.CancelSalt(&_IAVSDirectory.TransactOpts, salt) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { + return _IAVSDirectory.Contract.CancelSalt(&_IAVSDirectory.TransactOpts, salt) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "createOperatorSets", operatorSetIds) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectorySession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.CreateOperatorSets(&_IAVSDirectory.TransactOpts, operatorSetIds) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.CreateOperatorSets(&_IAVSDirectory.TransactOpts, operatorSetIds) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_IAVSDirectory *IAVSDirectorySession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) +} + +// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. +// +// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) DeregisterOperatorFromOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "deregisterOperatorFromOperatorSets", operator, operatorSetIds) +} + +// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. +// +// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectorySession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds) +} + +// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. +// +// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectorySession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectorySession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_IAVSDirectory.TransactOpts, operators, operatorSetIds) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_IAVSDirectory.TransactOpts, operators, operatorSetIds) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) +} + +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, operatorSignature) +} + +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) +} + +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_IAVSDirectory *IAVSDirectorySession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) +} + +// IAVSDirectoryAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the IAVSDirectory contract. +type IAVSDirectoryAVSMetadataURIUpdatedIterator struct { + Event *IAVSDirectoryAVSMetadataURIUpdated // 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 *IAVSDirectoryAVSMetadataURIUpdatedIterator) 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(IAVSDirectoryAVSMetadataURIUpdated) + 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(IAVSDirectoryAVSMetadataURIUpdated) + 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 *IAVSDirectoryAVSMetadataURIUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryAVSMetadataURIUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the IAVSDirectory contract. +type IAVSDirectoryAVSMetadataURIUpdated 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 (_IAVSDirectory *IAVSDirectoryFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*IAVSDirectoryAVSMetadataURIUpdatedIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) + if err != nil { + return nil, err + } + return &IAVSDirectoryAVSMetadataURIUpdatedIterator{contract: _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _IAVSDirectory.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(IAVSDirectoryAVSMetadataURIUpdated) + if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*IAVSDirectoryAVSMetadataURIUpdated, error) { + event := new(IAVSDirectoryAVSMetadataURIUpdated) + if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the IAVSDirectory contract. +type IAVSDirectoryAVSMigratedToOperatorSetsIterator struct { + Event *IAVSDirectoryAVSMigratedToOperatorSets // 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 *IAVSDirectoryAVSMigratedToOperatorSetsIterator) 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(IAVSDirectoryAVSMigratedToOperatorSets) + 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(IAVSDirectoryAVSMigratedToOperatorSets) + 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 *IAVSDirectoryAVSMigratedToOperatorSetsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryAVSMigratedToOperatorSetsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the IAVSDirectory contract. +type IAVSDirectoryAVSMigratedToOperatorSets struct { + Avs common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*IAVSDirectoryAVSMigratedToOperatorSetsIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) + if err != nil { + return nil, err + } + return &IAVSDirectoryAVSMigratedToOperatorSetsIterator{contract: _IAVSDirectory.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil +} + +// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", 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(IAVSDirectoryAVSMigratedToOperatorSets) + if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", 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 +} + +// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*IAVSDirectoryAVSMigratedToOperatorSets, error) { + event := new(IAVSDirectoryAVSMigratedToOperatorSets) + if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { + Event *IAVSDirectoryOperatorAVSRegistrationStatusUpdated // 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 *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) 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(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + 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(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + 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 *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorAVSRegistrationStatusUpdated struct { + Operator common.Address + Avs common.Address + Status uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + if err != nil { + return nil, err + } + return &IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _IAVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, 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(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", 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 +} + +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { + event := new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorAddedToOperatorSetIterator struct { + Event *IAVSDirectoryOperatorAddedToOperatorSet // 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 *IAVSDirectoryOperatorAddedToOperatorSetIterator) 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(IAVSDirectoryOperatorAddedToOperatorSet) + 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(IAVSDirectoryOperatorAddedToOperatorSet) + 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 *IAVSDirectoryOperatorAddedToOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryOperatorAddedToOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorAddedToOperatorSet struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + 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 (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*IAVSDirectoryOperatorAddedToOperatorSetIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + if err != nil { + return nil, err + } + return &IAVSDirectoryOperatorAddedToOperatorSetIterator{contract: _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IAVSDirectory.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(IAVSDirectoryOperatorAddedToOperatorSet) + if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*IAVSDirectoryOperatorAddedToOperatorSet, error) { + event := new(IAVSDirectoryOperatorAddedToOperatorSet) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorMigratedToOperatorSetsIterator struct { + Event *IAVSDirectoryOperatorMigratedToOperatorSets // 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 @@ -504,7 +1503,7 @@ type IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator 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 *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool { +func (it *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -513,7 +1512,7 @@ func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool if it.done { select { case log := <-it.logs: - it.Event = new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + it.Event = new(IAVSDirectoryOperatorMigratedToOperatorSets) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -528,7 +1527,7 @@ func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + it.Event = new(IAVSDirectoryOperatorMigratedToOperatorSets) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -544,29 +1543,29 @@ func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Error() error { +func (it *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() error { +func (it *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) Close() error { it.sub.Unsubscribe() return nil } -// IAVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorAVSRegistrationStatusUpdated struct { - Operator common.Address - Avs common.Address - Status uint8 - Raw types.Log // Blockchain specific contextual infos +// IAVSDirectoryOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorMigratedToOperatorSets struct { + Operator common.Address + Avs common.Address + OperatorSetIds []uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*IAVSDirectoryOperatorMigratedToOperatorSetsIterator, error) { var operatorRule []interface{} for _, operatorItem := range operator { @@ -577,17 +1576,17 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAVSRegistrationStatus avsRule = append(avsRule, avsItem) } - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) if err != nil { return nil, err } - return &IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _IAVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil + return &IAVSDirectoryOperatorMigratedToOperatorSetsIterator{contract: _IAVSDirectory.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil } -// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { var operatorRule []interface{} for _, operatorItem := range operator { @@ -598,7 +1597,7 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusU avsRule = append(avsRule, avsItem) } - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) if err != nil { return nil, err } @@ -608,8 +1607,8 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusU select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + event := new(IAVSDirectoryOperatorMigratedToOperatorSets) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { return err } event.Raw = log @@ -630,12 +1629,291 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusU }), nil } -// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { - event := new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*IAVSDirectoryOperatorMigratedToOperatorSets, error) { + event := new(IAVSDirectoryOperatorMigratedToOperatorSets) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorRemovedFromOperatorSetIterator struct { + Event *IAVSDirectoryOperatorRemovedFromOperatorSet // 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 *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) 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(IAVSDirectoryOperatorRemovedFromOperatorSet) + 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(IAVSDirectoryOperatorRemovedFromOperatorSet) + 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 *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorRemovedFromOperatorSet struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + 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 (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*IAVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + if err != nil { + return nil, err + } + return &IAVSDirectoryOperatorRemovedFromOperatorSetIterator{contract: _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IAVSDirectory.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(IAVSDirectoryOperatorRemovedFromOperatorSet) + if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*IAVSDirectoryOperatorRemovedFromOperatorSet, error) { + event := new(IAVSDirectoryOperatorRemovedFromOperatorSet) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorSetCreatedIterator struct { + Event *IAVSDirectoryOperatorSetCreated // 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 *IAVSDirectoryOperatorSetCreatedIterator) 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(IAVSDirectoryOperatorSetCreated) + 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(IAVSDirectoryOperatorSetCreated) + 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 *IAVSDirectoryOperatorSetCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryOperatorSetCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryOperatorSetCreated represents a OperatorSetCreated event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorSetCreated struct { + OperatorSet IAVSDirectoryOperatorSet + 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 (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*IAVSDirectoryOperatorSetCreatedIterator, error) { + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorSetCreated") + if err != nil { + return nil, err + } + return &IAVSDirectoryOperatorSetCreatedIterator{contract: _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorSetCreated) (event.Subscription, error) { + + logs, sub, err := _IAVSDirectory.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(IAVSDirectoryOperatorSetCreated) + if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorSetCreated(log types.Log) (*IAVSDirectoryOperatorSetCreated, error) { + event := new(IAVSDirectoryOperatorSetCreated) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { return nil, err } event.Raw = log diff --git a/pkg/bindings/IRewardsCoordinator/binding.go b/pkg/bindings/IRewardsCoordinator/binding.go index 9f90ea0e4..f19f93005 100644 --- a/pkg/bindings/IRewardsCoordinator/binding.go +++ b/pkg/bindings/IRewardsCoordinator/binding.go @@ -29,6 +29,12 @@ var ( _ = abi.ConvertType ) +// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryOperatorSet struct { + Avs common.Address + OperatorSetId uint32 +} + // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorDistributionRoot struct { Root [32]byte @@ -43,6 +49,17 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } +// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. +type IRewardsCoordinatorOperatorSetRewardsSubmission struct { + RewardType uint8 + OperatorSetId uint32 + StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier + Token common.Address + Amount *big.Int + StartTimestamp uint32 + Duration uint32 +} + // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -77,7 +94,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"AmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CommissionBipsExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsForAllSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", } // IRewardsCoordinatorABI is the input ABI used to generate the binding from. @@ -722,6 +739,68 @@ func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) GetDistributionRoo return _IRewardsCoordinator.Contract.GetDistributionRootsLength(&_IRewardsCoordinator.CallOpts) } +// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. +// +// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) +func (_IRewardsCoordinator *IRewardsCoordinatorCaller) GetOperatorCommissionBips(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { + var out []interface{} + err := _IRewardsCoordinator.contract.Call(opts, &out, "getOperatorCommissionBips", operator, operatorSet, rewardType) + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. +// +// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) +func (_IRewardsCoordinator *IRewardsCoordinatorSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { + return _IRewardsCoordinator.Contract.GetOperatorCommissionBips(&_IRewardsCoordinator.CallOpts, operator, operatorSet, rewardType) +} + +// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. +// +// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) +func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { + return _IRewardsCoordinator.Contract.GetOperatorCommissionBips(&_IRewardsCoordinator.CallOpts, operator, operatorSet, rewardType) +} + +// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. +// +// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) +func (_IRewardsCoordinator *IRewardsCoordinatorCaller) GetOperatorCommissionUpdateHistoryLength(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { + var out []interface{} + err := _IRewardsCoordinator.contract.Call(opts, &out, "getOperatorCommissionUpdateHistoryLength", operator, operatorSet, rewardType) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. +// +// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) +func (_IRewardsCoordinator *IRewardsCoordinatorSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { + return _IRewardsCoordinator.Contract.GetOperatorCommissionUpdateHistoryLength(&_IRewardsCoordinator.CallOpts, operator, operatorSet, rewardType) +} + +// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. +// +// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) +func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { + return _IRewardsCoordinator.Contract.GetOperatorCommissionUpdateHistoryLength(&_IRewardsCoordinator.CallOpts, operator, operatorSet, rewardType) +} + // GetRootIndexFromHash is a free data retrieval call binding the contract method 0xe810ce21. // // Solidity: function getRootIndexFromHash(bytes32 rootHash) view returns(uint32) @@ -784,37 +863,6 @@ func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) GlobalOperatorComm return _IRewardsCoordinator.Contract.GlobalOperatorCommissionBips(&_IRewardsCoordinator.CallOpts) } -// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. -// -// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) -func (_IRewardsCoordinator *IRewardsCoordinatorCaller) OperatorCommissionBips(opts *bind.CallOpts, operator common.Address, avs common.Address) (uint16, error) { - var out []interface{} - err := _IRewardsCoordinator.contract.Call(opts, &out, "operatorCommissionBips", operator, avs) - - if err != nil { - return *new(uint16), err - } - - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - - return out0, err - -} - -// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. -// -// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) -func (_IRewardsCoordinator *IRewardsCoordinatorSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { - return _IRewardsCoordinator.Contract.OperatorCommissionBips(&_IRewardsCoordinator.CallOpts, operator, avs) -} - -// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. -// -// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) -func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { - return _IRewardsCoordinator.Contract.OperatorCommissionBips(&_IRewardsCoordinator.CallOpts, operator, avs) -} - // RewardsUpdater is a free data retrieval call binding the contract method 0xfbf1e2c1. // // Solidity: function rewardsUpdater() view returns(address) @@ -867,27 +915,6 @@ func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) CreateAVSRewar return _IRewardsCoordinator.Contract.CreateAVSRewardsSubmission(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) } -// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. -// -// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_IRewardsCoordinator *IRewardsCoordinatorTransactor) CreateRewardsForAllEarners(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { - return _IRewardsCoordinator.contract.Transact(opts, "createRewardsForAllEarners", rewardsSubmissions) -} - -// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. -// -// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_IRewardsCoordinator *IRewardsCoordinatorSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { - return _IRewardsCoordinator.Contract.CreateRewardsForAllEarners(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) -} - -// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. -// -// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { - return _IRewardsCoordinator.Contract.CreateRewardsForAllEarners(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) -} - // CreateRewardsForAllSubmission is a paid mutator transaction binding the contract method 0x36af41fa. // // Solidity: function createRewardsForAllSubmission(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmission) returns() @@ -951,6 +978,27 @@ func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) ProcessClaim(c return _IRewardsCoordinator.Contract.ProcessClaim(&_IRewardsCoordinator.TransactOpts, claim, recipient) } +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_IRewardsCoordinator *IRewardsCoordinatorTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _IRewardsCoordinator.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_IRewardsCoordinator *IRewardsCoordinatorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _IRewardsCoordinator.Contract.RewardOperatorSetForRange(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _IRewardsCoordinator.Contract.RewardOperatorSetForRange(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) +} + // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -1014,6 +1062,27 @@ func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) SetGlobalOpera return _IRewardsCoordinator.Contract.SetGlobalOperatorCommission(&_IRewardsCoordinator.TransactOpts, _globalCommissionBips) } +// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. +// +// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) +func (_IRewardsCoordinator *IRewardsCoordinatorTransactor) SetOperatorCommissionBips(opts *bind.TransactOpts, operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { + return _IRewardsCoordinator.contract.Transact(opts, "setOperatorCommissionBips", operatorSet, rewardType, commissionBips) +} + +// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. +// +// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) +func (_IRewardsCoordinator *IRewardsCoordinatorSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { + return _IRewardsCoordinator.Contract.SetOperatorCommissionBips(&_IRewardsCoordinator.TransactOpts, operatorSet, rewardType, commissionBips) +} + +// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. +// +// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) +func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { + return _IRewardsCoordinator.Contract.SetOperatorCommissionBips(&_IRewardsCoordinator.TransactOpts, operatorSet, rewardType, commissionBips) +} + // SetRewardsForAllSubmitter is a paid mutator transaction binding the contract method 0x0eb38345. // // Solidity: function setRewardsForAllSubmitter(address _submitter, bool _newValue) returns() @@ -1979,6 +2048,325 @@ func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseGlobalCommissionBi return event, nil } +// IRewardsCoordinatorOperatorCommissionUpdatedIterator is returned from FilterOperatorCommissionUpdated and is used to iterate over the raw logs and unpacked data for OperatorCommissionUpdated events raised by the IRewardsCoordinator contract. +type IRewardsCoordinatorOperatorCommissionUpdatedIterator struct { + Event *IRewardsCoordinatorOperatorCommissionUpdated // 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 *IRewardsCoordinatorOperatorCommissionUpdatedIterator) 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(IRewardsCoordinatorOperatorCommissionUpdated) + 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(IRewardsCoordinatorOperatorCommissionUpdated) + 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 *IRewardsCoordinatorOperatorCommissionUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IRewardsCoordinatorOperatorCommissionUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IRewardsCoordinatorOperatorCommissionUpdated represents a OperatorCommissionUpdated event raised by the IRewardsCoordinator contract. +type IRewardsCoordinatorOperatorCommissionUpdated struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + RewardType uint8 + NewCommissionBips uint16 + EffectTimestamp uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorCommissionUpdated is a free log retrieval operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. +// +// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) FilterOperatorCommissionUpdated(opts *bind.FilterOpts, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (*IRewardsCoordinatorOperatorCommissionUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) + } + + logs, sub, err := _IRewardsCoordinator.contract.FilterLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) + if err != nil { + return nil, err + } + return &IRewardsCoordinatorOperatorCommissionUpdatedIterator{contract: _IRewardsCoordinator.contract, event: "OperatorCommissionUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorCommissionUpdated is a free log subscription operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. +// +// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) WatchOperatorCommissionUpdated(opts *bind.WatchOpts, sink chan<- *IRewardsCoordinatorOperatorCommissionUpdated, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) + } + + logs, sub, err := _IRewardsCoordinator.contract.WatchLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) + 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(IRewardsCoordinatorOperatorCommissionUpdated) + if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorCommissionUpdated", 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 +} + +// ParseOperatorCommissionUpdated is a log parse operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. +// +// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseOperatorCommissionUpdated(log types.Log) (*IRewardsCoordinatorOperatorCommissionUpdated, error) { + event := new(IRewardsCoordinatorOperatorCommissionUpdated) + if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorCommissionUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IRewardsCoordinatorOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the IRewardsCoordinator contract. +type IRewardsCoordinatorOperatorSetRewardCreatedIterator struct { + Event *IRewardsCoordinatorOperatorSetRewardCreated // 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 *IRewardsCoordinatorOperatorSetRewardCreatedIterator) 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(IRewardsCoordinatorOperatorSetRewardCreated) + 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(IRewardsCoordinatorOperatorSetRewardCreated) + 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 *IRewardsCoordinatorOperatorSetRewardCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IRewardsCoordinatorOperatorSetRewardCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IRewardsCoordinatorOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the IRewardsCoordinator contract. +type IRewardsCoordinatorOperatorSetRewardCreated struct { + Avs common.Address + SubmissionNonce *big.Int + RewardsSubmissionHash [32]byte + RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*IRewardsCoordinatorOperatorSetRewardCreatedIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _IRewardsCoordinator.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) + if err != nil { + return nil, err + } + return &IRewardsCoordinatorOperatorSetRewardCreatedIterator{contract: _IRewardsCoordinator.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil +} + +// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *IRewardsCoordinatorOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _IRewardsCoordinator.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) + 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(IRewardsCoordinatorOperatorSetRewardCreated) + if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", 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 +} + +// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseOperatorSetRewardCreated(log types.Log) (*IRewardsCoordinatorOperatorSetRewardCreated, error) { + event := new(IRewardsCoordinatorOperatorSetRewardCreated) + if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // IRewardsCoordinatorRewardsClaimedIterator is returned from FilterRewardsClaimed and is used to iterate over the raw logs and unpacked data for RewardsClaimed events raised by the IRewardsCoordinator contract. type IRewardsCoordinatorRewardsClaimedIterator struct { Event *IRewardsCoordinatorRewardsClaimed // Event containing the contract specifics and raw log @@ -2469,169 +2857,6 @@ func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseRewardsSubmissionF return event, nil } -// IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator is returned from FilterRewardsSubmissionForAllEarnersCreated and is used to iterate over the raw logs and unpacked data for RewardsSubmissionForAllEarnersCreated events raised by the IRewardsCoordinator contract. -type IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator struct { - Event *IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated // 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 *IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) 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(IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated) - 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(IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated) - 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 *IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated represents a RewardsSubmissionForAllEarnersCreated event raised by the IRewardsCoordinator contract. -type IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated struct { - TokenHopper common.Address - SubmissionNonce *big.Int - RewardsSubmissionHash [32]byte - RewardsSubmission IRewardsCoordinatorRewardsSubmission - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRewardsSubmissionForAllEarnersCreated is a free log retrieval operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. -// -// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) FilterRewardsSubmissionForAllEarnersCreated(opts *bind.FilterOpts, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator, error) { - - var tokenHopperRule []interface{} - for _, tokenHopperItem := range tokenHopper { - tokenHopperRule = append(tokenHopperRule, tokenHopperItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _IRewardsCoordinator.contract.FilterLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) - if err != nil { - return nil, err - } - return &IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator{contract: _IRewardsCoordinator.contract, event: "RewardsSubmissionForAllEarnersCreated", logs: logs, sub: sub}, nil -} - -// WatchRewardsSubmissionForAllEarnersCreated is a free log subscription operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. -// -// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) WatchRewardsSubmissionForAllEarnersCreated(opts *bind.WatchOpts, sink chan<- *IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { - - var tokenHopperRule []interface{} - for _, tokenHopperItem := range tokenHopper { - tokenHopperRule = append(tokenHopperRule, tokenHopperItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _IRewardsCoordinator.contract.WatchLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) - 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(IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated) - if err := _IRewardsCoordinator.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", 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 -} - -// ParseRewardsSubmissionForAllEarnersCreated is a log parse operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. -// -// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseRewardsSubmissionForAllEarnersCreated(log types.Log) (*IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated, error) { - event := new(IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated) - if err := _IRewardsCoordinator.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // IRewardsCoordinatorRewardsUpdaterSetIterator is returned from FilterRewardsUpdaterSet and is used to iterate over the raw logs and unpacked data for RewardsUpdaterSet events raised by the IRewardsCoordinator contract. type IRewardsCoordinatorRewardsUpdaterSetIterator struct { Event *IRewardsCoordinatorRewardsUpdaterSet // Event containing the contract specifics and raw log diff --git a/pkg/bindings/RewardsCoordinator/binding.go b/pkg/bindings/RewardsCoordinator/binding.go index 5acdccbb3..2882e2bb5 100644 --- a/pkg/bindings/RewardsCoordinator/binding.go +++ b/pkg/bindings/RewardsCoordinator/binding.go @@ -29,6 +29,12 @@ var ( _ = abi.ConvertType ) +// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryOperatorSet struct { + Avs common.Address + OperatorSetId uint32 +} + // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorDistributionRoot struct { Root [32]byte @@ -43,6 +49,17 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } +// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. +type IRewardsCoordinatorOperatorSetRewardsSubmission struct { + RewardType uint8 + OperatorSetId uint32 + StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier + Token common.Address + Amount *big.Int + StartTimestamp uint32 + Duration uint32 +} + // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -77,8 +94,8 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf struct { // RewardsCoordinatorMetaData contains all meta data concerning the RewardsCoordinator contract. var RewardsCoordinatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"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\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"AmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CommissionBipsExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsForAllSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofLengthNotMultipleOf32\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]}]", - Bin: "0x61018060405234801561001157600080fd5b506040516137c73803806137c7833981016040819052610030916102d0565b86868686868686610041858261035b565b63ffffffff16156100e55760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b6100f2620151808661035b565b63ffffffff16156101915760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a4016100dc565b6001600160a01b0396871661012052949095166101405263ffffffff92831660805290821660a052811660c05291821660e05216610100526101d16101e3565b50504661016052506103919350505050565b600054610100900460ff161561024b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100dc565b60005460ff908116101561029d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146102b457600080fd5b50565b805163ffffffff811681146102cb57600080fd5b919050565b600080600080600080600060e0888a0312156102eb57600080fd5b87516102f68161029f565b60208901519097506103078161029f565b9550610315604089016102b7565b9450610323606089016102b7565b9350610331608089016102b7565b925061033f60a089016102b7565b915061034d60c089016102b7565b905092959891949750929550565b600063ffffffff83168061037f57634e487b7160e01b600052601260045260246000fd5b8063ffffffff84160691505092915050565b60805160a05160c05160e051610100516101205161014051610160516133a061042760003960006118150152600081816104f501526121d8015260006107b501526000818161040c01526120c301526000818161033201526121120152600081816104ce01526120720152600081816107140152611f4701526000818161068c01528181611f9e0152611ffd01526133a06000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c80637b8f8b051161019d578063d4540a55116100e9578063f698da25116100a2578063fabc1cbc1161007c578063fabc1cbc14610818578063fbf1e2c11461082b578063fce36c7d1461083e578063ff9f6cce1461085157600080fd5b8063f698da25146107ea578063f8cd8448146107f2578063f96abf2e1461080557600080fd5b8063d4540a5514610764578063de02e50314610777578063e221b2451461078a578063e810ce211461079d578063ea4d3c9b146107b0578063f2fde38b146107d757600080fd5b80639be3d4e411610156578063aebd8bae11610130578063aebd8bae146106c1578063bb7e451f146106ef578063bf21a8aa1461070f578063c46db6061461073657600080fd5b80639be3d4e41461067f5780639d45c28114610687578063a0169ddd146106ae57600080fd5b80637b8f8b05146105fa578063863cb9a914610602578063865c695314610615578063886f1195146106405780638da5cb5b146106535780639104c3191461066457600080fd5b806337838ed01161025c57806358baaa3e116102155780635c975abb116101ef5780635c975abb146105a95780635e9d8348146105b15780636d21117e146105c4578063715018a6146105f257600080fd5b806358baaa3e1461056b578063595c6a671461057e5780635ac86ab71461058657600080fd5b806337838ed0146104c957806339b70e38146104f05780633a8c0786146105175780633ccc861d1461052e5780633efe1db6146105415780634d18cc351461055457600080fd5b8063131433b4116102ae578063131433b414610407578063136439dd1461042e578063149bc8721461044157806322f19a64146104625780632b9f64a41461047557806336af41fa146104b657600080fd5b806218572c146102f557806304a0c5021461032d578063092db007146103695780630e9a53cf146103915780630eb38345146103df57806310d67a2f146103f4575b600080fd5b610318610303366004612bc0565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103547f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610324565b60cb5461037e90600160e01b900461ffff1681565b60405161ffff9091168152602001610324565b610399610864565b604051610324919060006080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b6103f26103ed366004612beb565b610943565b005b6103f2610402366004612bc0565b6109c5565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103f261043c366004612c24565b610a79565b61045461044f366004612c55565b610b64565b604051908152602001610324565b61037e610470366004612c71565b610bda565b61049e610483366004612bc0565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610324565b6103f26104c4366004612c9f565b610bef565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b61049e7f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461035490600160a01b900463ffffffff1681565b6103f261053c366004612d29565b610db7565b6103f261054f366004612d89565b6110a6565b60cb5461035490600160c01b900463ffffffff1681565b6103f2610579366004612db5565b61129c565b6103f26112ad565b610318610594366004612dd0565b606654600160ff9092169190911b9081161490565b606654610454565b6103186105bf366004612df3565b611375565b6103186105d2366004612e28565b60cf60209081526000928352604080842090915290825290205460ff1681565b6103f2611402565b60ca54610454565b6103f2610610366004612bc0565b611416565b610454610623366004612c71565b60cd60209081526000928352604080842090915290825290205481565b60655461049e906001600160a01b031681565b6033546001600160a01b031661049e565b61049e73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610399611427565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103f26106bc366004612bc0565b6114c5565b6103186106cf366004612e28565b60d260209081526000928352604080842090915290825290205460ff1681565b6104546106fd366004612bc0565b60ce6020526000908152604090205481565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b610318610744366004612e28565b60d060209081526000928352604080842090915290825290205460ff1681565b6103f2610772366004612e71565b611524565b610399610785366004612c24565b61166c565b6103f2610798366004612ee4565b6116fe565b6103546107ab366004612c24565b61170f565b61049e7f000000000000000000000000000000000000000000000000000000000000000081565b6103f26107e5366004612bc0565b61179b565b610454611811565b610454610800366004612c55565b61184e565b6103f2610813366004612db5565b61185f565b6103f2610826366004612c24565b6119b2565b60cb5461049e906001600160a01b031681565b6103f261084c366004612c9f565b611aba565b6103f261085f366004612c9f565b611c2d565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b801561093f57600060ca6108a1600184612f15565b815481106108b1576108b1612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615801560608301819052919250906109215750806040015163ffffffff164210155b1561092c5792915050565b508061093781612f3e565b91505061088c565b5090565b61094b611dd0565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3c9190612f55565b6001600160a01b0316336001600160a01b031614610a6d5760405163794821ff60e01b815260040160405180910390fd5b610a7681611e2a565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae59190612f72565b610b0257604051631d77d47760e21b815260040160405180910390fd5b60665481811614610b265760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610b746020840184612bc0565b8360200135604051602001610bbd9392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60cb54600160e01b900461ffff165b92915050565b606654600190600290811603610c185760405163840a48d560e01b815260040160405180910390fd5b33600090815260d1602052604090205460ff16610c485760405163289d7fb960e01b815260040160405180910390fd5b600260975403610c735760405162461bcd60e51b8152600401610c6a90612f8f565b60405180910390fd5b600260975560005b82811015610dac5736848483818110610c9657610c96612f28565b9050602002810190610ca89190612fc6565b33600081815260ce60209081526040808320549051949550939192610cd3929091859187910161310b565b604051602081830303815290604052805190602001209050610cf483611eba565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610d2790839061313b565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610d6f90889061314e565b60405180910390a4610da1333060408601803590610d909060208901612bc0565b6001600160a01b03169291906122ca565b505050600101610c7b565b505060016097555050565b606654600290600490811603610de05760405163840a48d560e01b815260040160405180910390fd5b600260975403610e025760405162461bcd60e51b8152600401610c6a90612f8f565b6002609755600060ca610e186020860186612db5565b63ffffffff1681548110610e2e57610e2e612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050610e8f848261233b565b6000610ea16080860160608701612bc0565b6001600160a01b03808216600090815260cc60205260409020549192501680610ec75750805b336001600160a01b03821614610eef576040516208978560e71b815260040160405180910390fd5b60005b610eff60a0880188613161565b90508110156110985736610f1660e08901896131b2565b83818110610f2657610f26612f28565b6001600160a01b038716600090815260cd602090815260408083209302949094019450929091508290610f5b90850185612bc0565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080826020013511610fa25760405163aa385e8160e01b815260040160405180910390fd5b6000610fb2826020850135612f15565b6001600160a01b038716600090815260cd60209081526040822092935085018035929190610fe09087612bc0565b6001600160a01b0316815260208082019290925260400160002091909155611022908a90839061101290870187612bc0565b6001600160a01b031691906124df565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31906110666020890189612bc0565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101610ef2565b505060016097555050505050565b6066546003906008908116036110cf5760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b031633146110fa5760405163f6f1e6f160e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161112d57604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff1610611153576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb5460009061117390600160a01b900463ffffffff16426131fc565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b6112a4611dd0565b610a768161250f565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190612f72565b61133657604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60006113fa8260ca61138a6020830183612db5565b63ffffffff16815481106113a0576113a0612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015261233b565b506001919050565b61140a611dd0565b6114146000612580565b565b61141e611dd0565b610a76816125d2565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461145b90600190612f15565b8154811061146b5761146b612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b600054610100900460ff16158080156115445750600054600160ff909116105b8061155e5750303b15801561155e575060005460ff166001145b6115c15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c6a565b6000805460ff1916600117905580156115e4576000805461ff0019166101001790555b6115ec61262e565b60c9556115f986866126c5565b61160287612580565b61160b846125d2565b6116148361250f565b61161d8261274a565b8015611663576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca82815481106116a3576116a3612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b611706611dd0565b610a768161274a565b60ca546000905b63ffffffff811615611781578260ca611730600184613218565b63ffffffff168154811061174657611746612f28565b9060005260206000209060020201600001540361176f57611768600182613218565b9392505050565b8061177981613234565b915050611716565b5060405163504570e360e01b815260040160405180910390fd5b6117a3611dd0565b6001600160a01b0381166118085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c6a565b610a7681612580565b60007f00000000000000000000000000000000000000000000000000000000000000004603611841575060c95490565b61184961262e565b905090565b60006001610b746020840184612bc0565b6066546003906008908116036118885760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b031633146118b35760405163f6f1e6f160e01b815260040160405180910390fd5b60ca5463ffffffff8316106118db576040516394a8d38960e01b815260040160405180910390fd5b600060ca8363ffffffff16815481106118f6576118f6612f28565b906000526020600020906002020190508060010160089054906101000a900460ff161561193657604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061196757604051631748afff60e01b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a299190612f55565b6001600160a01b0316336001600160a01b031614611a5a5760405163794821ff60e01b815260040160405180910390fd5b606654198119606654191614611a835760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610b59565b606654600090600190811603611ae35760405163840a48d560e01b815260040160405180910390fd5b600260975403611b055760405162461bcd60e51b8152600401610c6a90612f8f565b600260975560005b82811015610dac5736848483818110611b2857611b28612f28565b9050602002810190611b3a9190612fc6565b33600081815260ce60209081526040808320549051949550939192611b65929091859187910161310b565b604051602081830303815290604052805190602001209050611b8683611eba565b33600090815260cf602090815260408083208484529091529020805460ff19166001908117909155611bb990839061313b565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190611c0190889061314e565b60405180910390a4611c22333060408601803590610d909060208901612bc0565b505050600101611b0d565b606654600490601090811603611c565760405163840a48d560e01b815260040160405180910390fd5b33600090815260d1602052604090205460ff16611c865760405163289d7fb960e01b815260040160405180910390fd5b600260975403611ca85760405162461bcd60e51b8152600401610c6a90612f8f565b600260975560005b82811015610dac5736848483818110611ccb57611ccb612f28565b9050602002810190611cdd9190612fc6565b33600081815260ce60209081526040808320549051949550939192611d08929091859187910161310b565b604051602081830303815290604052805190602001209050611d2983611eba565b33600090815260d2602090815260408083208484529091529020805460ff19166001908117909155611d5c90839061313b565b33600081815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b90611da490889061314e565b60405180910390a4611dc5333060408601803590610d909060208901612bc0565b505050600101611cb0565b6033546001600160a01b031633146114145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c6a565b6001600160a01b038116611e51576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611ec682806131b2565b905011611ee65760405163796cc52560e01b815260040160405180910390fd5b6000816040013511611f0b576040516365e52d5160e11b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff81604001351115611f405760405163070b5a6f60e21b815260040160405180910390fd5b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611f7760a0830160808401612db5565b63ffffffff161115611f9c57604051630dd0b9f560e21b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000611fcd60a0830160808401612db5565b611fd7919061326a565b63ffffffff1615611ffb57604051632380fd2760e21b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061202c6080830160608401612db5565b612036919061326a565b63ffffffff161561205a57604051630ea11a0360e31b815260040160405180910390fd5b61206a6080820160608301612db5565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16426120a29190612f15565b111580156120eb57506120bb6080820160608301612db5565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b6121085760405163041aa75760e11b815260040160405180910390fd5b61213863ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164261313b565b6121486080830160608401612db5565b63ffffffff16111561216d57604051637ee2b44360e01b815260040160405180910390fd5b6000805b61217b83806131b2565b90508110156122c557600061219084806131b2565b838181106121a0576121a0612f28565b6121b69260206040909202019081019150612bc0565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015612221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122459190612f72565b8061226c57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61228957604051632711b74d60e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b0316106122bb5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101612171565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526123359085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526127b5565b50505050565b80606001511561235e57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff1642101561238957604051631437a2bb60e31b815260040160405180910390fd5b61239660c0830183613161565b90506123a560a0840184613161565b9050146123c5576040516343714afd60e01b815260040160405180910390fd5b6123d260e08301836131b2565b90506123e160c0840184613161565b905014612401576040516343714afd60e01b815260040160405180910390fd5b805161242d906124176040850160208601612db5565b6124246040860186613292565b86606001612887565b60005b61243d60a0840184613161565b90508110156122c5576124d7608084013561245b60a0860186613161565b8481811061246b5761246b612f28565b90506020020160208101906124809190612db5565b61248d60c0870187613161565b8581811061249d5761249d612f28565b90506020028101906124af9190613292565b6124bc60e08901896131b2565b878181106124cc576124cc612f28565b905060400201612936565b600101612430565b6040516001600160a01b0383166024820152604481018290526122c590849063a9059cbb60e01b906064016122fe565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156126e657506001600160a01b03821615155b612703576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261274682611e2a565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061280a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129759092919063ffffffff16565b8051909150156122c557808060200190518101906128289190612f72565b6122c55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c6a565b6128926020836132d9565b6001901b8463ffffffff16106128bb576040516369ca16c960e01b815260040160405180910390fd5b60006128c682610b64565b905061291184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff891661298c565b61292e576040516369ca16c960e01b815260040160405180910390fd5b505050505050565b6129416020836132d9565b6001901b8463ffffffff161061296a5760405163054ff4df60e51b815260040160405180910390fd5b60006128c68261184e565b606061298484846000856129a4565b949350505050565b60008361299a868585612ad5565b1495945050505050565b606082471015612a055760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c6a565b6001600160a01b0385163b612a5c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c6a565b600080866001600160a01b03168587604051612a789190613311565b60006040518083038185875af1925050503d8060008114612ab5576040519150601f19603f3d011682016040523d82523d6000602084013e612aba565b606091505b5091509150612aca828286612b72565b979650505050505050565b600060208451612ae59190613323565b15612b0357604051630228be0560e31b815260040160405180910390fd5b8260205b85518111612b6957612b1a600285613323565b600003612b3e57816000528086015160205260406000209150600284049350612b57565b8086015160005281602052604060002091506002840493505b612b6260208261313b565b9050612b07565b50949350505050565b60608315612b81575081611768565b825115612b915782518084602001fd5b8160405162461bcd60e51b8152600401610c6a9190613337565b6001600160a01b0381168114610a7657600080fd5b600060208284031215612bd257600080fd5b813561176881612bab565b8015158114610a7657600080fd5b60008060408385031215612bfe57600080fd5b8235612c0981612bab565b91506020830135612c1981612bdd565b809150509250929050565b600060208284031215612c3657600080fd5b5035919050565b600060408284031215612c4f57600080fd5b50919050565b600060408284031215612c6757600080fd5b6117688383612c3d565b60008060408385031215612c8457600080fd5b8235612c8f81612bab565b91506020830135612c1981612bab565b60008060208385031215612cb257600080fd5b823567ffffffffffffffff811115612cc957600080fd5b8301601f81018513612cda57600080fd5b803567ffffffffffffffff811115612cf157600080fd5b8560208260051b8401011115612d0657600080fd5b6020919091019590945092505050565b60006101008284031215612c4f57600080fd5b60008060408385031215612d3c57600080fd5b823567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612d16565b9250506020830135612c1981612bab565b803563ffffffff81168114612d8457600080fd5b919050565b60008060408385031215612d9c57600080fd5b82359150612dac60208401612d70565b90509250929050565b600060208284031215612dc757600080fd5b61176882612d70565b600060208284031215612de257600080fd5b813560ff8116811461176857600080fd5b600060208284031215612e0557600080fd5b813567ffffffffffffffff811115612e1c57600080fd5b61298484828501612d16565b60008060408385031215612e3b57600080fd5b8235612e4681612bab565b946020939093013593505050565b8035612d8481612bab565b803561ffff81168114612d8457600080fd5b60008060008060008060c08789031215612e8a57600080fd5b8635612e9581612bab565b95506020870135612ea581612bab565b9450604087013593506060870135612ebc81612bab565b9250612eca60808801612d70565b9150612ed860a08801612e5f565b90509295509295509295565b600060208284031215612ef657600080fd5b61176882612e5f565b634e487b7160e01b600052601160045260246000fd5b81810381811115610be957610be9612eff565b634e487b7160e01b600052603260045260246000fd5b600081612f4d57612f4d612eff565b506000190190565b600060208284031215612f6757600080fd5b815161176881612bab565b600060208284031215612f8457600080fd5b815161176881612bdd565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008235609e19833603018112612fdc57600080fd5b9190910192915050565b81835260208301925060008160005b8481101561304c57813561300881612bab565b6001600160a01b0316865260208201356bffffffffffffffffffffffff811680821461303357600080fd5b6020880152506040958601959190910190600101612ff5565b5093949350505050565b60008135601e1983360301811261306c57600080fd5b820160208101903567ffffffffffffffff81111561308957600080fd5b8060061b360382131561309b57600080fd5b60a085526130ad60a086018284612fe6565b9150506130bc60208401612e54565b6001600160a01b03166020850152604083810135908501526130e060608401612d70565b63ffffffff1660608501526130f760808401612d70565b63ffffffff81166080860152509392505050565b60018060a01b03841681528260208201526060604082015260006131326060830184613056565b95945050505050565b80820180821115610be957610be9612eff565b6020815260006117686020830184613056565b6000808335601e1984360301811261317857600080fd5b83018035915067ffffffffffffffff82111561319357600080fd5b6020019150600581901b36038213156131ab57600080fd5b9250929050565b6000808335601e198436030181126131c957600080fd5b83018035915067ffffffffffffffff8211156131e457600080fd5b6020019150600681901b36038213156131ab57600080fd5b63ffffffff8181168382160190811115610be957610be9612eff565b63ffffffff8281168282160390811115610be957610be9612eff565b600063ffffffff82168061324a5761324a612eff565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff83168061328057613280613254565b8063ffffffff84160691505092915050565b6000808335601e198436030181126132a957600080fd5b83018035915067ffffffffffffffff8211156132c457600080fd5b6020019150368190038213156131ab57600080fd5b6000826132e8576132e8613254565b500490565b60005b838110156133085781810151838201526020016132f0565b50506000910152565b60008251612fdc8184602087016132ed565b60008261333257613332613254565b500690565b60208152600082518060208401526133568160408501602087016132ed565b601f01601f1916919091016040019291505056fea26469706673582212200ced2d5bca1cb606ffb68c411b9ebfe082e7825398031d1abe1ad1dc0257114064736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"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\":\"_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", + Bin: "0x6101e06040523480156200001257600080fd5b506040516200511f3803806200511f8339810160408190526200003591620003c0565b898989898989898989896200004b878462000497565b63ffffffff1615620000f05760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b620000ff620151808862000497565b63ffffffff1615620001a05760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a401620000e7565b620001ac878362000497565b63ffffffff1615620002635760405162461bcd60e51b815260206004820152606d60248201527f52657761726473436f6f7264696e61746f723a204f50455241544f525f53455460448201527f5f47454e455349535f524557415244535f54494d455354414d50206d7573742060648201527f62652061206d756c7469706c65206f662043414c43554c4154494f4e5f494e5460848201526c455256414c5f5345434f4e445360981b60a482015260c401620000e7565b6001600160a01b03998a166101605297891661018052959097166101a05263ffffffff93841660805291831660a052821661010052811660c05292831660e0528216610120521661014052620002b8620002ce565b5050466101c05250620004c99650505050505050565b600054610100900460ff1615620003385760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000e7565b60005460ff90811610156200038b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620003a357600080fd5b50565b805163ffffffff81168114620003bb57600080fd5b919050565b6000806000806000806000806000806101408b8d031215620003e157600080fd5b8a51620003ee816200038d565b60208c0151909a5062000401816200038d565b60408c015190995062000414816200038d565b97506200042460608c01620003a6565b96506200043460808c01620003a6565b95506200044460a08c01620003a6565b94506200045460c08c01620003a6565b93506200046460e08c01620003a6565b9250620004756101008c01620003a6565b9150620004866101208c01620003a6565b90509295989b9194979a5092959850565b600063ffffffff80841680620004bd57634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614b896200059660003960006124e80152600081816106970152610e1c01526000818161059d01526130d9015260006108e801526000818161053c0152610f930152600081816108750152610fb4015260008181610576015261124701526000818161048d01526112680152600081816103b90152612fd601526000818161080d0152612cda0152600081816107b301528181612d8a0152612e540152614b896000f3fe608060405234801561001057600080fd5b50600436106103775760003560e01c8063715018a6116101d3578063c46db60611610104578063f2fde38b116100a2578063f96abf2e1161007c578063f96abf2e14610938578063fabc1cbc1461094b578063fbf1e2c11461095e578063fce36c7d1461097157600080fd5b8063f2fde38b1461090a578063f698da251461091d578063f8cd84481461092557600080fd5b8063de02e503116100de578063de02e503146108aa578063e221b245146108bd578063e810ce21146108d0578063ea4d3c9b146108e357600080fd5b8063c46db60614610842578063d11e9ae514610870578063d4540a551461089757600080fd5b80639104c31911610171578063a0169ddd1161014b578063a0169ddd146107d5578063bb7e451f146107e8578063bf21a8aa14610808578063c336f19d1461082f57600080fd5b80639104c3191461078b5780639be3d4e4146107a65780639d45c281146107ae57600080fd5b8063863cb9a9116101ad578063863cb9a914610729578063865c69531461073c578063886f1195146107675780638da5cb5b1461077a57600080fd5b8063715018a6146106e75780637adace91146106ef5780637b8f8b051461072157600080fd5b806339b70e38116102ad57806358baaa3e1161024b5780635c975abb116102255780635c975abb146106775780635e9d83481461067f5780636b3aa72e146106925780636d21117e146106b957600080fd5b806358baaa3e14610639578063595c6a671461064c5780635ac86ab71461065457600080fd5b80633ccc861d116102875780633ccc861d146105e95780633efe1db6146105fc5780634d18cc351461060f5780634d7a80d41461062657600080fd5b806339b70e38146105985780633a8c0786146105bf5780633c8fcf7c146105d657600080fd5b8063136439dd1161031a5780632c9c60cf116102f45780632c9c60cf146105245780633486e32e1461053757806336af41fa1461055e57806337838ed01461057157600080fd5b8063136439dd146104af578063149bc872146104c25780632b9f64a4146104e357600080fd5b80630e9a53cf116103565780630e9a53cf146104185780630eb383451461046057806310d67a2f14610475578063131433b41461048857600080fd5b806218572c1461037c57806304a0c502146103b4578063092db007146103f0575b600080fd5b61039f61038a366004613f70565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103ab565b60cb5461040590600160e01b900461ffff1681565b60405161ffff90911681526020016103ab565b610420610984565b604080518251815260208084015163ffffffff908116918301919091528383015116918101919091526060918201511515918101919091526080016103ab565b61047361046e366004613f9b565b610a63565b005b610473610483366004613f70565b610ae5565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736104bd366004613fd4565b610ba1565b6104d56104d0366004614005565b610ce0565b6040519081526020016103ab565b61050c6104f1366004613f70565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103ab565b61047361053236600461406d565b610d56565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61047361056c36600461406d565b61109e565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b60cb546103db90600160a01b900463ffffffff1681565b6103db6105e43660046140d5565b611336565b6104736105f736600461412c565b6115c4565b61047361060a366004614187565b611986565b60cb546103db90600160c01b900463ffffffff1681565b6104056106343660046141b3565b611c57565b6104736106473660046141f0565b611e06565b610473611e17565b61039f61066236600461420b565b606654600160ff9092169190911b9081161490565b6066546104d5565b61039f61068d36600461422e565b611ede565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b61039f6106c7366004614263565b60cf60209081526000928352604080842090915290825290205460ff1681565b610473611f6b565b6107026106fd36600461428f565b611f7f565b6040805161ffff909316835263ffffffff9091166020830152016103ab565b60ca546104d5565b610473610737366004613f70565b611fe7565b6104d561074a3660046142ef565b60cd60209081526000928352604080842090915290825290205481565b60655461050c906001600160a01b031681565b6033546001600160a01b031661050c565b61050c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610420611ff8565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736107e3366004613f70565b612096565b6104d56107f6366004613f70565b60ce6020526000908152604090205481565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104d561083d3660046141b3565b6120f5565b61039f610850366004614263565b60d060209081526000928352604080842090915290825290205460ff1681565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736108a536600461431d565b6121a8565b6104206108b8366004613fd4565b6122f0565b6104736108cb366004614390565b612382565b6103db6108de366004613fd4565b612393565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b610473610918366004613f70565b61246e565b6104d56124e4565b6104d5610933366004614005565b612522565b6104736109463660046141f0565b612533565b610473610959366004613fd4565b612769565b60cb5461050c906001600160a01b031681565b61047361097f36600461406d565b6128c5565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b8015610a5f57600060ca6109c16001846143c1565b815481106109d1576109d16143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610a415750806040015163ffffffff164210155b15610a4c5792915050565b5080610a57816143ee565b9150506109ac565b5090565b610a6b612a42565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5c9190614405565b6001600160a01b0316336001600160a01b031614610b955760405162461bcd60e51b8152600401610b8c90614422565b60405180910390fd5b610b9e81612a9c565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d919061446c565b610c295760405162461bcd60e51b8152600401610b8c90614489565b60665481811614610ca25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610cf06020840184613f70565b8360200135604051602001610d399392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460049060109081161415610d7f5760405162461bcd60e51b8152600401610b8c906144d1565b60026097541415610da25760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110610dc557610dc56143d8565b9050602002810190610dd7919061453f565b33600081815260ce60209081526040808320549051949550939192610e0292909185918791016146fc565b6040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166384d76f7b33856020016020810190610e5d91906141f0565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff166024820152604401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed0919061446c565b610f4c5760405162461bcd60e51b815260206004820152604160248201527f52657761726473436f6f7264696e61746f722e7265776172644f70657261746f60448201527f72536574466f7252616e67653a20696e76616c6964206f70657261746f7253656064820152601d60fa1b608482015260a401610b8c565b610fd8610f5c604085018561472c565b610f6c6080870160608801613f70565b6080870135610f8160c0890160a08a016141f0565b610f9160e08a0160c08b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260cf602090815260408083208484529091529020805460ff1916600190811790915561100b908390614776565b33600081815260ce602052604090819020929092559051829184917f29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b29061105390889061478e565b60405180910390a46110853330608086018035906110749060608901613f70565b6001600160a01b03169291906132ab565b836001019350505050610daa565b505060016097555050565b606654600190600290811614156110c75760405162461bcd60e51b8152600401610b8c906144d1565b33600090815260d1602052604090205460ff166111665760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a401610b8c565b600260975414156111895760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b8281101561109357368484838181106111ac576111ac6143d8565b90506020028101906111be91906147a1565b33600081815260ce602090815260408083205490519495509391926111e99290918591879101614836565b60408051601f198184030181529190528051602090910120905061128c611210848061472c565b6112206040870160208801613f70565b60408701356112356080890160608a016141f0565b61124560a08a0160808b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260d0602090815260408083208484529091529020805460ff191660019081179091556112bf908390614776565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf2704829061130790889061485d565b60405180910390a46113283330604086018035906110749060208901613f70565b836001019350505050611191565b600061271061ffff831611156113c25760405162461bcd60e51b815260206004820152604560248201527f52657761726473436f6f7264696e61746f722e7365744f70657261746f72436f60448201527f6d6d697373696f6e426970733a20636f6d6d697373696f6e4269707320746f6f606482015264040d0d2ced60db1b608482015260a401610b8c565b6113cf62093a8042614776565b33600090815260d360209081526040822092935090919082906113f490880188613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600086602001602081019061142991906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008560008111156114575761145761455f565b80156114655761146561455f565b8152602081019190915260400160002080549091508015806114c0575063ffffffff8316826114956001846143c1565b815481106114a5576114a56143d8565b60009182526020909120015462010000900463ffffffff1614155b15611523576040805180820190915261ffff808616825263ffffffff808616602080850191825286546001810188556000888152919091209451940180549151909216620100000265ffffffffffff199091169390921692909217179055611560565b83826115306001846143c1565b81548110611540576115406143d8565b6000918252602090912001805461ffff191661ffff929092169190911790555b8560405161156e9190614870565b6040518091039020336001600160a01b03167f811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba8787876040516115b3939291906148a8565b60405180910390a350509392505050565b606654600290600490811614156115ed5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156116105760405162461bcd60e51b8152600401610b8c90614508565b6002609755600060ca61162660208601866141f0565b63ffffffff168154811061163c5761163c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152905061169d848261331c565b60006116af6080860160608701613f70565b6001600160a01b03808216600090815260cc602052604090205491925016806116d55750805b336001600160a01b038216146117535760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d6572000000006064820152608401610b8c565b60005b61176360a08801886148d4565b9050811015611978573661177a60e089018961472c565b8381811061178a5761178a6143d8565b6001600160a01b038716600090815260cd6020908152604080832093029490940194509290915082906117bf90850185613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050808260200135116118795760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a401610b8c565b60006118898260208501356143c1565b6001600160a01b038716600090815260cd602090815260408220929350850180359291906118b79087613f70565b6001600160a01b03168152602080820192909252604001600020919091556118f9908a9083906118e990870187613f70565b6001600160a01b031691906135ed565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061193d6020890189613f70565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050806119719061491e565b9050611756565b505060016097555050505050565b606654600390600890811614156119af5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146119d95760405162461bcd60e51b8152600401610b8c90614939565b60cb5463ffffffff600160c01b909104811690831611611a755760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a401610b8c565b428263ffffffff1610611b0e5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a401610b8c565b60ca5460cb54600090611b2e90600160a01b900463ffffffff164261498d565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60cb546001600160a01b038416600090815260d36020908152604082209192600160e01b900461ffff169183918290611c9290880188613f70565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866020016020810190611cc791906141f0565b63ffffffff1663ffffffff1681526020019081526020016000206000856000811115611cf557611cf561455f565b8015611d0357611d0361455f565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611d77576000848152602090819020604080518082019091529084015461ffff8116825262010000900463ffffffff1681830152825260019092019101611d31565b5050825192935050505b8015611df95763ffffffff421682611d9a6001846143c1565b81518110611daa57611daa6143d8565b60200260200101516020015163ffffffff1611611df05781611dcd6001836143c1565b81518110611ddd57611ddd6143d8565b6020026020010151600001519250611df9565b60001901611d81565b50909150505b9392505050565b611e0e612a42565b610b9e8161361d565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e83919061446c565b611e9f5760405162461bcd60e51b8152600401610b8c90614489565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000611f638260ca611ef360208301836141f0565b63ffffffff1681548110611f0957611f096143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015261331c565b506001919050565b611f73612a42565b611f7d600061368e565b565b60d36020528460005260406000206020528360005260406000206020528260005260406000206020528160005260406000208181548110611fbf57600080fd5b60009182526020909120015461ffff8116955062010000900463ffffffff1693508592505050565b611fef612a42565b610b9e816136e0565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461202c906001906143c1565b8154811061203c5761203c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b6001600160a01b038316600090815260d360209081526040822090829061211e90860186613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600084602001602081019061215391906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008360008111156121815761218161455f565b801561218f5761218f61455f565b8152602081019190915260400160002054949350505050565b600054610100900460ff16158080156121c85750600054600160ff909116105b806121e25750303b1580156121e2575060005460ff166001145b6122455760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b8c565b6000805460ff191660011790558015612268576000805461ff0019166101001790555b61227061373c565b60c95561227d86866137d3565b6122868761368e565b61228f846136e0565b6122988361361d565b6122a1826138bd565b80156122e7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca8281548110612327576123276143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b61238a612a42565b610b9e816138bd565b60ca546000905b63ffffffff8116156123ff578260ca6123b46001846149b5565b63ffffffff16815481106123ca576123ca6143d8565b90600052602060002090600202016000015414156123ed57611dff6001826149b5565b806123f7816149da565b91505061239a565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e640000000000000000006064820152608401610b8c565b612476612a42565b6001600160a01b0381166124db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8c565b610b9e8161368e565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612515575060c95490565b61251d61373c565b905090565b60006001610cf06020840184613f70565b6066546003906008908116141561255c5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146125865760405162461bcd60e51b8152600401610b8c90614939565b60ca5463ffffffff8316106125f75760405162461bcd60e51b815260206004820152603160248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152700d2dcecc2d8d2c840e4dedee892dcc8caf607b1b6064820152608401610b8c565b600060ca8363ffffffff1681548110612612576126126143d8565b906000526020600020906002020190508060010160089054906101000a900460ff161561269f5760405162461bcd60e51b815260206004820152603560248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152741c9bdbdd08185b1c9958591e48191a5cd8589b1959605a1b6064820152608401610b8c565b6001810154600160201b900463ffffffff16421061271e5760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152751c9bdbdd08185b1c9958591e481858dd1a5d985d195960521b6064820152608401610b8c565b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190614405565b6001600160a01b0316336001600160a01b0316146128105760405162461bcd60e51b8152600401610b8c90614422565b60665419811960665419161461288e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610cd5565b606654600090600190811614156128ee5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156129115760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110612934576129346143d8565b905060200281019061294691906147a1565b33600081815260ce602090815260408083205490519495509391926129719290918591879101614836565b60408051601f1981840301815291905280516020909101209050612998611210848061472c565b33600090815260cf602090815260408083208484529091529020805460ff191660019081179091556129cb908390614776565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190612a1390889061485d565b60405180910390a4612a343330604086018035906110749060208901613f70565b836001019350505050612919565b6033546001600160a01b03163314611f7d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b8c565b6001600160a01b038116612b2a5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b8c565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b86612bf6576040805162461bcd60e51b8152602060048201526024810191909152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206e6f2073747261746567696573207365746064820152608401610b8c565b60008511612c645760405162461bcd60e51b81526020600482015260416024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a401610b8c565b6f4b3b4ca85a86c47a098a223fffffffff851115612cd85760405162461bcd60e51b815260206004820152603f6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c61726765006064820152608401610b8c565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168363ffffffff161115612d855760405162461bcd60e51b81526020600482015260546024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a401610b8c565b612daf7f000000000000000000000000000000000000000000000000000000000000000084614a10565b63ffffffff1615612e4f5760405162461bcd60e51b815260206004820152606a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c401610b8c565b612e797f000000000000000000000000000000000000000000000000000000000000000085614a10565b63ffffffff1615612f1f5760405162461bcd60e51b81526020600482015260706024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c401610b8c565b8363ffffffff168263ffffffff1642612f3891906143c1565b11158015612f5257508363ffffffff168163ffffffff1611155b612fcc5760405162461bcd60e51b81526020600482015260516024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a401610b8c565b612ffc63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001642614776565b8463ffffffff1611156130815760405162461bcd60e51b81526020600482015260536024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a401610b8c565b6000805b8881101561329f5760008a8a838181106130a1576130a16143d8565b6130b79260206040909202019081019150613f70565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015613122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613146919061446c565b8061316d57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b6131e05760405162461bcd60e51b815260206004820152604a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a401610b8c565b806001600160a01b0316836001600160a01b03161061328d5760405162461bcd60e51b81526020600482015260696024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c401610b8c565b91506132988161491e565b9050613085565b50505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526133169085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613928565b50505050565b8060600151156133755760405162461bcd60e51b81526020600482015260306024820152600080516020614b1483398151915260448201526f1c9bdbdd081a5cc8191a5cd8589b195960821b6064820152608401610b8c565b806040015163ffffffff164210156133dc5760405162461bcd60e51b81526020600482015260366024820152600080516020614b148339815191526044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b6064820152608401610b8c565b6133e960c08301836148d4565b90506133f860a08401846148d4565b9050146134705760405162461bcd60e51b815260206004820152604c6024820152600080516020614b1483398151915260448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a401610b8c565b61347d60e083018361472c565b905061348c60c08401846148d4565b9050146135025760405162461bcd60e51b815260206004820152604a6024820152600080516020614b1483398151915260448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610b8c565b805161352e9061351860408501602086016141f0565b6135256040860186614a33565b866060016139fa565b60005b61353e60a08401846148d4565b90508110156135e8576135d8608084013561355c60a08601866148d4565b8481811061356c5761356c6143d8565b905060200201602081019061358191906141f0565b61358e60c08701876148d4565b8581811061359e5761359e6143d8565b90506020028101906135b09190614a33565b6135bd60e089018961472c565b878181106135cd576135cd6143d8565b905060400201613b6e565b6135e18161491e565b9050613531565b505050565b6040516001600160a01b0383166024820152604481018290526135e890849063a9059cbb60e01b906064016132df565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156137f457506001600160a01b03821615155b6138765760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26138b982612a9c565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061397d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613cbf9092919063ffffffff16565b8051909150156135e8578080602001905181019061399b919061446c565b6135e85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b8c565b613a05602083614a7a565b6001901b8463ffffffff1610613a8f5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a401610b8c565b6000613a9a82610ce0565b9050613ae584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a401610b8c565b505050505050565b613b79602083614a7a565b6001901b8463ffffffff1610613bf75760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e646578000000006064820152608401610b8c565b6000613c0282612522565b9050613c4d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f66006064820152608401610b8c565b6060613cce8484600085613cee565b949350505050565b600083613ce4868585613e1f565b1495945050505050565b606082471015613d4f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b8c565b6001600160a01b0385163b613da65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b8c565b600080866001600160a01b03168587604051613dc29190614aba565b60006040518083038185875af1925050503d8060008114613dff576040519150601f19603f3d011682016040523d82523d6000602084013e613e04565b606091505b5091509150613e14828286613f22565b979650505050505050565b600060208451613e2f9190614acc565b15613eb65760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610b8c565b8260205b85518111613f1957613ecd600285614acc565b613eee57816000528086015160205260406000209150600284049350613f07565b8086015160005281602052604060002091506002840493505b613f12602082614776565b9050613eba565b50949350505050565b60608315613f31575081611dff565b825115613f415782518084602001fd5b8160405162461bcd60e51b8152600401610b8c9190614ae0565b6001600160a01b0381168114610b9e57600080fd5b600060208284031215613f8257600080fd5b8135611dff81613f5b565b8015158114610b9e57600080fd5b60008060408385031215613fae57600080fd5b8235613fb981613f5b565b91506020830135613fc981613f8d565b809150509250929050565b600060208284031215613fe657600080fd5b5035919050565b600060408284031215613fff57600080fd5b50919050565b60006040828403121561401757600080fd5b611dff8383613fed565b60008083601f84011261403357600080fd5b50813567ffffffffffffffff81111561404b57600080fd5b6020830191508360208260051b850101111561406657600080fd5b9250929050565b6000806020838503121561408057600080fd5b823567ffffffffffffffff81111561409757600080fd5b6140a385828601614021565b90969095509350505050565b8035600181106140be57600080fd5b919050565b803561ffff811681146140be57600080fd5b6000806000608084860312156140ea57600080fd5b6140f48585613fed565b9250614102604085016140af565b9150614110606085016140c3565b90509250925092565b60006101008284031215613fff57600080fd5b6000806040838503121561413f57600080fd5b823567ffffffffffffffff81111561415657600080fd5b61416285828601614119565b9250506020830135613fc981613f5b565b803563ffffffff811681146140be57600080fd5b6000806040838503121561419a57600080fd5b823591506141aa60208401614173565b90509250929050565b6000806000608084860312156141c857600080fd5b83356141d381613f5b565b92506141e28560208601613fed565b9150614110606085016140af565b60006020828403121561420257600080fd5b611dff82614173565b60006020828403121561421d57600080fd5b813560ff81168114611dff57600080fd5b60006020828403121561424057600080fd5b813567ffffffffffffffff81111561425757600080fd5b613cce84828501614119565b6000806040838503121561427657600080fd5b823561428181613f5b565b946020939093013593505050565b600080600080600060a086880312156142a757600080fd5b85356142b281613f5b565b945060208601356142c281613f5b565b93506142d060408701614173565b92506142de606087016140af565b949793965091946080013592915050565b6000806040838503121561430257600080fd5b823561430d81613f5b565b91506020830135613fc981613f5b565b60008060008060008060c0878903121561433657600080fd5b863561434181613f5b565b9550602087013561435181613f5b565b945060408701359350606087013561436881613f5b565b925061437660808801614173565b915061438460a088016140c3565b90509295509295509295565b6000602082840312156143a257600080fd5b611dff826140c3565b634e487b7160e01b600052601160045260246000fd5b6000828210156143d3576143d36143ab565b500390565b634e487b7160e01b600052603260045260246000fd5b6000816143fd576143fd6143ab565b506000190190565b60006020828403121561441757600080fd5b8151611dff81613f5b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561447e57600080fd5b8151611dff81613f8d565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000823560de1983360301811261455557600080fd5b9190910192915050565b634e487b7160e01b600052602160045260246000fd5b6001811061459357634e487b7160e01b600052602160045260246000fd5b9052565b6000808335601e198436030181126145ae57600080fd5b830160208101925035905067ffffffffffffffff8111156145ce57600080fd5b8060061b360383131561406657600080fd5b818352600060208085019450826000805b8681101561464557823561460481613f5b565b6001600160a01b03168852828401356bffffffffffffffffffffffff811680821461462d578384fd5b898601525060409788019792909201916001016145f1565b50959695505050505050565b6146638261465e836140af565b614575565b600061467160208301614173565b63ffffffff808216602086015261468b6040850185614597565b925060e060408701526146a260e0870184836145e0565b92505060608401356146b381613f5b565b6001600160a01b0316606086015260808481013590860152806146d860a08601614173565b1660a0860152806146eb60c08601614173565b1660c0860152508091505092915050565b60018060a01b03841681528260208201526060604082015260006147236060830184614651565b95945050505050565b6000808335601e1984360301811261474357600080fd5b83018035915067ffffffffffffffff82111561475e57600080fd5b6020019150600681901b360382131561406657600080fd5b60008219821115614789576147896143ab565b500190565b602081526000611dff6020830184614651565b60008235609e1983360301811261455557600080fd5b60006147c38283614597565b60a085526147d560a0860182846145e0565b91505060208301356147e681613f5b565b6001600160a01b031660208501526040838101359085015261480a60608401614173565b63ffffffff80821660608701528061482460808701614173565b16608087015250508091505092915050565b60018060a01b038416815282602082015260606040820152600061472360608301846147b7565b602081526000611dff60208301846147b7565b6000823561487d81613f5b565b6001600160a01b0316825263ffffffff61489960208501614173565b16602083015250604001919050565b606081016148b68286614575565b61ffff8416602083015263ffffffff83166040830152949350505050565b6000808335601e198436030181126148eb57600080fd5b83018035915067ffffffffffffffff82111561490657600080fd5b6020019150600581901b360382131561406657600080fd5b6000600019821415614932576149326143ab565b5060010190565b60208082526034908201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6040820152733a103a3432903932bbb0b93239aab83230ba32b960611b606082015260800190565b600063ffffffff8083168185168083038211156149ac576149ac6143ab565b01949350505050565b600063ffffffff838116908316818110156149d2576149d26143ab565b039392505050565b600063ffffffff8216806149f0576149f06143ab565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680614a2757614a276149fa565b92169190910692915050565b6000808335601e19843603018112614a4a57600080fd5b83018035915067ffffffffffffffff821115614a6557600080fd5b60200191503681900382131561406657600080fd5b600082614a8957614a896149fa565b500490565b60005b83811015614aa9578181015183820152602001614a91565b838111156133165750506000910152565b60008251614555818460208701614a8e565b600082614adb57614adb6149fa565b500690565b6020815260008251806020840152614aff816040850160208701614a8e565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2052657761726473436f6f7264696e61746f722e5f76616c696461746552657761a26469706673582212202479700bc3c550c6876cd1f99c7bb4199e695b1614b01756e7bfe7285d74b78864736f6c634300080c0033", } // RewardsCoordinatorABI is the input ABI used to generate the binding from. @@ -90,7 +107,7 @@ var RewardsCoordinatorABI = RewardsCoordinatorMetaData.ABI var RewardsCoordinatorBin = RewardsCoordinatorMetaData.Bin // DeployRewardsCoordinator deploys a new Ethereum contract, binding an instance of RewardsCoordinator to it. -func DeployRewardsCoordinator(auth *bind.TransactOpts, backend bind.ContractBackend, _delegationManager common.Address, _strategyManager common.Address, _CALCULATION_INTERVAL_SECONDS uint32, _MAX_REWARDS_DURATION uint32, _MAX_RETROACTIVE_LENGTH uint32, _MAX_FUTURE_LENGTH uint32, __GENESIS_REWARDS_TIMESTAMP uint32) (common.Address, *types.Transaction, *RewardsCoordinator, error) { +func DeployRewardsCoordinator(auth *bind.TransactOpts, backend bind.ContractBackend, _delegationManager common.Address, _strategyManager common.Address, _avsDirectory common.Address, _CALCULATION_INTERVAL_SECONDS uint32, _MAX_REWARDS_DURATION uint32, _MAX_RETROACTIVE_LENGTH uint32, _MAX_FUTURE_LENGTH uint32, _GENESIS_REWARDS_TIMESTAMP uint32, _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP uint32, _OPERATOR_SET_MAX_RETROACTIVE_LENGTH uint32) (common.Address, *types.Transaction, *RewardsCoordinator, error) { parsed, err := RewardsCoordinatorMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -99,7 +116,7 @@ func DeployRewardsCoordinator(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(RewardsCoordinatorBin), backend, _delegationManager, _strategyManager, _CALCULATION_INTERVAL_SECONDS, _MAX_REWARDS_DURATION, _MAX_RETROACTIVE_LENGTH, _MAX_FUTURE_LENGTH, __GENESIS_REWARDS_TIMESTAMP) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RewardsCoordinatorBin), backend, _delegationManager, _strategyManager, _avsDirectory, _CALCULATION_INTERVAL_SECONDS, _MAX_REWARDS_DURATION, _MAX_RETROACTIVE_LENGTH, _MAX_FUTURE_LENGTH, _GENESIS_REWARDS_TIMESTAMP, _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, _OPERATOR_SET_MAX_RETROACTIVE_LENGTH) if err != nil { return common.Address{}, nil, nil, err } @@ -403,6 +420,68 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) MAXREWARDSDURATION() return _RewardsCoordinator.Contract.MAXREWARDSDURATION(&_RewardsCoordinator.CallOpts) } +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorCaller) OPERATORSETGENESISREWARDSTIMESTAMP(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _RewardsCoordinator.contract.Call(opts, &out, "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { + return _RewardsCoordinator.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinator.CallOpts) +} + +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { + return _RewardsCoordinator.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinator.CallOpts) +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorCaller) OPERATORSETMAXRETROACTIVELENGTH(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _RewardsCoordinator.contract.Call(opts, &out, "OPERATOR_SET_MAX_RETROACTIVE_LENGTH") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { + return _RewardsCoordinator.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinator.CallOpts) +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { + return _RewardsCoordinator.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinator.CallOpts) +} + // ActivationDelay is a free data retrieval call binding the contract method 0x3a8c0786. // // Solidity: function activationDelay() view returns(uint32) @@ -434,6 +513,37 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) ActivationDelay() (u return _RewardsCoordinator.Contract.ActivationDelay(&_RewardsCoordinator.CallOpts) } +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinator *RewardsCoordinatorCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RewardsCoordinator.contract.Call(opts, &out, "avsDirectory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinator *RewardsCoordinatorSession) AvsDirectory() (common.Address, error) { + return _RewardsCoordinator.Contract.AvsDirectory(&_RewardsCoordinator.CallOpts) +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinator *RewardsCoordinatorCallerSession) AvsDirectory() (common.Address, error) { + return _RewardsCoordinator.Contract.AvsDirectory(&_RewardsCoordinator.CallOpts) +} + // BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. // // Solidity: function beaconChainETHStrategy() view returns(address) @@ -837,6 +947,68 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) GetDistributionRoots return _RewardsCoordinator.Contract.GetDistributionRootsLength(&_RewardsCoordinator.CallOpts) } +// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. +// +// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) +func (_RewardsCoordinator *RewardsCoordinatorCaller) GetOperatorCommissionBips(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { + var out []interface{} + err := _RewardsCoordinator.contract.Call(opts, &out, "getOperatorCommissionBips", operator, operatorSet, rewardType) + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. +// +// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) +func (_RewardsCoordinator *RewardsCoordinatorSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { + return _RewardsCoordinator.Contract.GetOperatorCommissionBips(&_RewardsCoordinator.CallOpts, operator, operatorSet, rewardType) +} + +// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. +// +// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) +func (_RewardsCoordinator *RewardsCoordinatorCallerSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { + return _RewardsCoordinator.Contract.GetOperatorCommissionBips(&_RewardsCoordinator.CallOpts, operator, operatorSet, rewardType) +} + +// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. +// +// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) +func (_RewardsCoordinator *RewardsCoordinatorCaller) GetOperatorCommissionUpdateHistoryLength(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { + var out []interface{} + err := _RewardsCoordinator.contract.Call(opts, &out, "getOperatorCommissionUpdateHistoryLength", operator, operatorSet, rewardType) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. +// +// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) +func (_RewardsCoordinator *RewardsCoordinatorSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { + return _RewardsCoordinator.Contract.GetOperatorCommissionUpdateHistoryLength(&_RewardsCoordinator.CallOpts, operator, operatorSet, rewardType) +} + +// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. +// +// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) +func (_RewardsCoordinator *RewardsCoordinatorCallerSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { + return _RewardsCoordinator.Contract.GetOperatorCommissionUpdateHistoryLength(&_RewardsCoordinator.CallOpts, operator, operatorSet, rewardType) +} + // GetRootIndexFromHash is a free data retrieval call binding the contract method 0xe810ce21. // // Solidity: function getRootIndexFromHash(bytes32 rootHash) view returns(uint32) @@ -961,37 +1133,6 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) IsRewardsForAllSubmi return _RewardsCoordinator.Contract.IsRewardsForAllSubmitter(&_RewardsCoordinator.CallOpts, arg0) } -// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. -// -// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) -func (_RewardsCoordinator *RewardsCoordinatorCaller) IsRewardsSubmissionForAllEarnersHash(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { - var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "isRewardsSubmissionForAllEarnersHash", arg0, arg1) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. -// -// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) -func (_RewardsCoordinator *RewardsCoordinatorSession) IsRewardsSubmissionForAllEarnersHash(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _RewardsCoordinator.Contract.IsRewardsSubmissionForAllEarnersHash(&_RewardsCoordinator.CallOpts, arg0, arg1) -} - -// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. -// -// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) IsRewardsSubmissionForAllEarnersHash(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _RewardsCoordinator.Contract.IsRewardsSubmissionForAllEarnersHash(&_RewardsCoordinator.CallOpts, arg0, arg1) -} - // IsRewardsSubmissionForAllHash is a free data retrieval call binding the contract method 0xc46db606. // // Solidity: function isRewardsSubmissionForAllHash(address , bytes32 ) view returns(bool) @@ -1023,35 +1164,49 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) IsRewardsSubmissionF return _RewardsCoordinator.Contract.IsRewardsSubmissionForAllHash(&_RewardsCoordinator.CallOpts, arg0, arg1) } -// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. +// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. // -// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) -func (_RewardsCoordinator *RewardsCoordinatorCaller) OperatorCommissionBips(opts *bind.CallOpts, operator common.Address, avs common.Address) (uint16, error) { +// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) +func (_RewardsCoordinator *RewardsCoordinatorCaller) OperatorCommissionUpdates(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { + CommissionBips uint16 + EffectTimestamp uint32 +}, error) { var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "operatorCommissionBips", operator, avs) + err := _RewardsCoordinator.contract.Call(opts, &out, "operatorCommissionUpdates", arg0, arg1, arg2, arg3, arg4) + outstruct := new(struct { + CommissionBips uint16 + EffectTimestamp uint32 + }) if err != nil { - return *new(uint16), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + outstruct.CommissionBips = *abi.ConvertType(out[0], new(uint16)).(*uint16) + outstruct.EffectTimestamp = *abi.ConvertType(out[1], new(uint32)).(*uint32) - return out0, err + return *outstruct, err } -// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. +// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. // -// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) -func (_RewardsCoordinator *RewardsCoordinatorSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { - return _RewardsCoordinator.Contract.OperatorCommissionBips(&_RewardsCoordinator.CallOpts, operator, avs) +// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) +func (_RewardsCoordinator *RewardsCoordinatorSession) OperatorCommissionUpdates(arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { + CommissionBips uint16 + EffectTimestamp uint32 +}, error) { + return _RewardsCoordinator.Contract.OperatorCommissionUpdates(&_RewardsCoordinator.CallOpts, arg0, arg1, arg2, arg3, arg4) } -// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. +// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. // -// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { - return _RewardsCoordinator.Contract.OperatorCommissionBips(&_RewardsCoordinator.CallOpts, operator, avs) +// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) +func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OperatorCommissionUpdates(arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { + CommissionBips uint16 + EffectTimestamp uint32 +}, error) { + return _RewardsCoordinator.Contract.OperatorCommissionUpdates(&_RewardsCoordinator.CallOpts, arg0, arg1, arg2, arg3, arg4) } // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. @@ -1292,27 +1447,6 @@ func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) CreateAVSRewards return _RewardsCoordinator.Contract.CreateAVSRewardsSubmission(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) } -// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. -// -// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinator *RewardsCoordinatorTransactor) CreateRewardsForAllEarners(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinator.contract.Transact(opts, "createRewardsForAllEarners", rewardsSubmissions) -} - -// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. -// -// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinator *RewardsCoordinatorSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinator.Contract.CreateRewardsForAllEarners(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) -} - -// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. -// -// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinator.Contract.CreateRewardsForAllEarners(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) -} - // CreateRewardsForAllSubmission is a paid mutator transaction binding the contract method 0x36af41fa. // // Solidity: function createRewardsForAllSubmission(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() @@ -1460,6 +1594,27 @@ func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) RenounceOwnershi return _RewardsCoordinator.Contract.RenounceOwnership(&_RewardsCoordinator.TransactOpts) } +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinator *RewardsCoordinatorTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinator.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinator *RewardsCoordinatorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinator.Contract.RewardOperatorSetForRange(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinator.Contract.RewardOperatorSetForRange(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) +} + // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -1523,6 +1678,27 @@ func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) SetGlobalOperato return _RewardsCoordinator.Contract.SetGlobalOperatorCommission(&_RewardsCoordinator.TransactOpts, _globalCommissionBips) } +// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. +// +// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32 effectTimestamp) +func (_RewardsCoordinator *RewardsCoordinatorTransactor) SetOperatorCommissionBips(opts *bind.TransactOpts, operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { + return _RewardsCoordinator.contract.Transact(opts, "setOperatorCommissionBips", operatorSet, rewardType, commissionBips) +} + +// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. +// +// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32 effectTimestamp) +func (_RewardsCoordinator *RewardsCoordinatorSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { + return _RewardsCoordinator.Contract.SetOperatorCommissionBips(&_RewardsCoordinator.TransactOpts, operatorSet, rewardType, commissionBips) +} + +// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. +// +// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32 effectTimestamp) +func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { + return _RewardsCoordinator.Contract.SetOperatorCommissionBips(&_RewardsCoordinator.TransactOpts, operatorSet, rewardType, commissionBips) +} + // SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. // // Solidity: function setPauserRegistry(address newPauserRegistry) returns() @@ -2685,9 +2861,9 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseInitialized(log type return event, nil } -// RewardsCoordinatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the RewardsCoordinator contract. -type RewardsCoordinatorOwnershipTransferredIterator struct { - Event *RewardsCoordinatorOwnershipTransferred // Event containing the contract specifics and raw log +// RewardsCoordinatorOperatorCommissionUpdatedIterator is returned from FilterOperatorCommissionUpdated and is used to iterate over the raw logs and unpacked data for OperatorCommissionUpdated events raised by the RewardsCoordinator contract. +type RewardsCoordinatorOperatorCommissionUpdatedIterator struct { + Event *RewardsCoordinatorOperatorCommissionUpdated // 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 @@ -2701,7 +2877,7 @@ type RewardsCoordinatorOwnershipTransferredIterator 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 *RewardsCoordinatorOwnershipTransferredIterator) Next() bool { +func (it *RewardsCoordinatorOperatorCommissionUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2710,7 +2886,7 @@ func (it *RewardsCoordinatorOwnershipTransferredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorOwnershipTransferred) + it.Event = new(RewardsCoordinatorOperatorCommissionUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2725,7 +2901,7 @@ func (it *RewardsCoordinatorOwnershipTransferredIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorOwnershipTransferred) + it.Event = new(RewardsCoordinatorOperatorCommissionUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2741,60 +2917,63 @@ func (it *RewardsCoordinatorOwnershipTransferredIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorOwnershipTransferredIterator) Error() error { +func (it *RewardsCoordinatorOperatorCommissionUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorOwnershipTransferredIterator) Close() error { +func (it *RewardsCoordinatorOperatorCommissionUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorOwnershipTransferred represents a OwnershipTransferred event raised by the RewardsCoordinator contract. -type RewardsCoordinatorOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos +// RewardsCoordinatorOperatorCommissionUpdated represents a OperatorCommissionUpdated event raised by the RewardsCoordinator contract. +type RewardsCoordinatorOperatorCommissionUpdated struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + RewardType uint8 + NewCommissionBips uint16 + EffectTimestamp uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// FilterOperatorCommissionUpdated is a free log retrieval operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*RewardsCoordinatorOwnershipTransferredIterator, error) { +// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterOperatorCommissionUpdated(opts *bind.FilterOpts, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (*RewardsCoordinatorOperatorCommissionUpdatedIterator, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) } - logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) if err != nil { return nil, err } - return &RewardsCoordinatorOwnershipTransferredIterator{contract: _RewardsCoordinator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil + return &RewardsCoordinatorOperatorCommissionUpdatedIterator{contract: _RewardsCoordinator.contract, event: "OperatorCommissionUpdated", logs: logs, sub: sub}, nil } -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// WatchOperatorCommissionUpdated is a free log subscription operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { +// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOperatorCommissionUpdated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorOperatorCommissionUpdated, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (event.Subscription, error) { - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) } - logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) if err != nil { return nil, err } @@ -2804,8 +2983,8 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOwnershipTransferred select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorOwnershipTransferred) - if err := _RewardsCoordinator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + event := new(RewardsCoordinatorOperatorCommissionUpdated) + if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorCommissionUpdated", log); err != nil { return err } event.Raw = log @@ -2826,21 +3005,21 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOwnershipTransferred }), nil } -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// ParseOperatorCommissionUpdated is a log parse operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. // -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOwnershipTransferred(log types.Log) (*RewardsCoordinatorOwnershipTransferred, error) { - event := new(RewardsCoordinatorOwnershipTransferred) - if err := _RewardsCoordinator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { +// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOperatorCommissionUpdated(log types.Log) (*RewardsCoordinatorOperatorCommissionUpdated, error) { + event := new(RewardsCoordinatorOperatorCommissionUpdated) + if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorCommissionUpdated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// RewardsCoordinatorPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the RewardsCoordinator contract. -type RewardsCoordinatorPausedIterator struct { - Event *RewardsCoordinatorPaused // Event containing the contract specifics and raw log +// RewardsCoordinatorOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the RewardsCoordinator contract. +type RewardsCoordinatorOperatorSetRewardCreatedIterator struct { + Event *RewardsCoordinatorOperatorSetRewardCreated // 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 @@ -2854,7 +3033,7 @@ type RewardsCoordinatorPausedIterator 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 *RewardsCoordinatorPausedIterator) Next() bool { +func (it *RewardsCoordinatorOperatorSetRewardCreatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2863,7 +3042,7 @@ func (it *RewardsCoordinatorPausedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorPaused) + it.Event = new(RewardsCoordinatorOperatorSetRewardCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2878,7 +3057,7 @@ func (it *RewardsCoordinatorPausedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorPaused) + it.Event = new(RewardsCoordinatorOperatorSetRewardCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2894,52 +3073,70 @@ func (it *RewardsCoordinatorPausedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorPausedIterator) Error() error { +func (it *RewardsCoordinatorOperatorSetRewardCreatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorPausedIterator) Close() error { +func (it *RewardsCoordinatorOperatorSetRewardCreatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorPaused represents a Paused event raised by the RewardsCoordinator contract. -type RewardsCoordinatorPaused struct { - Account common.Address - NewPausedStatus *big.Int - Raw types.Log // Blockchain specific contextual infos +// RewardsCoordinatorOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the RewardsCoordinator contract. +type RewardsCoordinatorOperatorSetRewardCreated struct { + Avs common.Address + SubmissionNonce *big.Int + RewardsSubmissionHash [32]byte + RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission + Raw types.Log // Blockchain specific contextual infos } -// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. // -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*RewardsCoordinatorPausedIterator, error) { +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorOperatorSetRewardCreatedIterator, error) { - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) } - logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "Paused", accountRule) + logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) if err != nil { return nil, err } - return &RewardsCoordinatorPausedIterator{contract: _RewardsCoordinator.contract, event: "Paused", logs: logs, sub: sub}, nil + return &RewardsCoordinatorOperatorSetRewardCreatedIterator{contract: _RewardsCoordinator.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil } -// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. // -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorPaused, account []common.Address) (event.Subscription, error) { +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) } - logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "Paused", accountRule) + logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) if err != nil { return nil, err } @@ -2949,8 +3146,8 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchPaused(opts *bind.Wa select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorPaused) - if err := _RewardsCoordinator.contract.UnpackLog(event, "Paused", log); err != nil { + event := new(RewardsCoordinatorOperatorSetRewardCreated) + if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { return err } event.Raw = log @@ -2971,12 +3168,310 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchPaused(opts *bind.Wa }), nil } -// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. // -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParsePaused(log types.Log) (*RewardsCoordinatorPaused, error) { - event := new(RewardsCoordinatorPaused) - if err := _RewardsCoordinator.contract.UnpackLog(event, "Paused", log); err != nil { +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOperatorSetRewardCreated(log types.Log) (*RewardsCoordinatorOperatorSetRewardCreated, error) { + event := new(RewardsCoordinatorOperatorSetRewardCreated) + if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// RewardsCoordinatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the RewardsCoordinator contract. +type RewardsCoordinatorOwnershipTransferredIterator struct { + Event *RewardsCoordinatorOwnershipTransferred // 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 *RewardsCoordinatorOwnershipTransferredIterator) 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(RewardsCoordinatorOwnershipTransferred) + 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(RewardsCoordinatorOwnershipTransferred) + 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 *RewardsCoordinatorOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RewardsCoordinatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RewardsCoordinatorOwnershipTransferred represents a OwnershipTransferred event raised by the RewardsCoordinator contract. +type RewardsCoordinatorOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*RewardsCoordinatorOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &RewardsCoordinatorOwnershipTransferredIterator{contract: _RewardsCoordinator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + 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(RewardsCoordinatorOwnershipTransferred) + if err := _RewardsCoordinator.contract.UnpackLog(event, "OwnershipTransferred", 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 +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOwnershipTransferred(log types.Log) (*RewardsCoordinatorOwnershipTransferred, error) { + event := new(RewardsCoordinatorOwnershipTransferred) + if err := _RewardsCoordinator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// RewardsCoordinatorPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the RewardsCoordinator contract. +type RewardsCoordinatorPausedIterator struct { + Event *RewardsCoordinatorPaused // 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 *RewardsCoordinatorPausedIterator) 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(RewardsCoordinatorPaused) + 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(RewardsCoordinatorPaused) + 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 *RewardsCoordinatorPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RewardsCoordinatorPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RewardsCoordinatorPaused represents a Paused event raised by the RewardsCoordinator contract. +type RewardsCoordinatorPaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*RewardsCoordinatorPausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "Paused", accountRule) + if err != nil { + return nil, err + } + return &RewardsCoordinatorPausedIterator{contract: _RewardsCoordinator.contract, event: "Paused", logs: logs, sub: sub}, nil +} + +// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorPaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "Paused", 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(RewardsCoordinatorPaused) + if err := _RewardsCoordinator.contract.UnpackLog(event, "Paused", 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 +} + +// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. +// +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParsePaused(log types.Log) (*RewardsCoordinatorPaused, error) { + event := new(RewardsCoordinatorPaused) + if err := _RewardsCoordinator.contract.UnpackLog(event, "Paused", log); err != nil { return nil, err } event.Raw = log @@ -3608,169 +4103,6 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseRewardsSubmissionFor return event, nil } -// RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator is returned from FilterRewardsSubmissionForAllEarnersCreated and is used to iterate over the raw logs and unpacked data for RewardsSubmissionForAllEarnersCreated events raised by the RewardsCoordinator contract. -type RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator struct { - Event *RewardsCoordinatorRewardsSubmissionForAllEarnersCreated // 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 *RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) 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(RewardsCoordinatorRewardsSubmissionForAllEarnersCreated) - 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(RewardsCoordinatorRewardsSubmissionForAllEarnersCreated) - 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 *RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RewardsCoordinatorRewardsSubmissionForAllEarnersCreated represents a RewardsSubmissionForAllEarnersCreated event raised by the RewardsCoordinator contract. -type RewardsCoordinatorRewardsSubmissionForAllEarnersCreated struct { - TokenHopper common.Address - SubmissionNonce *big.Int - RewardsSubmissionHash [32]byte - RewardsSubmission IRewardsCoordinatorRewardsSubmission - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRewardsSubmissionForAllEarnersCreated is a free log retrieval operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. -// -// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterRewardsSubmissionForAllEarnersCreated(opts *bind.FilterOpts, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator, error) { - - var tokenHopperRule []interface{} - for _, tokenHopperItem := range tokenHopper { - tokenHopperRule = append(tokenHopperRule, tokenHopperItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) - if err != nil { - return nil, err - } - return &RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator{contract: _RewardsCoordinator.contract, event: "RewardsSubmissionForAllEarnersCreated", logs: logs, sub: sub}, nil -} - -// WatchRewardsSubmissionForAllEarnersCreated is a free log subscription operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. -// -// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchRewardsSubmissionForAllEarnersCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorRewardsSubmissionForAllEarnersCreated, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { - - var tokenHopperRule []interface{} - for _, tokenHopperItem := range tokenHopper { - tokenHopperRule = append(tokenHopperRule, tokenHopperItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) - 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(RewardsCoordinatorRewardsSubmissionForAllEarnersCreated) - if err := _RewardsCoordinator.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", 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 -} - -// ParseRewardsSubmissionForAllEarnersCreated is a log parse operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. -// -// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseRewardsSubmissionForAllEarnersCreated(log types.Log) (*RewardsCoordinatorRewardsSubmissionForAllEarnersCreated, error) { - event := new(RewardsCoordinatorRewardsSubmissionForAllEarnersCreated) - if err := _RewardsCoordinator.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // RewardsCoordinatorRewardsUpdaterSetIterator is returned from FilterRewardsUpdaterSet and is used to iterate over the raw logs and unpacked data for RewardsUpdaterSet events raised by the RewardsCoordinator contract. type RewardsCoordinatorRewardsUpdaterSetIterator struct { Event *RewardsCoordinatorRewardsUpdaterSet // Event containing the contract specifics and raw log diff --git a/pkg/bindings/RewardsCoordinatorStorage/binding.go b/pkg/bindings/RewardsCoordinatorStorage/binding.go index 3e86fe60c..8df917060 100644 --- a/pkg/bindings/RewardsCoordinatorStorage/binding.go +++ b/pkg/bindings/RewardsCoordinatorStorage/binding.go @@ -29,6 +29,12 @@ var ( _ = abi.ConvertType ) +// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryOperatorSet struct { + Avs common.Address + OperatorSetId uint32 +} + // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorDistributionRoot struct { Root [32]byte @@ -43,6 +49,17 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } +// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. +type IRewardsCoordinatorOperatorSetRewardsSubmission struct { + RewardType uint8 + OperatorSetId uint32 + StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier + Token common.Address + Amount *big.Int + StartTimestamp uint32 + Duration uint32 +} + // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -77,7 +94,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf 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\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"AmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CommissionBipsExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsForAllSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyRewardsUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampNotMultipleOfCalculationIntervalSeconds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"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\":\"OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", } // RewardsCoordinatorStorageABI is the input ABI used to generate the binding from. @@ -381,6 +398,68 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) MAXREW return _RewardsCoordinatorStorage.Contract.MAXREWARDSDURATION(&_RewardsCoordinatorStorage.CallOpts) } +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OPERATORSETGENESISREWARDSTIMESTAMP(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { + return _RewardsCoordinatorStorage.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinatorStorage.CallOpts) +} + +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { + return _RewardsCoordinatorStorage.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinatorStorage.CallOpts) +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OPERATORSETMAXRETROACTIVELENGTH(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "OPERATOR_SET_MAX_RETROACTIVE_LENGTH") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { + return _RewardsCoordinatorStorage.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinatorStorage.CallOpts) +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { + return _RewardsCoordinatorStorage.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinatorStorage.CallOpts) +} + // ActivationDelay is a free data retrieval call binding the contract method 0x3a8c0786. // // Solidity: function activationDelay() view returns(uint32) @@ -412,6 +491,37 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) Activa return _RewardsCoordinatorStorage.Contract.ActivationDelay(&_RewardsCoordinatorStorage.CallOpts) } +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "avsDirectory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) AvsDirectory() (common.Address, error) { + return _RewardsCoordinatorStorage.Contract.AvsDirectory(&_RewardsCoordinatorStorage.CallOpts) +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) AvsDirectory() (common.Address, error) { + return _RewardsCoordinatorStorage.Contract.AvsDirectory(&_RewardsCoordinatorStorage.CallOpts) +} + // CalculateEarnerLeafHash is a free data retrieval call binding the contract method 0x149bc872. // // Solidity: function calculateEarnerLeafHash((address,bytes32) leaf) pure returns(bytes32) @@ -753,6 +863,68 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) GetDis return _RewardsCoordinatorStorage.Contract.GetDistributionRootsLength(&_RewardsCoordinatorStorage.CallOpts) } +// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. +// +// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) GetOperatorCommissionBips(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { + var out []interface{} + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "getOperatorCommissionBips", operator, operatorSet, rewardType) + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. +// +// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { + return _RewardsCoordinatorStorage.Contract.GetOperatorCommissionBips(&_RewardsCoordinatorStorage.CallOpts, operator, operatorSet, rewardType) +} + +// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. +// +// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { + return _RewardsCoordinatorStorage.Contract.GetOperatorCommissionBips(&_RewardsCoordinatorStorage.CallOpts, operator, operatorSet, rewardType) +} + +// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. +// +// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) GetOperatorCommissionUpdateHistoryLength(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { + var out []interface{} + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "getOperatorCommissionUpdateHistoryLength", operator, operatorSet, rewardType) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. +// +// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { + return _RewardsCoordinatorStorage.Contract.GetOperatorCommissionUpdateHistoryLength(&_RewardsCoordinatorStorage.CallOpts, operator, operatorSet, rewardType) +} + +// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. +// +// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { + return _RewardsCoordinatorStorage.Contract.GetOperatorCommissionUpdateHistoryLength(&_RewardsCoordinatorStorage.CallOpts, operator, operatorSet, rewardType) +} + // GetRootIndexFromHash is a free data retrieval call binding the contract method 0xe810ce21. // // Solidity: function getRootIndexFromHash(bytes32 rootHash) view returns(uint32) @@ -877,37 +1049,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) IsRewa return _RewardsCoordinatorStorage.Contract.IsRewardsForAllSubmitter(&_RewardsCoordinatorStorage.CallOpts, arg0) } -// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. -// -// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) IsRewardsSubmissionForAllEarnersHash(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { - var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "isRewardsSubmissionForAllEarnersHash", arg0, arg1) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. -// -// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) IsRewardsSubmissionForAllEarnersHash(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _RewardsCoordinatorStorage.Contract.IsRewardsSubmissionForAllEarnersHash(&_RewardsCoordinatorStorage.CallOpts, arg0, arg1) -} - -// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. -// -// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) IsRewardsSubmissionForAllEarnersHash(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _RewardsCoordinatorStorage.Contract.IsRewardsSubmissionForAllEarnersHash(&_RewardsCoordinatorStorage.CallOpts, arg0, arg1) -} - // IsRewardsSubmissionForAllHash is a free data retrieval call binding the contract method 0xc46db606. // // Solidity: function isRewardsSubmissionForAllHash(address , bytes32 ) view returns(bool) @@ -939,35 +1080,49 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) IsRewa return _RewardsCoordinatorStorage.Contract.IsRewardsSubmissionForAllHash(&_RewardsCoordinatorStorage.CallOpts, arg0, arg1) } -// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. +// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. // -// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OperatorCommissionBips(opts *bind.CallOpts, operator common.Address, avs common.Address) (uint16, error) { +// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OperatorCommissionUpdates(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { + CommissionBips uint16 + EffectTimestamp uint32 +}, error) { var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "operatorCommissionBips", operator, avs) + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "operatorCommissionUpdates", arg0, arg1, arg2, arg3, arg4) + outstruct := new(struct { + CommissionBips uint16 + EffectTimestamp uint32 + }) if err != nil { - return *new(uint16), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + outstruct.CommissionBips = *abi.ConvertType(out[0], new(uint16)).(*uint16) + outstruct.EffectTimestamp = *abi.ConvertType(out[1], new(uint32)).(*uint32) - return out0, err + return *outstruct, err } -// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. +// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. // -// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { - return _RewardsCoordinatorStorage.Contract.OperatorCommissionBips(&_RewardsCoordinatorStorage.CallOpts, operator, avs) +// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OperatorCommissionUpdates(arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { + CommissionBips uint16 + EffectTimestamp uint32 +}, error) { + return _RewardsCoordinatorStorage.Contract.OperatorCommissionUpdates(&_RewardsCoordinatorStorage.CallOpts, arg0, arg1, arg2, arg3, arg4) } -// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. +// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. // -// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { - return _RewardsCoordinatorStorage.Contract.OperatorCommissionBips(&_RewardsCoordinatorStorage.CallOpts, operator, avs) +// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OperatorCommissionUpdates(arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { + CommissionBips uint16 + EffectTimestamp uint32 +}, error) { + return _RewardsCoordinatorStorage.Contract.OperatorCommissionUpdates(&_RewardsCoordinatorStorage.CallOpts, arg0, arg1, arg2, arg3, arg4) } // RewardsUpdater is a free data retrieval call binding the contract method 0xfbf1e2c1. @@ -1084,27 +1239,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) Cr return _RewardsCoordinatorStorage.Contract.CreateAVSRewardsSubmission(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) } -// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. -// -// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactor) CreateRewardsForAllEarners(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.contract.Transact(opts, "createRewardsForAllEarners", rewardsSubmissions) -} - -// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. -// -// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.Contract.CreateRewardsForAllEarners(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) -} - -// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. -// -// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.Contract.CreateRewardsForAllEarners(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) -} - // CreateRewardsForAllSubmission is a paid mutator transaction binding the contract method 0x36af41fa. // // Solidity: function createRewardsForAllSubmission(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmission) returns() @@ -1168,6 +1302,27 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) Pr return _RewardsCoordinatorStorage.Contract.ProcessClaim(&_RewardsCoordinatorStorage.TransactOpts, claim, recipient) } +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.Contract.RewardOperatorSetForRange(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.Contract.RewardOperatorSetForRange(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) +} + // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -1231,6 +1386,27 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) Se return _RewardsCoordinatorStorage.Contract.SetGlobalOperatorCommission(&_RewardsCoordinatorStorage.TransactOpts, _globalCommissionBips) } +// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. +// +// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactor) SetOperatorCommissionBips(opts *bind.TransactOpts, operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.contract.Transact(opts, "setOperatorCommissionBips", operatorSet, rewardType, commissionBips) +} + +// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. +// +// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.Contract.SetOperatorCommissionBips(&_RewardsCoordinatorStorage.TransactOpts, operatorSet, rewardType, commissionBips) +} + +// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. +// +// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.Contract.SetOperatorCommissionBips(&_RewardsCoordinatorStorage.TransactOpts, operatorSet, rewardType, commissionBips) +} + // SetRewardsForAllSubmitter is a paid mutator transaction binding the contract method 0x0eb38345. // // Solidity: function setRewardsForAllSubmitter(address _submitter, bool _newValue) returns() @@ -2196,9 +2372,9 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseGlobal return event, nil } -// RewardsCoordinatorStorageRewardsClaimedIterator is returned from FilterRewardsClaimed and is used to iterate over the raw logs and unpacked data for RewardsClaimed events raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsClaimedIterator struct { - Event *RewardsCoordinatorStorageRewardsClaimed // Event containing the contract specifics and raw log +// RewardsCoordinatorStorageOperatorCommissionUpdatedIterator is returned from FilterOperatorCommissionUpdated and is used to iterate over the raw logs and unpacked data for OperatorCommissionUpdated events raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageOperatorCommissionUpdatedIterator struct { + Event *RewardsCoordinatorStorageOperatorCommissionUpdated // 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 @@ -2212,7 +2388,7 @@ type RewardsCoordinatorStorageRewardsClaimedIterator 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 *RewardsCoordinatorStorageRewardsClaimedIterator) Next() bool { +func (it *RewardsCoordinatorStorageOperatorCommissionUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2221,7 +2397,7 @@ func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsClaimed) + it.Event = new(RewardsCoordinatorStorageOperatorCommissionUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2236,7 +2412,7 @@ func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsClaimed) + it.Event = new(RewardsCoordinatorStorageOperatorCommissionUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2252,72 +2428,63 @@ func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Error() error { +func (it *RewardsCoordinatorStorageOperatorCommissionUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Close() error { +func (it *RewardsCoordinatorStorageOperatorCommissionUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorStorageRewardsClaimed represents a RewardsClaimed event raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsClaimed struct { - Root [32]byte - Earner common.Address - Claimer common.Address - Recipient common.Address - Token common.Address - ClaimedAmount *big.Int - Raw types.Log // Blockchain specific contextual infos +// RewardsCoordinatorStorageOperatorCommissionUpdated represents a OperatorCommissionUpdated event raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageOperatorCommissionUpdated struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + RewardType uint8 + NewCommissionBips uint16 + EffectTimestamp uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterRewardsClaimed is a free log retrieval operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. +// FilterOperatorCommissionUpdated is a free log retrieval operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. // -// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsClaimed(opts *bind.FilterOpts, earner []common.Address, claimer []common.Address, recipient []common.Address) (*RewardsCoordinatorStorageRewardsClaimedIterator, error) { +// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterOperatorCommissionUpdated(opts *bind.FilterOpts, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (*RewardsCoordinatorStorageOperatorCommissionUpdatedIterator, error) { - var earnerRule []interface{} - for _, earnerItem := range earner { - earnerRule = append(earnerRule, earnerItem) - } - var claimerRule []interface{} - for _, claimerItem := range claimer { - claimerRule = append(claimerRule, claimerItem) + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) } - var recipientRule []interface{} - for _, recipientItem := range recipient { - recipientRule = append(recipientRule, recipientItem) + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsClaimed", earnerRule, claimerRule, recipientRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) if err != nil { return nil, err } - return &RewardsCoordinatorStorageRewardsClaimedIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsClaimed", logs: logs, sub: sub}, nil + return &RewardsCoordinatorStorageOperatorCommissionUpdatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "OperatorCommissionUpdated", logs: logs, sub: sub}, nil } -// WatchRewardsClaimed is a free log subscription operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. +// WatchOperatorCommissionUpdated is a free log subscription operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. // -// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsClaimed(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsClaimed, earner []common.Address, claimer []common.Address, recipient []common.Address) (event.Subscription, error) { +// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchOperatorCommissionUpdated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageOperatorCommissionUpdated, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (event.Subscription, error) { - var earnerRule []interface{} - for _, earnerItem := range earner { - earnerRule = append(earnerRule, earnerItem) + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) } - var claimerRule []interface{} - for _, claimerItem := range claimer { - claimerRule = append(claimerRule, claimerItem) - } - var recipientRule []interface{} - for _, recipientItem := range recipient { - recipientRule = append(recipientRule, recipientItem) + var operatorSetRule []interface{} + for _, operatorSetItem := range operatorSet { + operatorSetRule = append(operatorSetRule, operatorSetItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsClaimed", earnerRule, claimerRule, recipientRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) if err != nil { return nil, err } @@ -2327,8 +2494,8 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorStorageRewardsClaimed) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsClaimed", log); err != nil { + event := new(RewardsCoordinatorStorageOperatorCommissionUpdated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorCommissionUpdated", log); err != nil { return err } event.Raw = log @@ -2349,21 +2516,21 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward }), nil } -// ParseRewardsClaimed is a log parse operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. +// ParseOperatorCommissionUpdated is a log parse operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. // -// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsClaimed(log types.Log) (*RewardsCoordinatorStorageRewardsClaimed, error) { - event := new(RewardsCoordinatorStorageRewardsClaimed) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsClaimed", log); err != nil { +// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseOperatorCommissionUpdated(log types.Log) (*RewardsCoordinatorStorageOperatorCommissionUpdated, error) { + event := new(RewardsCoordinatorStorageOperatorCommissionUpdated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorCommissionUpdated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator is returned from FilterRewardsForAllSubmitterSet and is used to iterate over the raw logs and unpacked data for RewardsForAllSubmitterSet events raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator struct { - Event *RewardsCoordinatorStorageRewardsForAllSubmitterSet // Event containing the contract specifics and raw log +// RewardsCoordinatorStorageOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageOperatorSetRewardCreatedIterator struct { + Event *RewardsCoordinatorStorageOperatorSetRewardCreated // 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 @@ -2377,7 +2544,7 @@ type RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator 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 *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Next() bool { +func (it *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2386,7 +2553,7 @@ func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Next() boo if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) + it.Event = new(RewardsCoordinatorStorageOperatorSetRewardCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2401,7 +2568,7 @@ func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Next() boo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) + it.Event = new(RewardsCoordinatorStorageOperatorSetRewardCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2417,69 +2584,70 @@ func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Next() boo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Error() error { +func (it *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Close() error { +func (it *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorStorageRewardsForAllSubmitterSet represents a RewardsForAllSubmitterSet event raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsForAllSubmitterSet struct { - RewardsForAllSubmitter common.Address - OldValue bool - NewValue bool - Raw types.Log // Blockchain specific contextual infos +// RewardsCoordinatorStorageOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageOperatorSetRewardCreated struct { + Avs common.Address + SubmissionNonce *big.Int + RewardsSubmissionHash [32]byte + RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission + Raw types.Log // Blockchain specific contextual infos } -// FilterRewardsForAllSubmitterSet is a free log retrieval operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. +// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. // -// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsForAllSubmitterSet(opts *bind.FilterOpts, rewardsForAllSubmitter []common.Address, oldValue []bool, newValue []bool) (*RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator, error) { +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorStorageOperatorSetRewardCreatedIterator, error) { - var rewardsForAllSubmitterRule []interface{} - for _, rewardsForAllSubmitterItem := range rewardsForAllSubmitter { - rewardsForAllSubmitterRule = append(rewardsForAllSubmitterRule, rewardsForAllSubmitterItem) + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) } - var oldValueRule []interface{} - for _, oldValueItem := range oldValue { - oldValueRule = append(oldValueRule, oldValueItem) + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) } - var newValueRule []interface{} - for _, newValueItem := range newValue { - newValueRule = append(newValueRule, newValueItem) + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsForAllSubmitterSet", rewardsForAllSubmitterRule, oldValueRule, newValueRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) if err != nil { return nil, err } - return &RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsForAllSubmitterSet", logs: logs, sub: sub}, nil + return &RewardsCoordinatorStorageOperatorSetRewardCreatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil } -// WatchRewardsForAllSubmitterSet is a free log subscription operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. +// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. // -// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsForAllSubmitterSet(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsForAllSubmitterSet, rewardsForAllSubmitter []common.Address, oldValue []bool, newValue []bool) (event.Subscription, error) { +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { - var rewardsForAllSubmitterRule []interface{} - for _, rewardsForAllSubmitterItem := range rewardsForAllSubmitter { - rewardsForAllSubmitterRule = append(rewardsForAllSubmitterRule, rewardsForAllSubmitterItem) - } - var oldValueRule []interface{} - for _, oldValueItem := range oldValue { - oldValueRule = append(oldValueRule, oldValueItem) + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) } - var newValueRule []interface{} - for _, newValueItem := range newValue { - newValueRule = append(newValueRule, newValueItem) + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsForAllSubmitterSet", rewardsForAllSubmitterRule, oldValueRule, newValueRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) if err != nil { return nil, err } @@ -2489,8 +2657,8 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsForAllSubmitterSet", log); err != nil { + event := new(RewardsCoordinatorStorageOperatorSetRewardCreated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { return err } event.Raw = log @@ -2511,21 +2679,21 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward }), nil } -// ParseRewardsForAllSubmitterSet is a log parse operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. +// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. // -// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsForAllSubmitterSet(log types.Log) (*RewardsCoordinatorStorageRewardsForAllSubmitterSet, error) { - event := new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsForAllSubmitterSet", log); err != nil { +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseOperatorSetRewardCreated(log types.Log) (*RewardsCoordinatorStorageOperatorSetRewardCreated, error) { + event := new(RewardsCoordinatorStorageOperatorSetRewardCreated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator is returned from FilterRewardsSubmissionForAllCreated and is used to iterate over the raw logs and unpacked data for RewardsSubmissionForAllCreated events raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator struct { - Event *RewardsCoordinatorStorageRewardsSubmissionForAllCreated // Event containing the contract specifics and raw log +// RewardsCoordinatorStorageRewardsClaimedIterator is returned from FilterRewardsClaimed and is used to iterate over the raw logs and unpacked data for RewardsClaimed events raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsClaimedIterator struct { + Event *RewardsCoordinatorStorageRewardsClaimed // 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 @@ -2539,7 +2707,7 @@ type RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator 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 *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Next() bool { +func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2548,7 +2716,7 @@ func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Next( if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) + it.Event = new(RewardsCoordinatorStorageRewardsClaimed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2563,7 +2731,7 @@ func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Next( // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) + it.Event = new(RewardsCoordinatorStorageRewardsClaimed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2579,70 +2747,72 @@ func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Next( } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Error() error { +func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Close() error { +func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorStorageRewardsSubmissionForAllCreated represents a RewardsSubmissionForAllCreated event raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsSubmissionForAllCreated struct { - Submitter common.Address - SubmissionNonce *big.Int - RewardsSubmissionHash [32]byte - RewardsSubmission IRewardsCoordinatorRewardsSubmission - Raw types.Log // Blockchain specific contextual infos +// RewardsCoordinatorStorageRewardsClaimed represents a RewardsClaimed event raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsClaimed struct { + Root [32]byte + Earner common.Address + Claimer common.Address + Recipient common.Address + Token common.Address + ClaimedAmount *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterRewardsSubmissionForAllCreated is a free log retrieval operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. +// FilterRewardsClaimed is a free log retrieval operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. // -// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsSubmissionForAllCreated(opts *bind.FilterOpts, submitter []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator, error) { +// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsClaimed(opts *bind.FilterOpts, earner []common.Address, claimer []common.Address, recipient []common.Address) (*RewardsCoordinatorStorageRewardsClaimedIterator, error) { - var submitterRule []interface{} - for _, submitterItem := range submitter { - submitterRule = append(submitterRule, submitterItem) + var earnerRule []interface{} + for _, earnerItem := range earner { + earnerRule = append(earnerRule, earnerItem) } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + var claimerRule []interface{} + for _, claimerItem := range claimer { + claimerRule = append(claimerRule, claimerItem) } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsSubmissionForAllCreated", submitterRule, submissionNonceRule, rewardsSubmissionHashRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsClaimed", earnerRule, claimerRule, recipientRule) if err != nil { return nil, err } - return &RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsSubmissionForAllCreated", logs: logs, sub: sub}, nil + return &RewardsCoordinatorStorageRewardsClaimedIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsClaimed", logs: logs, sub: sub}, nil } -// WatchRewardsSubmissionForAllCreated is a free log subscription operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. +// WatchRewardsClaimed is a free log subscription operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. // -// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsSubmissionForAllCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsSubmissionForAllCreated, submitter []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { +// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsClaimed(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsClaimed, earner []common.Address, claimer []common.Address, recipient []common.Address) (event.Subscription, error) { - var submitterRule []interface{} - for _, submitterItem := range submitter { - submitterRule = append(submitterRule, submitterItem) + var earnerRule []interface{} + for _, earnerItem := range earner { + earnerRule = append(earnerRule, earnerItem) } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + var claimerRule []interface{} + for _, claimerItem := range claimer { + claimerRule = append(claimerRule, claimerItem) } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsSubmissionForAllCreated", submitterRule, submissionNonceRule, rewardsSubmissionHashRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsClaimed", earnerRule, claimerRule, recipientRule) if err != nil { return nil, err } @@ -2652,8 +2822,8 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllCreated", log); err != nil { + event := new(RewardsCoordinatorStorageRewardsClaimed) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsClaimed", log); err != nil { return err } event.Raw = log @@ -2674,21 +2844,183 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward }), nil } -// ParseRewardsSubmissionForAllCreated is a log parse operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. +// ParseRewardsClaimed is a log parse operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. // -// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsSubmissionForAllCreated(log types.Log) (*RewardsCoordinatorStorageRewardsSubmissionForAllCreated, error) { - event := new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllCreated", log); err != nil { +// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsClaimed(log types.Log) (*RewardsCoordinatorStorageRewardsClaimed, error) { + event := new(RewardsCoordinatorStorageRewardsClaimed) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsClaimed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator is returned from FilterRewardsForAllSubmitterSet and is used to iterate over the raw logs and unpacked data for RewardsForAllSubmitterSet events raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator struct { + Event *RewardsCoordinatorStorageRewardsForAllSubmitterSet // 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 *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) 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(RewardsCoordinatorStorageRewardsForAllSubmitterSet) + 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(RewardsCoordinatorStorageRewardsForAllSubmitterSet) + 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 *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RewardsCoordinatorStorageRewardsForAllSubmitterSet represents a RewardsForAllSubmitterSet event raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsForAllSubmitterSet struct { + RewardsForAllSubmitter common.Address + OldValue bool + NewValue bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRewardsForAllSubmitterSet is a free log retrieval operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. +// +// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsForAllSubmitterSet(opts *bind.FilterOpts, rewardsForAllSubmitter []common.Address, oldValue []bool, newValue []bool) (*RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator, error) { + + var rewardsForAllSubmitterRule []interface{} + for _, rewardsForAllSubmitterItem := range rewardsForAllSubmitter { + rewardsForAllSubmitterRule = append(rewardsForAllSubmitterRule, rewardsForAllSubmitterItem) + } + var oldValueRule []interface{} + for _, oldValueItem := range oldValue { + oldValueRule = append(oldValueRule, oldValueItem) + } + var newValueRule []interface{} + for _, newValueItem := range newValue { + newValueRule = append(newValueRule, newValueItem) + } + + logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsForAllSubmitterSet", rewardsForAllSubmitterRule, oldValueRule, newValueRule) + if err != nil { + return nil, err + } + return &RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsForAllSubmitterSet", logs: logs, sub: sub}, nil +} + +// WatchRewardsForAllSubmitterSet is a free log subscription operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. +// +// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsForAllSubmitterSet(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsForAllSubmitterSet, rewardsForAllSubmitter []common.Address, oldValue []bool, newValue []bool) (event.Subscription, error) { + + var rewardsForAllSubmitterRule []interface{} + for _, rewardsForAllSubmitterItem := range rewardsForAllSubmitter { + rewardsForAllSubmitterRule = append(rewardsForAllSubmitterRule, rewardsForAllSubmitterItem) + } + var oldValueRule []interface{} + for _, oldValueItem := range oldValue { + oldValueRule = append(oldValueRule, oldValueItem) + } + var newValueRule []interface{} + for _, newValueItem := range newValue { + newValueRule = append(newValueRule, newValueItem) + } + + logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsForAllSubmitterSet", rewardsForAllSubmitterRule, oldValueRule, newValueRule) + 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(RewardsCoordinatorStorageRewardsForAllSubmitterSet) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsForAllSubmitterSet", 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 +} + +// ParseRewardsForAllSubmitterSet is a log parse operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. +// +// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsForAllSubmitterSet(log types.Log) (*RewardsCoordinatorStorageRewardsForAllSubmitterSet, error) { + event := new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsForAllSubmitterSet", log); err != nil { return nil, err } event.Raw = log return event, nil } -// RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator is returned from FilterRewardsSubmissionForAllEarnersCreated and is used to iterate over the raw logs and unpacked data for RewardsSubmissionForAllEarnersCreated events raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator struct { - Event *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated // Event containing the contract specifics and raw log +// RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator is returned from FilterRewardsSubmissionForAllCreated and is used to iterate over the raw logs and unpacked data for RewardsSubmissionForAllCreated events raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator struct { + Event *RewardsCoordinatorStorageRewardsSubmissionForAllCreated // 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 @@ -2702,7 +3034,7 @@ type RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator stru // 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 *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator) Next() bool { +func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2711,7 +3043,7 @@ func (it *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated) + it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2726,7 +3058,7 @@ func (it *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated) + it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2742,34 +3074,34 @@ func (it *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator) Error() error { +func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator) Close() error { +func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated represents a RewardsSubmissionForAllEarnersCreated event raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated struct { - TokenHopper common.Address +// RewardsCoordinatorStorageRewardsSubmissionForAllCreated represents a RewardsSubmissionForAllCreated event raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsSubmissionForAllCreated struct { + Submitter common.Address SubmissionNonce *big.Int RewardsSubmissionHash [32]byte RewardsSubmission IRewardsCoordinatorRewardsSubmission Raw types.Log // Blockchain specific contextual infos } -// FilterRewardsSubmissionForAllEarnersCreated is a free log retrieval operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. +// FilterRewardsSubmissionForAllCreated is a free log retrieval operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. // -// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsSubmissionForAllEarnersCreated(opts *bind.FilterOpts, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator, error) { +// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsSubmissionForAllCreated(opts *bind.FilterOpts, submitter []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator, error) { - var tokenHopperRule []interface{} - for _, tokenHopperItem := range tokenHopper { - tokenHopperRule = append(tokenHopperRule, tokenHopperItem) + var submitterRule []interface{} + for _, submitterItem := range submitter { + submitterRule = append(submitterRule, submitterItem) } var submissionNonceRule []interface{} for _, submissionNonceItem := range submissionNonce { @@ -2780,21 +3112,21 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewar rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsSubmissionForAllCreated", submitterRule, submissionNonceRule, rewardsSubmissionHashRule) if err != nil { return nil, err } - return &RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsSubmissionForAllEarnersCreated", logs: logs, sub: sub}, nil + return &RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsSubmissionForAllCreated", logs: logs, sub: sub}, nil } -// WatchRewardsSubmissionForAllEarnersCreated is a free log subscription operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. +// WatchRewardsSubmissionForAllCreated is a free log subscription operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. // -// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsSubmissionForAllEarnersCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { +// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsSubmissionForAllCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsSubmissionForAllCreated, submitter []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { - var tokenHopperRule []interface{} - for _, tokenHopperItem := range tokenHopper { - tokenHopperRule = append(tokenHopperRule, tokenHopperItem) + var submitterRule []interface{} + for _, submitterItem := range submitter { + submitterRule = append(submitterRule, submitterItem) } var submissionNonceRule []interface{} for _, submissionNonceItem := range submissionNonce { @@ -2805,7 +3137,7 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsSubmissionForAllCreated", submitterRule, submissionNonceRule, rewardsSubmissionHashRule) if err != nil { return nil, err } @@ -2815,8 +3147,8 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", log); err != nil { + event := new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllCreated", log); err != nil { return err } event.Raw = log @@ -2837,12 +3169,12 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward }), nil } -// ParseRewardsSubmissionForAllEarnersCreated is a log parse operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. +// ParseRewardsSubmissionForAllCreated is a log parse operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. // -// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsSubmissionForAllEarnersCreated(log types.Log) (*RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated, error) { - event := new(RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", log); err != nil { +// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsSubmissionForAllCreated(log types.Log) (*RewardsCoordinatorStorageRewardsSubmissionForAllCreated, error) { + event := new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllCreated", log); err != nil { return nil, err } event.Raw = log diff --git a/script/configs/holesky/Deploy_RewardsCoordinator.holesky.config.json b/script/configs/holesky/Deploy_RewardsCoordinator.holesky.config.json new file mode 100644 index 000000000..ecd86e029 --- /dev/null +++ b/script/configs/holesky/Deploy_RewardsCoordinator.holesky.config.json @@ -0,0 +1,60 @@ +{ + "chainInfo": { + "chainId": 17000 + }, + "multisig_addresses": { + "pauserMultisig": "0x53410249ec7d3a3F9F1ba3912D50D6A3Df6d10A7", + "communityMultisig": "0xCb8d2f9e55Bc7B1FA9d089f9aC80C583D2BDD5F7", + "operationsMultisig": "0xfaEF7338b7490b9E272d80A1a39f4657cAf2b97d", + "executorMultisig": "0x28Ade60640fdBDb2609D8d8734D1b5cBeFc0C348", + "timelock": "0xcF19CE0561052a7A7Ff21156730285997B350A7D" + }, + "strategies": { + "numStrategies": 0, + "MAX_PER_DEPOSIT": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "MAX_TOTAL_DEPOSITS": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "strategiesToDeploy": [] + }, + "strategyManager": { + "init_strategy_whitelister": "0x28Ade60640fdBDb2609D8d8734D1b5cBeFc0C348", + "init_paused_status": 0 + }, + "delegationManager": { + "init_paused_status": 0, + "init_minWithdrawalDelayBlocks": 10 + }, + "rewardsCoordinator": { + "init_paused_status": 0, + "CALCULATION_INTERVAL_SECONDS": 604800, + "MAX_REWARDS_DURATION": 6048000, + "MAX_RETROACTIVE_LENGTH": 7776000, + "MAX_FUTURE_LENGTH": 2592000, + "GENESIS_REWARDS_TIMESTAMP": 1710979200, + "rewards_updater_address": "0x18a0f92Ad9645385E8A8f3db7d0f6CF7aBBb0aD4", + "activation_delay": 7200, + "calculation_interval_seconds": 604800, + "global_operator_commission_bips": 1000, + "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP": 1720656000, + "OPERATOR_SET_MAX_RETROACTIVE_LENGTH": 2592000 + }, + "avsDirectory": { + "init_paused_status": 0 + }, + "slasher": { + "init_paused_status": 0 + }, + "eigenPod": { + "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR": 32000000000, + "GENESIS_TIME": 1695902400 + }, + "eigenPodManager": { + "init_paused_status": 0, + "deneb_fork_timestamp": "1707305664" + }, + "delayedWithdrawalRouter": { + "init_paused_status": 0, + "init_withdrawalDelayBlocks": 10 + }, + "ethPOSDepositAddress": "0x4242424242424242424242424242424242424242", + "beaconOracleAddress": "0x4C116BB629bff7A8373c2378bBd919f8349B8f25" +} \ No newline at end of file diff --git a/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol b/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol index 5aae342de..c8c1ebf2c 100644 --- a/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol +++ b/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol @@ -46,11 +46,14 @@ contract Deploy_Test_RewardsCoordinator is ExistingDeploymentParser { rewardsCoordinatorImplementation = new RewardsCoordinator( delegationManager, strategyManager, + avsDirectory, 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 + REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH ); rewardsCoordinator = RewardsCoordinator( address( @@ -79,11 +82,14 @@ contract Deploy_Test_RewardsCoordinator is ExistingDeploymentParser { rewardsCoordinatorImplementation = new RewardsCoordinator( delegationManager, strategyManager, + avsDirectory, 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 + REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH ); eigenLayerProxyAdmin.upgrade( diff --git a/script/deploy/local/Deploy_From_Scratch.s.sol b/script/deploy/local/Deploy_From_Scratch.s.sol index ed8b6a719..b03156972 100644 --- a/script/deploy/local/Deploy_From_Scratch.s.sol +++ b/script/deploy/local/Deploy_From_Scratch.s.sol @@ -229,11 +229,14 @@ contract DeployFromScratch is Script, Test { rewardsCoordinatorImplementation = new RewardsCoordinator( delegation, strategyManager, + avsDirectory, 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 + REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH ); // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. diff --git a/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol b/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol new file mode 100644 index 000000000..a056291c2 --- /dev/null +++ b/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "@openzeppelin/contracts/utils/Create2.sol"; +import "../../utils/ExistingDeploymentParser.sol"; + +import "../../../src/contracts/strategies/StrategyFactory.sol"; + +/** + * @notice Script used for the first deployment of EigenLayer core contracts to Holesky + * FORK LOCAL + * anvil --fork-url $RPC_MAINNET + * forge script script/deploy/mainnet/Deploy_Strategy_Factory.s.sol:MainnetStrategyFactoryDeploy --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv + * + * MAINNET + * forge script script/deploy/mainnet/Deploy_Strategy_Factory.s.sol:MainnetStrategyFactoryDeploy --rpc-url $RPC_MAINNET --private-key $PRIVATE_KEY --verify --broadcast -vvvv + * + */ + +contract MainnetStrategyFactoryDeploy is ExistingDeploymentParser { + function run() external virtual { + // Use rewards config + _parseInitialDeploymentParams( + "script/configs/mainnet/v0.3.0-mainnet-rewards.config.json" + ); + _parseDeployedContracts( + "script/configs/mainnet/Mainnet_curent_deployment.config.json" + ); + + // START RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.startBroadcast(); + + emit log_named_address("Deployer Address", msg.sender); + + _deployStrategyFactory(); + + // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.stopBroadcast(); + + // Sanity Checks + _verifyContractPointers(); + _verifyImplementations(); + _verifyContractsInitialized(); + _verifyInitializationParams(); + + logAndOutputContractAddresses("script/output/mainnet/v0.3.2-mainnet-strategy-factory.output.json"); + } + + /** + * @notice Deploy StrategyFactory for Mainnet + */ + + function _deployStrategyFactory() internal { + strategyFactoryImplementation = new StrategyFactory( + strategyManager + ); + + + + } +} \ No newline at end of file diff --git a/script/deploy/mainnet/v0.3.0-mainnet-rewards.s.sol b/script/deploy/mainnet/v0.3.0-mainnet-rewards.s.sol index 72db07599..5067db34b 100644 --- a/script/deploy/mainnet/v0.3.0-mainnet-rewards.s.sol +++ b/script/deploy/mainnet/v0.3.0-mainnet-rewards.s.sol @@ -52,11 +52,14 @@ contract MainnetRewardsCoordinatorDeploy is ExistingDeploymentParser { rewardsCoordinatorImplementation = new RewardsCoordinator( delegationManager, strategyManager, + avsDirectory, 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 + REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH ); rewardsCoordinator = RewardsCoordinator( address( @@ -85,11 +88,14 @@ contract MainnetRewardsCoordinatorDeploy is ExistingDeploymentParser { rewardsCoordinatorImplementation = new RewardsCoordinator( delegationManager, strategyManager, + avsDirectory, 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 + REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH ); eigenLayerProxyAdmin.upgrade( diff --git a/script/utils/ExistingDeploymentParser.sol b/script/utils/ExistingDeploymentParser.sol index 20c081acc..385a0028a 100644 --- a/script/utils/ExistingDeploymentParser.sol +++ b/script/utils/ExistingDeploymentParser.sol @@ -117,6 +117,8 @@ contract ExistingDeploymentParser is Script, Test { uint32 REWARDS_COORDINATOR_ACTIVATION_DELAY; uint32 REWARDS_COORDINATOR_CALCULATION_INTERVAL_SECONDS; uint32 REWARDS_COORDINATOR_GLOBAL_OPERATOR_COMMISSION_BIPS; + uint32 REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP; + uint32 REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH; // EigenPodManager uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS; // EigenPod @@ -314,6 +316,12 @@ contract ExistingDeploymentParser is Script, Test { REWARDS_COORDINATOR_GLOBAL_OPERATOR_COMMISSION_BIPS = uint32( stdJson.readUint(initialDeploymentData, ".rewardsCoordinator.global_operator_commission_bips") ); + REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP = uint32( + stdJson.readUint(initialDeploymentData, ".rewardsCoordinator.OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP") + ); + REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH = uint32( + stdJson.readUint(initialDeploymentData, ".rewardsCoordinator.OPERATOR_SET_MAX_RETROACTIVE_LENGTH") + ); // AVSDirectory AVS_DIRECTORY_INIT_PAUSED_STATUS = stdJson.readUint(initialDeploymentData, ".avsDirectory.init_paused_status"); // EigenPodManager diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 40ea0fd90..4e4598c64 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol"; + import "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; import "./AVSDirectoryStorage.sol"; @@ -15,10 +16,15 @@ contract AVSDirectory is AVSDirectoryStorage, ReentrancyGuardUpgradeable { - // @dev Index for flag that pauses operator register/deregister to avs when set. + using EnumerableSet for EnumerableSet.Bytes32Set; + using EnumerableSet for EnumerableSet.AddressSet; + + /// @dev Index for flag that pauses operator register/deregister to avs when set. uint8 internal constant PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS = 0; + /// @dev Index for flag that pauses operator register/deregister to operator sets when set. + uint8 internal constant PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS = 1; - // @dev Chain ID at the time of contract deployment + /// @dev Returns the chain ID from the time the contract was deployed. uint256 internal immutable ORIGINAL_CHAIN_ID; /** @@ -54,62 +60,304 @@ contract AVSDirectory is /** * - * EXTERNAL FUNCTIONS + * EXTERNAL FUNCTIONS + * + */ + + /** + * @notice Called by an AVS to create a list of new operatorSets. + * + * @param operatorSetIds The IDs of the operator set to initialize. + * + * @dev msg.sender must be the AVS. + * @dev The AVS may create operator sets before it becomes an operator set AVS. + */ + function createOperatorSets(uint32[] calldata operatorSetIds) external { + for (uint256 i = 0; i < operatorSetIds.length; ++i) { + require( + !isOperatorSet[msg.sender][operatorSetIds[i]], + "AVSDirectory.createOperatorSet: operator set already exists" + ); + isOperatorSet[msg.sender][operatorSetIds[i]] = true; + emit OperatorSetCreated(OperatorSet({avs: msg.sender, operatorSetId: operatorSetIds[i]})); + } + } + + /** + * @notice Sets the AVS as an operator set AVS, preventing legacy M2 operator registrations. + * + * @dev msg.sender must be the AVS. + */ + function becomeOperatorSetAVS() external { + require(!isOperatorSetAVS[msg.sender], "AVSDirectory.becomeOperatorSetAVS: already an operator set AVS"); + isOperatorSetAVS[msg.sender] = true; + emit AVSMigratedToOperatorSets(msg.sender); + } + + /** + * @notice Called by an AVS to migrate operators that have a legacy M2 registration to operator sets. + * + * @param operators The list of operators to migrate + * @param operatorSetIds The list of operatorSets to migrate the operators to + * + * @dev The msg.sender used is the AVS + * @dev The operator can only be migrated at most once per AVS + * @dev The AVS can no longer register operators via the legacy M2 registration path once it begins migration + * @dev The operator is deregistered from the M2 legacy AVS once migrated + */ + function migrateOperatorsToOperatorSets( + address[] calldata operators, + uint32[][] calldata operatorSetIds + ) external override onlyWhenNotPaused(PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS) { + // Assert that the AVS is an operator set AVS. + require( + isOperatorSetAVS[msg.sender], "AVSDirectory.migrateOperatorsToOperatorSets: AVS is not an operator set AVS" + ); + + for (uint256 i = 0; i < operators.length; i++) { + // Assert that the operator is registered & has not been migrated. + require( + avsOperatorStatus[msg.sender][operators[i]] == OperatorAVSRegistrationStatus.REGISTERED, + "AVSDirectory.migrateOperatorsToOperatorSets: operator already migrated or not a legacy registered operator" + ); + + // Migrate operator to operator sets. + _registerToOperatorSets(operators[i], msg.sender, operatorSetIds[i]); + + // Deregister operator from AVS - this prevents the operator from being migrated again since + // the AVS can no longer use the legacy M2 registration path + avsOperatorStatus[msg.sender][operators[i]] = OperatorAVSRegistrationStatus.UNREGISTERED; + emit OperatorAVSRegistrationStatusUpdated( + operators[i], msg.sender, OperatorAVSRegistrationStatus.UNREGISTERED + ); + emit OperatorMigratedToOperatorSets(operators[i], msg.sender, operatorSetIds[i]); + } + } + + /** + * @notice Called by AVSs to add an operator to a list of operatorSets. + * + * @param operator The address of the operator to be added to the operator set. + * @param operatorSetIds The IDs of the operator sets. + * @param operatorSignature The signature of the operator on their intent to register. + * + * @dev msg.sender is used as the AVS. + * @dev The operator must not have a pending deregistration from the operator set. + */ + function registerOperatorToOperatorSets( + address operator, + uint32[] calldata operatorSetIds, + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature + ) external override onlyWhenNotPaused(PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS) { + // Assert operator's signature has not expired. + require( + operatorSignature.expiry >= block.timestamp, + "AVSDirectory.registerOperatorToOperatorSets: operator signature expired" + ); + // Assert `operator` is actually an operator. + require( + delegation.isOperator(operator), + "AVSDirectory.registerOperatorToOperatorSets: operator not registered to EigenLayer yet" + ); + // Assert that the AVS is an operator set AVS. + require( + isOperatorSetAVS[msg.sender], "AVSDirectory.registerOperatorToOperatorSets: AVS is not an operator set AVS" + ); + // Assert operator's signature `salt` has not already been spent. + require( + !operatorSaltIsSpent[operator][operatorSignature.salt], + "AVSDirectory.registerOperatorToOperatorSets: salt already spent" + ); + + // Assert that `operatorSignature.signature` is a valid signature for operator set registrations. + EIP1271SignatureUtils.checkSignature_EIP1271( + operator, + calculateOperatorSetRegistrationDigestHash({ + avs: msg.sender, + operatorSetIds: operatorSetIds, + salt: operatorSignature.salt, + expiry: operatorSignature.expiry + }), + operatorSignature.signature + ); + + // Mutate `operatorSaltIsSpent` to `true` to prevent future respending. + operatorSaltIsSpent[operator][operatorSignature.salt] = true; + + _registerToOperatorSets(operator, msg.sender, operatorSetIds); + } + + /** + * @notice Called by an operator to deregister from an operator set + * + * @param operator The operator to deregister from the operatorSets. + * @param avs The address of the AVS to deregister the operator from. + * @param operatorSetIds The IDs of the operator sets. + * @param operatorSignature the signature of the operator on their intent to deregister or empty if the operator itself is calling + * + * @dev if the operatorSignature is empty, the caller must be the operator + * @dev this will likely only be called in case the AVS contracts are in a state that prevents operators from deregistering + */ + function forceDeregisterFromOperatorSets( + address operator, + address avs, + uint32[] calldata operatorSetIds, + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature + ) external override onlyWhenNotPaused(PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS) { + if (operatorSignature.signature.length == 0) { + require(msg.sender == operator, "AVSDirectory.forceDeregisterFromOperatorSets: caller must be operator"); + } else { + // Assert operator's signature has not expired. + require( + operatorSignature.expiry >= block.timestamp, + "AVSDirectory.forceDeregisterFromOperatorSets: operator signature expired" + ); + // Assert operator's signature `salt` has not already been spent. + require( + !operatorSaltIsSpent[operator][operatorSignature.salt], + "AVSDirectory.forceDeregisterFromOperatorSets: salt already spent" + ); + + // Assert that `operatorSignature.signature` is a valid signature for operator set deregistrations. + EIP1271SignatureUtils.checkSignature_EIP1271( + operator, + calculateOperatorSetForceDeregistrationTypehash({ + avs: avs, + operatorSetIds: operatorSetIds, + salt: operatorSignature.salt, + expiry: operatorSignature.expiry + }), + operatorSignature.signature + ); + + // Mutate `operatorSaltIsSpent` to `true` to prevent future respending. + operatorSaltIsSpent[operator][operatorSignature.salt] = true; + } + _deregisterFromOperatorSets(avs, operator, operatorSetIds); + } + + /** + * @notice Called by AVSs to remove an operator from an operator set. + * + * @param operator The address of the operator to be removed from the operator set. + * @param operatorSetIds The IDs of the operator sets. * + * @dev msg.sender is used as the AVS. */ + function deregisterOperatorFromOperatorSets( + address operator, + uint32[] calldata operatorSetIds + ) external override onlyWhenNotPaused(PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS) { + _deregisterFromOperatorSets(msg.sender, operator, operatorSetIds); + } /** - * @notice Called by the AVS's service manager contract to register an operator with the avs. - * @param operator The address of the operator to register. - * @param operatorSignature The signature, salt, and expiry of the operator's signature. + * @notice Called by an AVS to emit an `AVSMetadataURIUpdated` event indicating the information has updated. + * + * @param metadataURI The URI for metadata associated with an AVS. + * + * @dev Note that the `metadataURI` is *never stored* and is only emitted in the `AVSMetadataURIUpdated` event. + */ + function updateAVSMetadataURI(string calldata metadataURI) external override { + emit AVSMetadataURIUpdated(msg.sender, metadataURI); + } + + /** + * @notice Called by an operator to cancel a salt that has been used to register with an AVS. + * + * @param salt A unique and single use value associated with the approver signature. + */ + function cancelSalt(bytes32 salt) external override { + // Mutate `operatorSaltIsSpent` to `true` to prevent future spending. + operatorSaltIsSpent[msg.sender][salt] = true; + } + + /** + * + * LEGACY EXTERNAL FUNCTIONS - SUPPORT DEPRECATED BY SLASHING RELEASE + * + */ + + /** + * @notice Called by the AVS's service manager contract to register an operator with the AVS. + * + * @param operator The address of the operator to register. + * @param operatorSignature The signature, salt, and expiry of the operator's signature. + * + * @dev msg.sender must be the AVS. + * @dev Only used by legacy M2 AVSs that have not integrated with operator sets. */ function registerOperatorToAVS( address operator, ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature - ) external onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { + ) external override onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { // Assert `operatorSignature.expiry` has not elapsed. - require(operatorSignature.expiry >= block.timestamp, SignatureExpired()); + require( + operatorSignature.expiry >= block.timestamp, + "AVSDirectory.registerOperatorToAVS: operator signature expired" + ); + + // Assert that the AVS is not an operator set AVS. + require(!isOperatorSetAVS[msg.sender], "AVSDirectory.registerOperatorToAVS: AVS is an operator set AVS"); + // Assert that the `operator` is not actively registered to the AVS. - require(avsOperatorStatus[msg.sender][operator] != OperatorAVSRegistrationStatus.REGISTERED, InvalidOperator()); + require( + avsOperatorStatus[msg.sender][operator] != OperatorAVSRegistrationStatus.REGISTERED, + "AVSDirectory.registerOperatorToAVS: operator already registered" + ); + // Assert `operator` has not already spent `operatorSignature.salt`. - require(!operatorSaltIsSpent[operator][operatorSignature.salt], SaltSpent()); + require( + !operatorSaltIsSpent[operator][operatorSignature.salt], + "AVSDirectory.registerOperatorToAVS: salt already spent" + ); + // Assert `operator` is a registered operator. - require(delegation.isOperator(operator), OperatorNotRegistered()); - - // Calculate the digest hash - bytes32 operatorRegistrationDigestHash = calculateOperatorAVSRegistrationDigestHash({ - operator: operator, - avs: msg.sender, - salt: operatorSignature.salt, - expiry: operatorSignature.expiry + require( + delegation.isOperator(operator), + "AVSDirectory.registerOperatorToAVS: operator not registered to EigenLayer yet" + ); + + // Assert that `operatorSignature.signature` is a valid signature for the operator AVS registration. + EIP1271SignatureUtils.checkSignature_EIP1271({ + signer: operator, + digestHash: calculateOperatorAVSRegistrationDigestHash({ + operator: operator, + avs: msg.sender, + salt: operatorSignature.salt, + expiry: operatorSignature.expiry + }), + signature: operatorSignature.signature }); - // forgefmt: disable-next-item - // Check that the signature is valid - EIP1271SignatureUtils.checkSignature_EIP1271( - operator, - operatorRegistrationDigestHash, - operatorSignature.signature - ); + // Mutate `operatorSaltIsSpent` to `true` to prevent future respending. + operatorSaltIsSpent[operator][operatorSignature.salt] = true; // Set the operator as registered avsOperatorStatus[msg.sender][operator] = OperatorAVSRegistrationStatus.REGISTERED; - // Mark the salt as spent - operatorSaltIsSpent[operator][operatorSignature.salt] = true; - emit OperatorAVSRegistrationStatusUpdated(operator, msg.sender, OperatorAVSRegistrationStatus.REGISTERED); } /** - * @notice Called by an avs to deregister an operator with the avs. - * @param operator The address of the operator to deregister. + * @notice Called by an AVS to deregister an operator from the AVS. + * + * @param operator The address of the operator to deregister. + * + * @dev Only used by legacy M2 AVSs that have not integrated with operator sets. */ - function deregisterOperatorFromAVS( - address operator - ) external onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { - // Assert that operator is registered for the AVS. - require(avsOperatorStatus[msg.sender][operator] == OperatorAVSRegistrationStatus.REGISTERED, InvalidOperator()); + function deregisterOperatorFromAVS(address operator) + external + override + onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) + { + require( + avsOperatorStatus[msg.sender][operator] == OperatorAVSRegistrationStatus.REGISTERED, + "AVSDirectory.deregisterOperatorFromAVS: operator not registered" + ); + + // Assert that the AVS is not an operator set AVS. + require(!isOperatorSetAVS[msg.sender], "AVSDirectory.deregisterOperatorFromAVS: AVS is an operator set AVS"); // Set the operator as deregistered avsOperatorStatus[msg.sender][operator] = OperatorAVSRegistrationStatus.UNREGISTERED; @@ -118,23 +366,63 @@ contract AVSDirectory is } /** - * @notice Called by an avs to emit an `AVSMetadataURIUpdated` event indicating the information has updated. - * @param metadataURI The URI for metadata associated with an avs + * + * INTERNAL FUNCTIONS + * + */ + + /** + * @notice Helper function used by migration & registration functions to register an operator to operator sets. + * @param avs The AVS that the operator is registering to. + * @param operator The operator to register. + * @param operatorSetIds The IDs of the operator sets. */ - function updateAVSMetadataURI( - string calldata metadataURI - ) external { - emit AVSMetadataURIUpdated(msg.sender, metadataURI); + function _registerToOperatorSets(address operator, address avs, uint32[] calldata operatorSetIds) internal { + // Loop over `operatorSetIds` array and register `operator` for each item. + for (uint256 i = 0; i < operatorSetIds.length; ++i) { + OperatorSet memory operatorSet = OperatorSet(avs, operatorSetIds[i]); + + require( + isOperatorSet[avs][operatorSetIds[i]], + "AVSDirectory._registerOperatorToOperatorSets: invalid operator set" + ); + + bytes32 encodedOperatorSet = _encodeOperatorSet(operatorSet); + + require( + _operatorSetsMemberOf[operator].add(encodedOperatorSet), + "AVSDirectory._registerOperatorToOperatorSets: operator already registered to operator set" + ); + + _operatorSetMembers[encodedOperatorSet].add(operator); + + emit OperatorAddedToOperatorSet(operator, operatorSet); + } } /** - * @notice Called by an operator to cancel a salt that has been used to register with an AVS. - * @param salt A unique and single use value associated with the approver signature. + * @notice Internal function to deregister an operator from an operator set. + * + * @param avs The AVS that the operator is deregistering from. + * @param operator The operator to deregister. + * @param operatorSetIds The IDs of the operator sets. */ - function cancelSalt( - bytes32 salt - ) external { - operatorSaltIsSpent[msg.sender][salt] = true; + function _deregisterFromOperatorSets(address avs, address operator, uint32[] calldata operatorSetIds) internal { + // Loop over `operatorSetIds` array and deregister `operator` for each item. + for (uint256 i = 0; i < operatorSetIds.length; ++i) { + OperatorSet memory operatorSet = OperatorSet(avs, operatorSetIds[i]); + + bytes32 encodedOperatorSet = _encodeOperatorSet(operatorSet); + + require( + _operatorSetsMemberOf[operator].remove(encodedOperatorSet), + "AVSDirectory._deregisterOperatorFromOperatorSet: operator not registered for operator set" + ); + + _operatorSetMembers[encodedOperatorSet].remove(operator); + + emit OperatorRemovedFromOperatorSet(operator, operatorSet); + } } /** @@ -144,39 +432,176 @@ contract AVSDirectory is */ /** - * @notice Calculates the digest hash to be signed by an operator to register with an AVS - * @param operator The account registering as an operator - * @param avs The address of the service manager contract for the AVS that the operator is registering to - * @param salt A unique and single use value associated with the approver signature. - * @param expiry Time after which the approver's signature becomes invalid + * @notice Returns operatorSet an operator is registered to in the order they were registered. + * @param operator The operator address to query. + * @param index The index of the enumerated list of operator sets. + */ + function operatorSetsMemberOfAtIndex(address operator, uint256 index) external view returns (OperatorSet memory) { + return _decodeOperatorSet(_operatorSetsMemberOf[operator].at(index)); + } + + /** + * @notice Returns the operator registered to an operatorSet in the order that it was registered. + * @param operatorSet The operatorSet to query. + * @param index The index of the enumerated list of operators. + */ + function operatorSetMemberAtIndex(OperatorSet memory operatorSet, uint256 index) external view returns (address) { + return _operatorSetMembers[_encodeOperatorSet(operatorSet)].at(index); + } + + /** + * @notice Returns an array of operator sets an operator is registered to. + * @param operator The operator address to query. + * @param start The starting index of the array to query. + * @param length The amount of items of the array to return. + */ + function getOperatorSetsOfOperator( + address operator, + uint256 start, + uint256 length + ) external view returns (OperatorSet[] memory operatorSets) { + uint256 maxLength = _operatorSetsMemberOf[operator].length() - start; + if (length > maxLength) length = maxLength; + operatorSets = new OperatorSet[](length); + for (uint256 i; i < length; ++i) { + operatorSets[i] = _decodeOperatorSet(_operatorSetsMemberOf[operator].at(start + i)); + } + } + + /** + * @notice Returns an array of operators registered to the operatorSet. + * @param operatorSet The operatorSet to query. + * @param start The starting index of the array to query. + * @param length The amount of items of the array to return. + */ + function getOperatorsInOperatorSet( + OperatorSet memory operatorSet, + uint256 start, + uint256 length + ) external view returns (address[] memory operators) { + bytes32 encodedOperatorSet = _encodeOperatorSet(operatorSet); + uint256 maxLength = _operatorSetMembers[encodedOperatorSet].length() - start; + if (length > maxLength) length = maxLength; + operators = new address[](length); + for (uint256 i; i < length; ++i) { + operators[i] = _operatorSetMembers[encodedOperatorSet].at(start + i); + } + } + + /** + * @notice Returns the number of operators registered to an operatorSet. + * @param operatorSet The operatorSet to get the member count for + */ + function getNumOperatorsInOperatorSet(OperatorSet memory operatorSet) external view returns (uint256) { + return _operatorSetMembers[_encodeOperatorSet(operatorSet)].length(); + } + + /** + * @notice Returns the total number of operator sets an operator is registered to. + * @param operator The operator address to query. + */ + function inTotalOperatorSets(address operator) external view returns (uint256) { + return _operatorSetsMemberOf[operator].length(); + } + + /** + * @notice Returns whether or not an operator is registered to an operator set. + * @param operator The operator address to query. + * @param operatorSet The `OperatorSet` to query. + */ + function isMember(address operator, OperatorSet memory operatorSet) public view returns (bool) { + return _operatorSetsMemberOf[operator].contains(_encodeOperatorSet(operatorSet)); + } + + /** + * @notice Calculates the digest hash to be signed by an operator to register with an AVS. + * + * @param operator The account registering as an operator. + * @param avs The AVS the operator is registering with. + * @param salt A unique and single-use value associated with the approver's signature. + * @param expiry The time after which the approver's signature becomes invalid. */ function calculateOperatorAVSRegistrationDigestHash( address operator, address avs, bytes32 salt, uint256 expiry - ) public view returns (bytes32) { - // calculate the struct hash - bytes32 structHash = keccak256(abi.encode(OPERATOR_AVS_REGISTRATION_TYPEHASH, operator, avs, salt, expiry)); - // calculate the digest hash - bytes32 digestHash = keccak256(abi.encodePacked("\x19\x01", domainSeparator(), structHash)); - return digestHash; + ) public view override returns (bytes32) { + return + _calculateDigestHash(keccak256(abi.encode(OPERATOR_AVS_REGISTRATION_TYPEHASH, operator, avs, salt, expiry))); } /** - * @notice Getter function for the current EIP-712 domain separator for this contract. - * @dev The domain separator will change in the event of a fork that changes the ChainID. + * @notice Calculates the digest hash to be signed by an operator to register with an operator set. + * + * @param avs The AVS that operator is registering to operator sets for. + * @param operatorSetIds An array of operator set IDs the operator is registering to. + * @param salt A unique and single use value associated with the approver signature. + * @param expiry Time after which the approver's signature becomes invalid. */ - function domainSeparator() public view returns (bytes32) { + function calculateOperatorSetRegistrationDigestHash( + address avs, + uint32[] calldata operatorSetIds, + bytes32 salt, + uint256 expiry + ) public view override returns (bytes32) { + return _calculateDigestHash( + keccak256(abi.encode(OPERATOR_SET_REGISTRATION_TYPEHASH, avs, operatorSetIds, salt, expiry)) + ); + } + + /** + * @notice Calculates the digest hash to be signed by an operator to force deregister from an operator set. + * + * @param avs The AVS that operator is deregistering from. + * @param operatorSetIds An array of operator set IDs the operator is deregistering from. + * @param salt A unique and single use value associated with the approver signature. + * @param expiry Time after which the approver's signature becomes invalid. + */ + function calculateOperatorSetForceDeregistrationTypehash( + address avs, + uint32[] calldata operatorSetIds, + bytes32 salt, + uint256 expiry + ) public view returns (bytes32) { + return _calculateDigestHash( + keccak256(abi.encode(OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH, avs, operatorSetIds, salt, expiry)) + ); + } + + /// @notice Getter function for the current EIP-712 domain separator for this contract. + /// @dev The domain separator will change in the event of a fork that changes the ChainID. + function domainSeparator() public view override returns (bytes32) { + return _calculateDomainSeparator(); + } + + /// @notice Internal function for calculating the current domain separator of this contract + function _calculateDomainSeparator() internal view returns (bytes32) { if (block.chainid == ORIGINAL_CHAIN_ID) { return _DOMAIN_SEPARATOR; } else { - return _calculateDomainSeparator(); + return keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes("EigenLayer")), block.chainid, address(this))); } } - // @notice Internal function for calculating the current domain separator of this contract - function _calculateDomainSeparator() internal view returns (bytes32) { - return keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes("EigenLayer")), block.chainid, address(this))); + /// @notice Returns an EIP-712 encoded hash struct. + function _calculateDigestHash(bytes32 structHash) internal view returns (bytes32) { + return keccak256(abi.encodePacked("\x19\x01", _calculateDomainSeparator(), structHash)); + } + + /// @dev Returns an `OperatorSet` encoded into a 32-byte value. + /// @param operatorSet The `OperatorSet` to encode. + function _encodeOperatorSet(OperatorSet memory operatorSet) internal pure returns (bytes32) { + return bytes32(abi.encodePacked(operatorSet.avs, uint96(operatorSet.operatorSetId))); + } + + /// @dev Returns an `OperatorSet` decoded from an encoded 32-byte value. + /// @param encoded The encoded `OperatorSet` to decode. + /// @dev Assumes `encoded` is encoded via `_encodeOperatorSet(operatorSet)`. + function _decodeOperatorSet(bytes32 encoded) internal pure returns (OperatorSet memory) { + return OperatorSet({ + avs: address(uint160(uint256(encoded) >> 96)), + operatorSetId: uint32(uint256(encoded) & type(uint96).max) + }); } } diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index 836c954b6..8b8d57739 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/AVSDirectoryStorage.sol @@ -1,10 +1,15 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; +import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; + import "../interfaces/IAVSDirectory.sol"; import "../interfaces/IDelegationManager.sol"; abstract contract AVSDirectoryStorage is IAVSDirectory { + using EnumerableSet for EnumerableSet.Bytes32Set; + using EnumerableSet for EnumerableSet.AddressSet; + /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); @@ -13,6 +18,14 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { bytes32 public constant OPERATOR_AVS_REGISTRATION_TYPEHASH = keccak256("OperatorAVSRegistration(address operator,address avs,bytes32 salt,uint256 expiry)"); + /// @notice The EIP-712 typehash for the `OperatorSetRegistration` struct used by the contract + bytes32 public constant OPERATOR_SET_REGISTRATION_TYPEHASH = + keccak256("OperatorSetRegistration(address avs,uint32[] operatorSetIds,bytes32 salt,uint256 expiry)"); + + /// @notice The EIP-712 typehash for the `OperatorSetMembership` struct used by the contract + bytes32 public constant OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH = + keccak256("OperatorSetForceDeregistration(address avs,uint32[] operatorSetIds,bytes32 salt,uint256 expiry)"); + /// @notice The DelegationManager contract for EigenLayer IDelegationManager public immutable delegation; @@ -23,16 +36,28 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { */ bytes32 internal _DOMAIN_SEPARATOR; - /// @notice Mapping: AVS => operator => enum of operator status to the AVS + /// @notice Mapping: avs => operator => OperatorAVSRegistrationStatus struct + /// @dev This storage will be deprecated once M2 based deregistration is deprecated. mapping(address => mapping(address => OperatorAVSRegistrationStatus)) public avsOperatorStatus; - /// @notice Mapping: operator => 32-byte salt => whether or not the salt has already been used by the operator. - /// @dev Salt is used in the `registerOperatorToAVS` function. + /// @notice Mapping: operator => salt => Whether the salt has been used or not. mapping(address => mapping(bytes32 => bool)) public operatorSaltIsSpent; - constructor( - IDelegationManager _delegation - ) { + /// @notice Mapping: avs => Whether it is a an operator set AVS or not. + mapping(address => bool) public isOperatorSetAVS; + + /// @notice Mapping: avs => operatorSetId => Whether or not an operator set is valid. + mapping(address => mapping(uint32 => bool)) public isOperatorSet; + + /// @notice Mapping: operator => List of operator sets that operator is registered to. + /// @dev Each item is formatted as such: bytes32(abi.encodePacked(avs, uint96(operatorSetId))) + mapping(address => EnumerableSet.Bytes32Set) internal _operatorSetsMemberOf; + + /// @notice Mapping: operatorSet => List of operators that are registered to the operatorSet + /// @dev Each key is formatted as such: bytes32(abi.encodePacked(avs, uint96(operatorSetId))) + mapping(bytes32 => EnumerableSet.AddressSet) internal _operatorSetMembers; + + constructor(IDelegationManager _delegation) { delegation = _delegation; } @@ -41,5 +66,5 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ - uint256[47] private __gap; + uint256[43] private __gap; } diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 770811ede..930684abc 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -557,6 +557,7 @@ contract DelegationManager is ++i; } } + // Award shares back in StrategyManager/EigenPodManager. If withdrawer is delegated, increase the shares delegated to the operator } else { // Award shares back in StrategyManager/EigenPodManager. // If withdrawer is delegated, increase the shares delegated to the operator. diff --git a/src/contracts/core/RewardsCoordinator.sol b/src/contracts/core/RewardsCoordinator.sol index 56260be6c..fe626e91b 100644 --- a/src/contracts/core/RewardsCoordinator.sol +++ b/src/contracts/core/RewardsCoordinator.sol @@ -34,6 +34,10 @@ contract RewardsCoordinator is uint256 internal immutable ORIGINAL_CHAIN_ID; /// @notice The maximum rewards token amount for a single rewards submission, constrained by off-chain calculation uint256 internal constant MAX_REWARDS_AMOUNT = 1e38 - 1; + /// @notice The activation delay until an updated operator's commission bips takes effect + uint32 internal constant OPERATOR_COMMISSION_ACTIVATION_DELAY = 7 days; + /// @notice The maximum commission bips that can be set for an operator + uint16 internal constant MAX_COMMISSION_BIPS = 10_000; /// @dev Index for flag that pauses calling createAVSRewardsSubmission uint8 internal constant PAUSED_AVS_REWARDS_SUBMISSION = 0; @@ -43,8 +47,8 @@ contract RewardsCoordinator is uint8 internal constant PAUSED_PROCESS_CLAIM = 2; /// @dev Index for flag that pauses submitRoots and disableRoot uint8 internal constant PAUSED_SUBMIT_DISABLE_ROOTS = 3; - /// @dev Index for flag that pauses calling rewardAllStakersAndOperators - uint8 internal constant PAUSED_REWARD_ALL_STAKERS_AND_OPERATORS = 4; + /// @dev Index for flag that pauses calling rewardOperatorSetForRange + uint8 internal constant PAUSED_REWARD_OPERATOR_SET = 5; /// @dev Salt for the earner leaf, meant to distinguish from tokenLeaf since they have the same sized data uint8 internal constant EARNER_LEAF_SALT = 0; @@ -68,20 +72,26 @@ contract RewardsCoordinator is constructor( IDelegationManager _delegationManager, IStrategyManager _strategyManager, + IAVSDirectory _avsDirectory, uint32 _CALCULATION_INTERVAL_SECONDS, uint32 _MAX_REWARDS_DURATION, uint32 _MAX_RETROACTIVE_LENGTH, uint32 _MAX_FUTURE_LENGTH, - uint32 __GENESIS_REWARDS_TIMESTAMP + uint32 _GENESIS_REWARDS_TIMESTAMP, + uint32 _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + uint32 _OPERATOR_SET_MAX_RETROACTIVE_LENGTH ) RewardsCoordinatorStorage( _delegationManager, _strategyManager, + _avsDirectory, _CALCULATION_INTERVAL_SECONDS, _MAX_REWARDS_DURATION, _MAX_RETROACTIVE_LENGTH, _MAX_FUTURE_LENGTH, - __GENESIS_REWARDS_TIMESTAMP + _GENESIS_REWARDS_TIMESTAMP, + _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + _OPERATOR_SET_MAX_RETROACTIVE_LENGTH ) { _disableInitializers(); @@ -115,7 +125,9 @@ contract RewardsCoordinator is */ /** - * @notice Creates a new rewards submission on behalf of an AVS, to be split amongst the + * @notice Legacy interface to be DEPRECATED in future releases. See rewardOperatorSetForRange + * for a more updated interface. + * Creates a new rewards submission on behalf of an AVS, to be split amongst the * set of stakers delegated to operators who are registered to the `avs` * @param rewardsSubmissions The rewards submissions being created * @dev Expected to be called by the ServiceManager of the AVS on behalf of which the submission is being made @@ -125,21 +137,35 @@ contract RewardsCoordinator is * @dev This function will revert if the `rewardsSubmission` is malformed, * e.g. if the `strategies` and `weights` arrays are of non-equal lengths */ - function createAVSRewardsSubmission( - RewardsSubmission[] calldata rewardsSubmissions - ) external onlyWhenNotPaused(PAUSED_AVS_REWARDS_SUBMISSION) nonReentrant { - for (uint256 i = 0; i < rewardsSubmissions.length; i++) { + function createAVSRewardsSubmission(RewardsSubmission[] calldata rewardsSubmissions) + external + onlyWhenNotPaused(PAUSED_AVS_REWARDS_SUBMISSION) + nonReentrant + { + for (uint256 i = 0; i < rewardsSubmissions.length;) { RewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; bytes32 rewardsSubmissionHash = keccak256(abi.encode(msg.sender, nonce, rewardsSubmission)); - _validateRewardsSubmission(rewardsSubmission); + _validateRewardsSubmission( + rewardsSubmission.strategiesAndMultipliers, + rewardsSubmission.token, + rewardsSubmission.amount, + rewardsSubmission.startTimestamp, + rewardsSubmission.duration, + MAX_RETROACTIVE_LENGTH, + GENESIS_REWARDS_TIMESTAMP + ); isAVSRewardsSubmissionHash[msg.sender][rewardsSubmissionHash] = true; submissionNonce[msg.sender] = nonce + 1; emit AVSRewardsSubmissionCreated(msg.sender, nonce, rewardsSubmissionHash, rewardsSubmission); rewardsSubmission.token.safeTransferFrom(msg.sender, address(this), rewardsSubmission.amount); + + unchecked { + ++i; + } } } @@ -149,21 +175,85 @@ contract RewardsCoordinator is * a permissioned call based on isRewardsForAllSubmitter mapping. * @param rewardsSubmissions The rewards submissions being created */ - function createRewardsForAllSubmission( - RewardsSubmission[] calldata rewardsSubmissions - ) external onlyWhenNotPaused(PAUSED_REWARDS_FOR_ALL_SUBMISSION) onlyRewardsForAllSubmitter nonReentrant { - for (uint256 i = 0; i < rewardsSubmissions.length; i++) { + function createRewardsForAllSubmission(RewardsSubmission[] calldata rewardsSubmissions) + external + onlyWhenNotPaused(PAUSED_REWARDS_FOR_ALL_SUBMISSION) + onlyRewardsForAllSubmitter + nonReentrant + { + for (uint256 i = 0; i < rewardsSubmissions.length;) { RewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; bytes32 rewardsSubmissionForAllHash = keccak256(abi.encode(msg.sender, nonce, rewardsSubmission)); - _validateRewardsSubmission(rewardsSubmission); + _validateRewardsSubmission( + rewardsSubmission.strategiesAndMultipliers, + rewardsSubmission.token, + rewardsSubmission.amount, + rewardsSubmission.startTimestamp, + rewardsSubmission.duration, + MAX_RETROACTIVE_LENGTH, + GENESIS_REWARDS_TIMESTAMP + ); isRewardsSubmissionForAllHash[msg.sender][rewardsSubmissionForAllHash] = true; submissionNonce[msg.sender] = nonce + 1; emit RewardsSubmissionForAllCreated(msg.sender, nonce, rewardsSubmissionForAllHash, rewardsSubmission); rewardsSubmission.token.safeTransferFrom(msg.sender, address(this), rewardsSubmission.amount); + + unchecked { + ++i; + } + } + } + + /** + * @notice Creates a new rewards submission on behalf of an AVS for a given operatorSet, + * to be split amongst the set of stakers delegated to operators who are + * registered to the msg.sender AVS and the given operatorSetId + * + * @param rewardsSubmissions The operatorSet rewards submission being created for + * + * @dev msg.sender is the AVS in the operatorSet the rewards submission is being made to + * @dev AVSs set their reward type depending on what metric they want rewards + * distributed proportional to + * @dev The tokens in the rewards submissions are sent to the `RewardsCoordinator` contract + * @dev Strategies of each rewards submission must be in ascending order of addresses to check for duplicates + */ + function rewardOperatorSetForRange(OperatorSetRewardsSubmission[] calldata rewardsSubmissions) + external + onlyWhenNotPaused(PAUSED_REWARD_OPERATOR_SET) + nonReentrant + { + for (uint256 i = 0; i < rewardsSubmissions.length;) { + OperatorSetRewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; + uint256 nonce = submissionNonce[msg.sender]; + bytes32 rewardsSubmissionHash = keccak256(abi.encode(msg.sender, nonce, rewardsSubmission)); + + require( + avsDirectory.isOperatorSet(msg.sender, rewardsSubmission.operatorSetId), + "RewardsCoordinator.rewardOperatorSetForRange: invalid operatorSet" + ); + _validateRewardsSubmission( + rewardsSubmission.strategiesAndMultipliers, + rewardsSubmission.token, + rewardsSubmission.amount, + rewardsSubmission.startTimestamp, + rewardsSubmission.duration, + OPERATOR_SET_MAX_RETROACTIVE_LENGTH, + OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP + ); + + isAVSRewardsSubmissionHash[msg.sender][rewardsSubmissionHash] = true; + submissionNonce[msg.sender] = nonce + 1; + + emit OperatorSetRewardCreated(msg.sender, nonce, rewardsSubmissionHash, rewardsSubmission); + rewardsSubmission.token.safeTransferFrom(msg.sender, address(this), rewardsSubmission.amount); + + unchecked { + ++i; + } } } @@ -218,8 +308,8 @@ contract RewardsCoordinator is if (claimer == address(0)) { claimer = earner; } - require(msg.sender == claimer, InvalidClaimer()); - for (uint256 i = 0; i < claim.tokenIndices.length; i++) { + require(msg.sender == claimer, "RewardsCoordinator.processClaim: caller is not valid claimer"); + for (uint256 i = 0; i < claim.tokenIndices.length; ++i) { TokenTreeMerkleLeaf calldata tokenLeaf = claim.tokenLeaves[i]; uint256 currCumulativeClaimed = cumulativeClaimed[earner][tokenLeaf.token]; @@ -291,6 +381,42 @@ contract RewardsCoordinator is emit ClaimerForSet(earner, prevClaimer, claimer); } + /** + * @notice Sets the commission an operator takes in bips for a given reward type and operatorSet + * @param operatorSet The operatorSet to update commission for + * @param rewardType The associated rewardType to update commission for + * @param commissionBips The commission in bips for the operator, must be <= MAX_COMMISSION_BIPS + * @return effectTimestamp The timestamp at which the operator commission update will take effect + * + * @dev The commission can range from 1 to 10000 + * @dev The commission update takes effect after 7 days + */ + function setOperatorCommissionBips( + IAVSDirectory.OperatorSet calldata operatorSet, + RewardType rewardType, + uint16 commissionBips + ) external returns (uint32 effectTimestamp) { + require( + commissionBips <= MAX_COMMISSION_BIPS, + "RewardsCoordinator.setOperatorCommissionBips: commissionBips too high" + ); + effectTimestamp = uint32(block.timestamp + OPERATOR_COMMISSION_ACTIVATION_DELAY); + OperatorCommissionUpdate[] storage commissionHistory = + operatorCommissionUpdates[msg.sender][operatorSet.avs][operatorSet.operatorSetId][rewardType]; + uint256 updateLength = commissionHistory.length; + + // If no updates or latest update is not for current effective timestamp, push a new commission update + // otherwise modify current storage + if (updateLength == 0 || commissionHistory[updateLength - 1].effectTimestamp != effectTimestamp) { + commissionHistory.push( + OperatorCommissionUpdate({commissionBips: commissionBips, effectTimestamp: effectTimestamp}) + ); + } else { + commissionHistory[updateLength - 1].commissionBips = commissionBips; + } + emit OperatorCommissionUpdated(msg.sender, operatorSet, rewardType, commissionBips, effectTimestamp); + } + /** * @notice Sets the delay in timestamp before a posted root can be claimed against * @dev Only callable by the contract owner @@ -343,34 +469,50 @@ contract RewardsCoordinator is */ /** - * @notice Validate a RewardsSubmission. Called from both `createAVSRewardsSubmission` and `createRewardsForAllSubmission` + * @notice Validate a RewardsSubmission. Called from `createAVSRewardsSubmission`, `createRewardsForAllSubmission`, + * and `rewardOperatorSetForRange` + * + * @dev The callee must specify the `retroactiveLength` and `genesisRewardsTimestamp` as those values + * are different depending on the rewards submission type. */ function _validateRewardsSubmission( - RewardsSubmission calldata rewardsSubmission + StrategyAndMultiplier[] calldata strategiesAndMultipliers, + IERC20 token, + uint256 amount, + uint32 startTimestamp, + uint32 duration, + uint32 maxRetroactiveLength, + uint32 genesisRewardsTimestamp ) internal view { - require(rewardsSubmission.strategiesAndMultipliers.length > 0, InputArrayLengthZero()); - require(rewardsSubmission.amount > 0, AmountZero()); - require(rewardsSubmission.amount <= MAX_REWARDS_AMOUNT, AmountExceedsMax()); - require(rewardsSubmission.duration <= MAX_REWARDS_DURATION, DurationExceedsMax()); + require(strategiesAndMultipliers.length > 0, "RewardsCoordinator._validateRewardsSubmission: no strategies set"); + require(amount > 0, "RewardsCoordinator._validateRewardsSubmission: amount cannot be 0"); + require(amount <= MAX_REWARDS_AMOUNT, "RewardsCoordinator._validateRewardsSubmission: amount too large"); + require( + duration <= MAX_REWARDS_DURATION, + "RewardsCoordinator._validateRewardsSubmission: duration exceeds MAX_REWARDS_DURATION" + ); + require( + duration % CALCULATION_INTERVAL_SECONDS == 0, + "RewardsCoordinator._validateRewardsSubmission: duration must be a multiple of CALCULATION_INTERVAL_SECONDS" + ); require( - rewardsSubmission.duration % CALCULATION_INTERVAL_SECONDS == 0, - DurationNotMultipleOfCalculationIntervalSeconds() + startTimestamp % CALCULATION_INTERVAL_SECONDS == 0, + "RewardsCoordinator._validateRewardsSubmission: startTimestamp must be a multiple of CALCULATION_INTERVAL_SECONDS" ); require( - rewardsSubmission.startTimestamp % CALCULATION_INTERVAL_SECONDS == 0, - StartTimestampNotMultipleOfCalculationIntervalSeconds() + block.timestamp - maxRetroactiveLength <= startTimestamp && genesisRewardsTimestamp <= startTimestamp, + "RewardsCoordinator._validateRewardsSubmission: startTimestamp too far in the past" ); require( - block.timestamp - MAX_RETROACTIVE_LENGTH <= rewardsSubmission.startTimestamp - && GENESIS_REWARDS_TIMESTAMP <= rewardsSubmission.startTimestamp, - StartTimestampTooFarInPast() + startTimestamp <= block.timestamp + MAX_FUTURE_LENGTH, + "RewardsCoordinator._validateRewardsSubmission: startTimestamp too far in the future" ); require(rewardsSubmission.startTimestamp <= block.timestamp + MAX_FUTURE_LENGTH, StartTimestampTooFarInFuture()); // Require rewardsSubmission is for whitelisted strategy or beaconChainETHStrategy address currAddress = address(0); - for (uint256 i = 0; i < rewardsSubmission.strategiesAndMultipliers.length; ++i) { - IStrategy strategy = rewardsSubmission.strategiesAndMultipliers[i].strategy; + for (uint256 i = 0; i < strategiesAndMultipliers.length; ++i) { + IStrategy strategy = strategiesAndMultipliers[i].strategy; require( strategyManager.strategyIsWhitelistedForDeposit(strategy) || strategy == beaconChainETHStrategy, InvalidStrategy() @@ -517,10 +659,29 @@ contract RewardsCoordinator is return true; } - /// @notice the commission for a specific operator for a specific avs + /// @notice the commission for an operator for a specific operatorSet and reward type /// NOTE: Currently unused and simply returns the globalOperatorCommissionBips value but will be used in future release - function operatorCommissionBips(address operator, address avs) external view returns (uint16) { - return globalOperatorCommissionBips; + function getOperatorCommissionBips( + address operator, + IAVSDirectory.OperatorSet calldata operatorSet, + RewardType rewardType + ) external view returns (uint16) { + // if no value set, default to globalOperatorCommissionBips + uint16 commissionBips = globalOperatorCommissionBips; + OperatorCommissionUpdate[] memory commissionHistory = + operatorCommissionUpdates[operator][operatorSet.avs][operatorSet.operatorSetId][rewardType]; + + for (uint256 i = commissionHistory.length; i > 0;) { + if (commissionHistory[i - 1].effectTimestamp <= uint32(block.timestamp)) { + commissionBips = commissionHistory[i - 1].commissionBips; + break; + } + + unchecked { + --i; + } + } + return commissionBips; } function getDistributionRootsLength() public view returns (uint256) { @@ -561,6 +722,15 @@ contract RewardsCoordinator is revert InvalidRoot(); } + /// @notice returns the length of the operator commission update history + function getOperatorCommissionUpdateHistoryLength( + address operator, + IAVSDirectory.OperatorSet calldata operatorSet, + RewardType rewardType + ) external view returns (uint256) { + return operatorCommissionUpdates[operator][operatorSet.avs][operatorSet.operatorSetId][rewardType].length; + } + /** * @notice Getter function for the current EIP-712 domain separator for this contract. * diff --git a/src/contracts/core/RewardsCoordinatorStorage.sol b/src/contracts/core/RewardsCoordinatorStorage.sol index 253398d42..5a8a677b1 100644 --- a/src/contracts/core/RewardsCoordinatorStorage.sol +++ b/src/contracts/core/RewardsCoordinatorStorage.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.27; import "../interfaces/IStrategyManager.sol"; import "../interfaces/IDelegationManager.sol"; +import "../interfaces/IAVSDirectory.sol"; import "../interfaces/IRewardsCoordinator.sol"; /** @@ -18,26 +19,38 @@ abstract contract RewardsCoordinatorStorage is IRewardsCoordinator { * */ + // Constants for all reward types /// @notice The interval in seconds at which the calculation for rewards distribution is done. - /// @dev RewardsSubmission durations must be multiples of this interval. This is going to be configured to 1 week + /// @dev ALL RewardsSubmission durations must be multiples of this interval. This is going to be configured to 1 week uint32 public immutable CALCULATION_INTERVAL_SECONDS; - /// @notice The maximum amount of time (seconds) that a rewards submission can span over + /// @notice The maximum amount of time (seconds) that ALL rewards submission can span over uint32 public immutable MAX_REWARDS_DURATION; - /// @notice max amount of time (seconds) that a rewards submission can start in the past - uint32 public immutable MAX_RETROACTIVE_LENGTH; - /// @notice max amount of time (seconds) that a rewards submission can start in the future + /// @notice max amount of time (seconds) that ALL rewards submission can start in the future uint32 public immutable MAX_FUTURE_LENGTH; - /// @notice absolute min timestamp (seconds) that a rewards submission can start at - uint32 public immutable GENESIS_REWARDS_TIMESTAMP; /// @notice The cadence at which a snapshot is taken offchain for calculating rewards distributions uint32 internal constant SNAPSHOT_CADENCE = 1 days; + // V1 Rewards Constants + /// @notice absolute min timestamp (seconds) that a V1 rewards submission can start at + uint32 public immutable GENESIS_REWARDS_TIMESTAMP; + /// @notice max amount of time (seconds) that a V1 rewards submission can start in the past + uint32 public immutable MAX_RETROACTIVE_LENGTH; + + // OperatorSet Rewards Constants + /// @notice absolute min timestamp (seconds) that an operatorSet rewards submission can start at + uint32 public immutable OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP; + /// @notice max of time (seconds) that an operatorSet rewards submission can start in the past + uint32 public immutable OPERATOR_SET_MAX_RETROACTIVE_LENGTH; + /// @notice The DelegationManager contract for EigenLayer IDelegationManager public immutable delegationManager; /// @notice The StrategyManager contract for EigenLayer IStrategyManager public immutable strategyManager; + /// @notice The AVSDirectory contract for EigenLayer + IAVSDirectory public immutable avsDirectory; + /** * * STORAGE @@ -79,7 +92,7 @@ abstract contract RewardsCoordinatorStorage is IRewardsCoordinator { /// @notice Mapping: avs => avsRewardsSubmissionHash => bool to check if rewards submission hash has been submitted mapping(address => mapping(bytes32 => bool)) public isAVSRewardsSubmissionHash; - /// @notice Mapping: avs => rewardsSubmissionForAllHash => bool to check if rewards submission hash for all has been submitted + /// @notice Mapping: rewardsSubmitterForAll => rewardsSubmissionForAllHash => bool to check if rewards submission hash for all has been submitted mapping(address => mapping(bytes32 => bool)) public isRewardsSubmissionForAllHash; /// @notice Mapping: address => bool to check if the address is permissioned to call createRewardsForAllSubmission @@ -88,15 +101,24 @@ abstract contract RewardsCoordinatorStorage is IRewardsCoordinator { /// @notice Mapping: avs => rewardsSubmissionForAllEarnersHash => bool to check /// if rewards submission hash for all stakers and operators has been submitted mapping(address => mapping(bytes32 => bool)) public isRewardsSubmissionForAllEarnersHash; + /// @notice Mapping: avs => rewardsSubmissionHash => bool to check if operatorSet rewards submission hash has been submitted + mapping(address => mapping(bytes32 => bool)) isOperatorSetRewardsSubmissionHash; + + /// @notice Mapping: operator => avs => operatorSetId => OperatorCommissionUpdate history + mapping(address => mapping(address => mapping(uint32 => mapping(RewardType => OperatorCommissionUpdate[])))) public + operatorCommissionUpdates; constructor( IDelegationManager _delegationManager, IStrategyManager _strategyManager, + IAVSDirectory _avsDirectory, uint32 _CALCULATION_INTERVAL_SECONDS, uint32 _MAX_REWARDS_DURATION, uint32 _MAX_RETROACTIVE_LENGTH, uint32 _MAX_FUTURE_LENGTH, - uint32 _GENESIS_REWARDS_TIMESTAMP + uint32 _GENESIS_REWARDS_TIMESTAMP, + uint32 _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + uint32 _OPERATOR_SET_MAX_RETROACTIVE_LENGTH ) { require( _GENESIS_REWARDS_TIMESTAMP % _CALCULATION_INTERVAL_SECONDS == 0, @@ -106,13 +128,20 @@ abstract contract RewardsCoordinatorStorage is IRewardsCoordinator { _CALCULATION_INTERVAL_SECONDS % SNAPSHOT_CADENCE == 0, "RewardsCoordinator: CALCULATION_INTERVAL_SECONDS must be a multiple of SNAPSHOT_CADENCE" ); + require( + _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP % _CALCULATION_INTERVAL_SECONDS == 0, + "RewardsCoordinator: OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP must be a multiple of CALCULATION_INTERVAL_SECONDS" + ); delegationManager = _delegationManager; strategyManager = _strategyManager; + avsDirectory = _avsDirectory; CALCULATION_INTERVAL_SECONDS = _CALCULATION_INTERVAL_SECONDS; MAX_REWARDS_DURATION = _MAX_REWARDS_DURATION; MAX_RETROACTIVE_LENGTH = _MAX_RETROACTIVE_LENGTH; MAX_FUTURE_LENGTH = _MAX_FUTURE_LENGTH; GENESIS_REWARDS_TIMESTAMP = _GENESIS_REWARDS_TIMESTAMP; + OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP = _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP; + OPERATOR_SET_MAX_RETROACTIVE_LENGTH = _OPERATOR_SET_MAX_RETROACTIVE_LENGTH; } /** @@ -120,5 +149,5 @@ abstract contract RewardsCoordinatorStorage is IRewardsCoordinator { * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ - uint256[39] private __gap; + uint256[37] private __gap; } diff --git a/src/contracts/interfaces/IAVSDirectory.sol b/src/contracts/interfaces/IAVSDirectory.sol index 8e81ee696..dac8aa3c9 100644 --- a/src/contracts/interfaces/IAVSDirectory.sol +++ b/src/contracts/interfaces/IAVSDirectory.sol @@ -4,41 +4,138 @@ pragma solidity >=0.5.0; import "./ISignatureUtils.sol"; interface IAVSDirectory is ISignatureUtils { - /// @dev Thrown when an invalid AVS is provided. - error InvalidAVS(); - /// @dev Thrown when an invalid operator is provided. - error InvalidOperator(); - /// @dev Thrown when an invalid operator set is provided. - error InvalidOperatorSet(); - /// @dev Thrown when `operator` is not a registered operator. - error OperatorNotRegistered(); - /// @dev Thrown when attempting to spend a spent eip-712 salt. - error SaltSpent(); - /// @dev Thrown when attempting to use an expired eip-712 signature. - error SignatureExpired(); - - /// @notice Enum representing the status of an operator's registration with an AVS + /// @notice Enum representing the registration status of an operator with an AVS. + /// @notice Only used by legacy M2 AVSs that have not integrated with operatorSets. enum OperatorAVSRegistrationStatus { UNREGISTERED, // Operator not registered to AVS REGISTERED // Operator registered to AVS } + /// @notice Struct representing an operator set + struct OperatorSet { + address avs; + uint32 operatorSetId; + } + + /// @notice Emitted when an operator set is created by an AVS. + event OperatorSetCreated(OperatorSet operatorSet); + /** - * @notice Emitted when @param avs indicates that they are updating their MetadataURI string - * @dev Note that these strings are *never stored in storage* and are instead purely emitted in events for off-chain indexing + * @notice Emitted when an operator's registration status with an AVS id udpated + * @notice Only used by legacy M2 AVSs that have not integrated with operatorSets. */ - event AVSMetadataURIUpdated(address indexed avs, string metadataURI); - - /// @notice Emitted when an operator's registration status for an AVS is updated event OperatorAVSRegistrationStatusUpdated( address indexed operator, address indexed avs, OperatorAVSRegistrationStatus status ); + /// @notice Emitted when an operator is added to an operator set. + event OperatorAddedToOperatorSet(address indexed operator, OperatorSet operatorSet); + + /// @notice Emitted when an operator is removed from an operator set. + event OperatorRemovedFromOperatorSet(address indexed operator, OperatorSet operatorSet); + + /// @notice Emitted when an AVS updates their metadata URI (Uniform Resource Identifier). + /// @dev The URI is never stored; it is simply emitted through an event for off-chain indexing. + event AVSMetadataURIUpdated(address indexed avs, string metadataURI); + + /// @notice Emitted when an AVS migrates to using operator sets. + event AVSMigratedToOperatorSets(address indexed avs); + + /// @notice Emitted when an operator is migrated from M2 registration to operator sets. + event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds); + /** - * @notice Called by an avs to register an operator with the avs. - * @param operator The address of the operator to register. - * @param operatorSignature The signature, salt, and expiry of the operator's signature. + * + * EXTERNAL FUNCTIONS + * + */ + + /** + * @notice Called by an AVS to create a list of new operatorSets. + * + * @param operatorSetIds The IDs of the operator set to initialize. + * + * @dev msg.sender must be the AVS. + * @dev The AVS may create operator sets before it becomes an operator set AVS. + */ + function createOperatorSets(uint32[] calldata operatorSetIds) external; + + /** + * @notice Sets the AVS as an operator set AVS, preventing legacy M2 operator registrations. + * + * @dev msg.sender must be the AVS. + */ + function becomeOperatorSetAVS() external; + + /** + * @notice Called by an AVS to migrate operators that have a legacy M2 registration to operator sets. + * + * @param operators The list of operators to migrate + * @param operatorSetIds The list of operatorSets to migrate the operators to + * + * @dev The msg.sender used is the AVS + * @dev The operator can only be migrated at most once per AVS + * @dev The AVS can no longer register operators via the legacy M2 registration path once it begins migration + * @dev The operator is deregistered from the M2 legacy AVS once migrated + */ + function migrateOperatorsToOperatorSets( + address[] calldata operators, + uint32[][] calldata operatorSetIds + ) external; + + /** + * @notice Called by AVSs to add an operator to list of operatorSets. + * + * @param operator The address of the operator to be added to the operator set. + * @param operatorSetIds The IDs of the operator sets. + * @param operatorSignature The signature of the operator on their intent to register. + * + * @dev msg.sender is used as the AVS. + * @dev The operator must not have a pending deregistration from the operator set. + */ + function registerOperatorToOperatorSets( + address operator, + uint32[] calldata operatorSetIds, + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature + ) external; + + /** + * @notice Called by AVSs to remove an operator from an operator set. + * + * @param operator The address of the operator to be removed from the operator set. + * @param operatorSetIds The IDs of the operator sets. + * + * @dev msg.sender is used as the AVS. + */ + function deregisterOperatorFromOperatorSets(address operator, uint32[] calldata operatorSetIds) external; + + /** + * @notice Called by an operator to deregister from an operator set + * + * @param operator The operator to deregister from the operatorSets. + * @param avs The address of the AVS to deregister the operator from. + * @param operatorSetIds The IDs of the operator sets. + * @param operatorSignature the signature of the operator on their intent to deregister or empty if the operator itself is calling + * + * @dev if the operatorSignature is empty, the caller must be the operator + * @dev this will likely only be called in case the AVS contracts are in a state that prevents operators from deregistering + */ + function forceDeregisterFromOperatorSets( + address operator, + address avs, + uint32[] calldata operatorSetIds, + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature + ) external; + + /** + * @notice Called by the AVS's service manager contract to register an operator with the AVS. + * + * @param operator The address of the operator to register. + * @param operatorSignature The signature, salt, and expiry of the operator's signature. + * + * @dev msg.sender must be the AVS. + * @dev Only used by legacy M2 AVSs that have not integrated with operator sets. */ function registerOperatorToAVS( address operator, @@ -46,34 +143,104 @@ interface IAVSDirectory is ISignatureUtils { ) external; /** - * @notice Called by an avs to deregister an operator with the avs. - * @param operator The address of the operator to deregister. + * @notice Called by an AVS to deregister an operator from the AVS. + * + * @param operator The address of the operator to deregister. + * + * @dev Only used by legacy M2 AVSs that have not integrated with operator sets. */ function deregisterOperatorFromAVS( address operator ) external; /** - * @notice Called by an AVS to emit an `AVSMetadataURIUpdated` event indicating the information has updated. - * @param metadataURI The URI for metadata associated with an AVS - * @dev Note that the `metadataURI` is *never stored * and is only emitted in the `AVSMetadataURIUpdated` event + * @notice Called by an AVS to emit an `AVSMetadataURIUpdated` event indicating the information has updated. + * + * @param metadataURI The URI for metadata associated with an AVS. + * + * @dev Note that the `metadataURI` is *never stored* and is only emitted in the `AVSMetadataURIUpdated` event. */ function updateAVSMetadataURI( string calldata metadataURI ) external; /** - * @notice Returns whether or not the salt has already been used by the operator. - * @dev Salts is used in the `registerOperatorToAVS` function. + * @notice Called by an operator to cancel a salt that has been used to register with an AVS. + * + * @param salt A unique and single use value associated with the approver signature. + */ + function cancelSalt(bytes32 salt) external; + + /** + * + * VIEW FUNCTIONS + * */ function operatorSaltIsSpent(address operator, bytes32 salt) external view returns (bool); + function isMember(address operator, OperatorSet memory operatorSet) external view returns (bool); + + function isOperatorSetAVS(address avs) external view returns (bool); + + function isOperatorSet(address avs, uint32 operatorSetId) external view returns (bool); + /** - * @notice Calculates the digest hash to be signed by an operator to register with an AVS - * @param operator The account registering as an operator - * @param avs The AVS the operator is registering to - * @param salt A unique and single use value associated with the approver signature. - * @param expiry Time after which the approver's signature becomes invalid + * @notice Returns operator set an operator is registered to in the order they were registered. + * @param operator The operator address to query. + * @param index The index of the enumerated list of operator sets. + */ + function operatorSetsMemberOfAtIndex(address operator, uint256 index) external view returns (OperatorSet memory); + + /** + * @notice Retursn the operator registered to an operatorSet in the order that it was registered. + * @param operatorSet The operatorSet to query. + * @param index The index of the enumerated list of operators. + */ + function operatorSetMemberAtIndex(OperatorSet memory operatorSet, uint256 index) external view returns (address); + + /** + * @notice Returns an array of operator sets an operator is registered to. + * @param operator The operator address to query. + * @param start The starting index of the array to query. + * @param length The amount of items of the array to return. + */ + function getOperatorSetsOfOperator( + address operator, + uint256 start, + uint256 length + ) external view returns (OperatorSet[] memory operatorSets); + + /** + * @notice Returns an array of operators registered to the operatorSet. + * @param operatorSet The operatorSet to query. + * @param start The starting index of the array to query. + * @param length The amount of items of the array to return. + */ + function getOperatorsInOperatorSet( + OperatorSet memory operatorSet, + uint256 start, + uint256 length + ) external view returns (address[] memory operators); + + /** + * @notice Returns the number of operators registered to an operatorSet. + * @param operatorSet The operatorSet to get the member count for + */ + function getNumOperatorsInOperatorSet(OperatorSet memory operatorSet) external view returns (uint256); + + /** + * @notice Returns the total number of operator sets an operator is registered to. + * @param operator The operator address to query. + */ + function inTotalOperatorSets(address operator) external view returns (uint256); + + /** + * @notice Calculates the digest hash to be signed by an operator to register with an AVS. + * + * @param operator The account registering as an operator. + * @param avs The AVS the operator is registering with. + * @param salt A unique and single-use value associated with the approver's signature. + * @param expiry The time after which the approver's signature becomes invalid. */ function calculateOperatorAVSRegistrationDigestHash( address operator, @@ -82,6 +249,43 @@ interface IAVSDirectory is ISignatureUtils { uint256 expiry ) external view returns (bytes32); - /// @notice The EIP-712 typehash for the Registration struct used by the contract + /** + * @notice Calculates the digest hash to be signed by an operator to register with an operator set. + * + * @param avs The AVS that operator is registering to operator sets for. + * @param operatorSetIds An array of operator set IDs the operator is registering to. + * @param salt A unique and single use value associated with the approver signature. + * @param expiry Time after which the approver's signature becomes invalid. + */ + function calculateOperatorSetRegistrationDigestHash( + address avs, + uint32[] calldata operatorSetIds, + bytes32 salt, + uint256 expiry + ) external view returns (bytes32); + + /** + * @notice Calculates the digest hash to be signed by an operator to force deregister from an operator set. + * + * @param avs The AVS that operator is deregistering from. + * @param operatorSetIds An array of operator set IDs the operator is deregistering from. + * @param salt A unique and single use value associated with the approver signature. + * @param expiry Time after which the approver's signature becomes invalid. + */ + function calculateOperatorSetForceDeregistrationTypehash( + address avs, + uint32[] calldata operatorSetIds, + bytes32 salt, + uint256 expiry + ) external view returns (bytes32); + + /// @notice Getter function for the current EIP-712 domain separator for this contract. + /// @dev The domain separator will change in the event of a fork that changes the ChainID. + function domainSeparator() external view returns (bytes32); + + /// @notice The EIP-712 typehash for the Registration struct used by the contract. function OPERATOR_AVS_REGISTRATION_TYPEHASH() external view returns (bytes32); + + /// @notice The EIP-712 typehash for the OperatorSetRegistration struct used by the contract. + function OPERATOR_SET_REGISTRATION_TYPEHASH() external view returns (bytes32); } diff --git a/src/contracts/interfaces/IRewardsCoordinator.sol b/src/contracts/interfaces/IRewardsCoordinator.sol index 625ca8b60..5efe08888 100644 --- a/src/contracts/interfaces/IRewardsCoordinator.sol +++ b/src/contracts/interfaces/IRewardsCoordinator.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "./IAVSDirectory.sol"; import "./IStrategy.sol"; /** @@ -70,6 +71,12 @@ interface IRewardsCoordinator { error StrategiesNotInAscendingOrder(); /// STRUCTS /// + + /// @notice Reward type + enum RewardType { + DELEGATED_STAKE + } + /** * @notice A linear combination of strategies and multipliers for AVSs to weigh * EigenLayer strategies. @@ -114,6 +121,32 @@ interface IRewardsCoordinator { uint32 startTimestamp; uint32 duration; } + /** + * @notice OperatorSetRewardsSubmission struct submitted by AVSs when making rewards to operatorSets + * @notice The retroactive range applies from RewardsSubmission + * @param RewardType The type of reward to be distributed for. + * @param operatorSetId The operatorSetId to distribute rewards to + * @param strategiesAndMultipliers The strategies and their relative weights + * cannot have duplicate strategies and need to be sorted in ascending address order + * @param token The rewards token to be distributed + * @param amount The total amount of tokens to be distributed + * @param startTimestamp The timestamp (seconds) at which the submission range is considered for distribution + * could start in the past or in the future but within a valid range. See the diagram above. + * @param duration The duration of the submission range in seconds. Must be <= MAX_REWARDS_DURATION + * @dev The sliding window from `RewardsSubmission` applies to `OperatorSetRewardsSubmission`, with + * using `OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP` instead of `GENESIS_REWARDS_TIMESTAMP` and + * `OPERATOR_SET_MAX_RETROACTIVE_LENGTH` instead of `MAX_RETROACTIVE_LENGTH` + */ + + struct OperatorSetRewardsSubmission { + RewardType rewardType; + uint32 operatorSetId; + StrategyAndMultiplier[] strategiesAndMultipliers; + IERC20 token; + uint256 amount; + uint32 startTimestamp; + uint32 duration; + } /** * @notice A distribution root is a merkle root of the distribution of earnings for a given period. @@ -182,6 +215,12 @@ interface IRewardsCoordinator { TokenTreeMerkleLeaf[] tokenLeaves; } + /// @notice used for setting operator commission bips per operator set + struct OperatorCommissionUpdate { + uint16 commissionBips; + uint32 effectTimestamp; + } + /// EVENTS /// /// @notice emitted when an AVS creates a valid RewardsSubmission @@ -191,6 +230,15 @@ interface IRewardsCoordinator { bytes32 indexed rewardsSubmissionHash, RewardsSubmission rewardsSubmission ); + + /// @notice emitted when an AVS creates a valid OperatorSetRewardsSubmission + event OperatorSetRewardCreated( + address indexed avs, + uint256 indexed submissionNonce, + bytes32 indexed rewardsSubmissionHash, + OperatorSetRewardsSubmission rewardsSubmission + ); + /// @notice emitted when a valid RewardsSubmission is created for all stakers by a valid submitter event RewardsSubmissionForAllCreated( address indexed submitter, @@ -207,12 +255,26 @@ interface IRewardsCoordinator { ); /// @notice rewardsUpdater is responsible for submiting DistributionRoots, only owner can set rewardsUpdater event RewardsUpdaterSet(address indexed oldRewardsUpdater, address indexed newRewardsUpdater); + event RewardsForAllSubmitterSet( address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue ); + event ActivationDelaySet(uint32 oldActivationDelay, uint32 newActivationDelay); + event GlobalCommissionBipsSet(uint16 oldGlobalCommissionBips, uint16 newGlobalCommissionBips); + + /// @notice emitted when an operator commission is set for a specific OperatorSet and RewardType + event OperatorCommissionUpdated( + address indexed operator, + IAVSDirectory.OperatorSet indexed operatorSet, + RewardType rewardType, + uint16 newCommissionBips, + uint32 effectTimestamp + ); + event ClaimerForSet(address indexed earner, address indexed oldClaimer, address indexed claimer); + /// @notice rootIndex is the specific array index of the newly created root in the storage array event DistributionRootSubmitted( uint32 indexed rootIndex, @@ -220,7 +282,9 @@ interface IRewardsCoordinator { uint32 indexed rewardsCalculationEndTimestamp, uint32 activatedAt ); + event DistributionRootDisabled(uint32 indexed rootIndex); + /// @notice root is one of the submitted distribution roots that was claimed against event RewardsClaimed( bytes32 root, @@ -274,7 +338,11 @@ interface IRewardsCoordinator { /// @notice the commission for a specific operator for a specific avs /// NOTE: Currently unused and simply returns the globalOperatorCommissionBips value but will be used in future release - function operatorCommissionBips(address operator, address avs) external view returns (uint16); + function getOperatorCommissionBips( + address operator, + IAVSDirectory.OperatorSet calldata operatorSet, + RewardType rewardType + ) external view returns (uint16); /// @notice return the hash of the earner's leaf function calculateEarnerLeafHash( @@ -315,6 +383,13 @@ interface IRewardsCoordinator { bytes32 rootHash ) external view returns (uint32); + /// @notice returns the length of the operator commission update history + function getOperatorCommissionUpdateHistoryLength( + address operator, + IAVSDirectory.OperatorSet calldata operatorSet, + RewardType rewardType + ) external view returns (uint256); + /** * * EXTERNAL FUNCTIONS @@ -322,7 +397,9 @@ interface IRewardsCoordinator { */ /** - * @notice Creates a new rewards submission on behalf of an AVS, to be split amongst the + * @notice Legacy interface to be DEPRECATED in future releases. See rewardOperatorSetForRange + * for a more updated interface. + * Creates a new rewards submission on behalf of an AVS, to be split amongst the * set of stakers delegated to operators who are registered to the `avs` * @param rewardsSubmissions The rewards submissions being created * @dev Expected to be called by the ServiceManager of the AVS on behalf of which the submission is being made @@ -336,6 +413,21 @@ interface IRewardsCoordinator { RewardsSubmission[] calldata rewardsSubmissions ) external; + /** + * @notice Creates a new rewards submission on behalf of an AVS for a given operatorSet, + * to be split amongst the set of stakers delegated to operators who are + * registered to the msg.sender AVS and the given operatorSetId + * + * @param rewardsSubmissions The operatorSet rewards submission being created for + * + * @dev msg.sender is the AVS in the operatorSet the rewards submission is being made to + * @dev AVSs set their reward type depending on what metric they want rewards + * distributed proportional to + * @dev The tokens in the rewards submissions are sent to the `RewardsCoordinator` contract + * @dev Strategies of each rewards submission must be in ascending order of addresses to check for duplicates + */ + function rewardOperatorSetForRange(OperatorSetRewardsSubmission[] calldata rewardsSubmissions) external; + /** * @notice similar to `createAVSRewardsSubmission` except the rewards are split amongst *all* stakers * rather than just those delegated to operators who are registered to a single avs and is @@ -428,4 +520,20 @@ interface IRewardsCoordinator { * @param _newValue The new value for isRewardsForAllSubmitter */ function setRewardsForAllSubmitter(address _submitter, bool _newValue) external; + + /** + * @notice Sets the commission an operator takes in bips for a given reward type and operatorSet + * @param operatorSet The operatorSet to update commission for + * @param rewardType The associated rewardType to update commission for + * @param commissionBips The commission in bips for the operator, must be <= MAX_COMMISSION_BIPS + * @return effectTimestamp The timestamp at which the operator commission update will take effect + * + * @dev The commission can range from 1 to 10000 + * @dev The commission update takes effect after 7 days + */ + function setOperatorCommissionBips( + IAVSDirectory.OperatorSet calldata operatorSet, + RewardType rewardType, + uint16 commissionBips + ) external returns (uint32); } diff --git a/src/contracts/pods/EigenPodManager.sol b/src/contracts/pods/EigenPodManager.sol index e33b3dda4..31e1ad434 100644 --- a/src/contracts/pods/EigenPodManager.sol +++ b/src/contracts/pods/EigenPodManager.sol @@ -253,6 +253,7 @@ contract EigenPodManager is if (sharesAfter <= 0) { // if the shares started negative and stayed negative, then there cannot have been an increase in delegateable shares return 0; + // if the shares started negative and became positive, then the increase in delegateable shares is the ending share amount } else { // if the shares started negative and became positive, then the increase in delegateable shares is the ending share amount return sharesAfter; diff --git a/src/test/events/IAVSDirectoryEvents.sol b/src/test/events/IAVSDirectoryEvents.sol index 91f5431f2..eb76d867f 100644 --- a/src/test/events/IAVSDirectoryEvents.sol +++ b/src/test/events/IAVSDirectoryEvents.sol @@ -4,12 +4,28 @@ pragma solidity ^0.8.27; import "src/contracts/interfaces/IAVSDirectory.sol"; interface IAVSDirectoryEvents { + /// @notice Emitted when an operator set is created by an AVS. + event OperatorSetCreated(IAVSDirectory.OperatorSet operatorSet); + /** - * @notice Emitted when @param avs indicates that they are updating their MetadataURI string - * @dev Note that these strings are *never stored in storage* and are instead purely emitted in events for off-chain indexing + * @notice Emitted when an operator's registration status with an AVS id udpated + * @notice Only used by legacy M2 AVSs that have not integrated with operatorSets. */ + event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, IAVSDirectory.OperatorAVSRegistrationStatus status); + + /// @notice Emitted when an operator is added to an operator set. + event OperatorAddedToOperatorSet(address indexed operator, IAVSDirectory.OperatorSet operatorSet); + + /// @notice Emitted when an operator is removed from an operator set. + event OperatorRemovedFromOperatorSet(address indexed operator, IAVSDirectory.OperatorSet operatorSet); + + /// @notice Emitted when an AVS updates their metadata URI (Uniform Resource Identifier). + /// @dev The URI is never stored; it is simply emitted through an event for off-chain indexing. event AVSMetadataURIUpdated(address indexed avs, string metadataURI); - /// @notice Emitted when an operator's registration status for an AVS is updated - event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, IAVSDirectory.OperatorAVSRegistrationStatus status); + /// @notice Emitted when an AVS migrates to using operator sets + event AVSMigratedToOperatorSets(address indexed avs); + + /// @notice Emitted when an operator is migrated from M2 registration to operator sets. + event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds); } diff --git a/src/test/events/IRewardsCoordinatorEvents.sol b/src/test/events/IRewardsCoordinatorEvents.sol index 6db8af71c..9664ac4dc 100644 --- a/src/test/events/IRewardsCoordinatorEvents.sol +++ b/src/test/events/IRewardsCoordinatorEvents.sol @@ -36,6 +36,14 @@ interface IRewardsCoordinatorEvents { ); event ActivationDelaySet(uint32 oldActivationDelay, uint32 newActivationDelay); event GlobalCommissionBipsSet(uint16 oldGlobalCommissionBips, uint16 newGlobalCommissionBips); + /// @notice emitted when an operator commission is set for a specific OperatorSet + event OperatorCommissionUpdated( + address indexed operator, + IAVSDirectory.OperatorSet indexed operatorSet, + IRewardsCoordinator.RewardType rewardType, + uint16 newCommissionBips, + uint32 effectTimestamp + ); event ClaimerForSet(address indexed earner, address indexed oldClaimer, address indexed claimer); /// @notice rootIndex is the specific array index of the newly created root in the storage array event DistributionRootSubmitted( @@ -44,6 +52,7 @@ interface IRewardsCoordinatorEvents { uint32 indexed rewardsCalculationEndTimestamp, uint32 activatedAt ); + event DistributionRootDisabled(uint32 indexed rootIndex); /// @notice root is one of the submitted distribution roots that was claimed against event RewardsClaimed( bytes32 root, @@ -53,6 +62,14 @@ interface IRewardsCoordinatorEvents { IERC20 token, uint256 claimedAmount ); + /// @notice emitted when an AVS creates a valid OperatorSetRewardsSubmission + event OperatorSetRewardCreated( + address indexed avs, + uint256 indexed submissionNonce, + bytes32 indexed rewardsSubmissionHash, + IRewardsCoordinator.OperatorSetRewardsSubmission rewardsSubmission + ); + diff --git a/src/test/mocks/AVSDirectoryMock.sol b/src/test/mocks/AVSDirectoryMock.sol new file mode 100644 index 000000000..1cd48c0fb --- /dev/null +++ b/src/test/mocks/AVSDirectoryMock.sol @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.9; + +import "forge-std/Test.sol"; +import "../../contracts/interfaces/IAVSDirectory.sol"; + +contract AVSDirectoryMock is IAVSDirectory, Test { + function createOperatorSets(uint32[] calldata operatorSetIds) external {} + + function becomeOperatorSetAVS() external {} + + function migrateOperatorsToOperatorSets( + address[] calldata operators, + uint32[][] calldata operatorSetIds + ) external {} + + function registerOperatorToOperatorSets( + address operator, + uint32[] calldata operatorSetIds, + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature + ) external {} + + function deregisterOperatorFromOperatorSets(address operator, uint32[] calldata operatorSetIds) external {} + + function forceDeregisterFromOperatorSets( + address operator, + address avs, + uint32[] calldata operatorSetIds, + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature + ) external {} + + function registerOperatorToAVS( + address operator, + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature + ) external {} + + function deregisterOperatorFromAVS(address operator) external {} + + function updateAVSMetadataURI(string calldata metadataURI) external {} + + function cancelSalt(bytes32 salt) external {} + + function operatorSaltIsSpent(address operator, bytes32 salt) external view returns (bool) {} + + function isMember(address avs, address operator, uint32 operatorSetId) external view returns (bool) {} + + function isOperatorSetAVS(address avs) external view returns (bool) {} + + function isOperatorSet(address avs, uint32 operatorSetId) external view returns (bool) { + return true; + } + + function calculateOperatorAVSRegistrationDigestHash( + address operator, + address avs, + bytes32 salt, + uint256 expiry + ) external view returns (bytes32) {} + + function calculateOperatorSetRegistrationDigestHash( + address avs, + uint32[] calldata operatorSetIds, + bytes32 salt, + uint256 expiry + ) external view returns (bytes32) {} + + function calculateOperatorSetForceDeregistrationTypehash( + address avs, + uint32[] calldata operatorSetIds, + bytes32 salt, + uint256 expiry + ) external view returns (bytes32) {} + + /// @notice Getter function for the current EIP-712 domain separator for this contract. + /// @dev The domain separator will change in the event of a fork that changes the ChainID. + function domainSeparator() external view returns (bytes32) {} + + /// @notice The EIP-712 typehash for the Registration struct used by the contract. + function OPERATOR_AVS_REGISTRATION_TYPEHASH() external view returns (bytes32) {} + + /// @notice The EIP-712 typehash for the OperatorSetRegistration struct used by the contract. + function OPERATOR_SET_REGISTRATION_TYPEHASH() external view returns (bytes32) {} + + function isMember(address operator, IAVSDirectory.OperatorSet memory operatorSet) external view returns (bool) {} + + function operatorSetsMemberOfAtIndex(address operator, uint256 index) external view returns (OperatorSet memory) {} + + function operatorSetMemberAtIndex(OperatorSet memory operatorSet, uint256 index) external view returns (address) {} + + function getOperatorSetsOfOperator( + address operator, + uint256 start, + uint256 length + ) external view returns (OperatorSet[] memory operatorSets) {} + + function getOperatorsInOperatorSet( + OperatorSet memory operatorSet, + uint256 start, + uint256 length + ) external view returns (address[] memory operators) {} + + function getNumOperatorsInOperatorSet(OperatorSet memory operatorSet) external view returns (uint256) {} + + function inTotalOperatorSets(address operator) external view returns (uint256) {} +} \ No newline at end of file diff --git a/src/test/unit/AVSDirectoryUnit.t.sol b/src/test/unit/AVSDirectoryUnit.t.sol index d8b6ab3d1..be166b3c4 100644 --- a/src/test/unit/AVSDirectoryUnit.t.sol +++ b/src/test/unit/AVSDirectoryUnit.t.sol @@ -16,6 +16,8 @@ import "src/test/utils/EigenLayerUnitTestSetup.sol"; * Contracts not mocked: DelegationManager */ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { + uint256 internal constant MAX_PRIVATE_KEY = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140; + // Contract under test AVSDirectory avsDirectory; AVSDirectory avsDirectoryImplementation; @@ -40,6 +42,8 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { // Index for flag that pauses registering/deregistering for AVSs uint8 internal constant PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS = 0; + // Index for flag that pauses operator register/deregister to operator sets when set. + uint8 internal constant PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS = 1; function setUp() public virtual override { // Setup @@ -93,11 +97,11 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { */ /** - * @notice internal function for calculating a signature from the operator corresponding to `_operatorPrivateKey`, delegating them to + * @notice internal function for calculating a signature from the operator corresponding to `operatorPk`, delegating them to * the `operator`, and expiring at `expiry`. */ - function _getOperatorSignature( - uint256 _operatorPrivateKey, + function _getOperatorAVSRegistrationSignature( + uint256 operatorPk, address operator, address avs, bytes32 salt, @@ -107,7 +111,7 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { operatorSignature.salt = salt; { bytes32 digestHash = avsDirectory.calculateOperatorAVSRegistrationDigestHash(operator, avs, salt, expiry); - (uint8 v, bytes32 r, bytes32 s) = cheats.sign(_operatorPrivateKey, digestHash); + (uint8 v, bytes32 r, bytes32 s) = cheats.sign(operatorPk, digestHash); operatorSignature.signature = abi.encodePacked(r, s, v); } return operatorSignature; @@ -168,21 +172,1087 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { // filter out disallowed stakerOptOutWindowBlocks values cheats.assume(operatorDetails.stakerOptOutWindowBlocks <= delegationManager.MAX_STAKER_OPT_OUT_WINDOW_BLOCKS()); } + + function _registerOperatorToOperatorSet( + uint256 operatorPk, + uint32 operatorSetId, + bytes32 salt, + uint256 expiry + ) internal virtual { + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + _registerOperatorToOperatorSets(operatorPk, oids, salt, expiry); + } + + function _registerOperatorToOperatorSets( + uint256 operatorPk, + uint32[] memory operatorSetIds, + bytes32 salt, + uint256 expiry + ) internal virtual { + expiry = bound(expiry, 1, type(uint256).max); + cheats.warp(0); + + address operator = cheats.addr(operatorPk); + (uint8 v, bytes32 r, bytes32 s) = cheats.sign( + operatorPk, + avsDirectory.calculateOperatorSetRegistrationDigestHash(address(this), operatorSetIds, salt, expiry) + ); + + // Set AVS as operator set avs + avsDirectory.becomeOperatorSetAVS(); + + _registerOperatorWithBaseDetails(operator); + + avsDirectory.registerOperatorToOperatorSets( + operator, + operatorSetIds, + ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) + ); + } + + function _createOperatorSet(uint32 operatorSetId) internal { + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + avsDirectory.createOperatorSets(oids); + } + + function _createOperatorSets(uint32[] memory operatorSetIds) internal { + avsDirectory.createOperatorSets(operatorSetIds); + } +} + +contract AVSDirectoryUnitTests_initialize is AVSDirectoryUnitTests { + function testFuzz_Correctness( + address delegationManager, + address owner, + address pauserRegistry, + uint256 initialPausedStatus + ) public virtual { + AVSDirectory dir = new AVSDirectory(IDelegationManager(delegationManager)); + + assertEq(address(dir.delegation()), delegationManager); + + cheats.expectRevert("Initializable: contract is already initialized"); + dir.initialize(owner, IPauserRegistry(pauserRegistry), initialPausedStatus); + } +} + +contract AVSDirectoryUnitTests_domainSeparator is AVSDirectoryUnitTests { + function test_domainSeparator() public virtual { + // This is just to get coverage up. + avsDirectory.domainSeparator(); + cheats.chainId(0xC0FFEE); + avsDirectory.domainSeparator(); + } +} + +contract AVSDirectoryUnitTests_registerOperatorToOperatorSet is AVSDirectoryUnitTests { + function testFuzz_revert_SignatureIsExpired( + address operator, + uint32 operatorSetId, + bytes32 salt, + uint256 expiry + ) public virtual { + expiry = bound(expiry, 0, type(uint256).max - 1); + cheats.warp(type(uint256).max); + + _createOperatorSet(operatorSetId); + + _registerOperatorWithBaseDetails(operator); + + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + cheats.expectRevert("AVSDirectory.registerOperatorToOperatorSets: operator signature expired"); + avsDirectory.registerOperatorToOperatorSets( + operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(new bytes(0), salt, expiry) + ); + } + + function testFuzz_revert_notOperatorSetAVS( + uint256 operatorPk, + uint32 operatorSetId, + bytes32 salt, + uint256 expiry + ) public virtual { + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + expiry = bound(expiry, 1, type(uint256).max); + + cheats.warp(0); + + _createOperatorSet(operatorSetId); + + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + address operator = cheats.addr(operatorPk); + (uint8 v, bytes32 r, bytes32 s) = cheats.sign( + operatorPk, avsDirectory.calculateOperatorSetRegistrationDigestHash(address(this), oids, salt, expiry) + ); + + _registerOperatorWithBaseDetails(operator); + + cheats.expectRevert("AVSDirectory.registerOperatorToOperatorSets: AVS is not an operator set AVS"); + avsDirectory.registerOperatorToOperatorSets( + operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) + ); + } + + function testFuzz_revert_OperatorRegistered( + uint256 operatorPk, + uint32 operatorSetId, + bytes32 salt, + uint256 expiry + ) public virtual { + avsDirectory.becomeOperatorSetAVS(); + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + expiry = bound(expiry, 1, type(uint256).max); + + cheats.warp(0); + + _createOperatorSet(operatorSetId); + + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + address operator = cheats.addr(operatorPk); + (uint8 v, bytes32 r, bytes32 s) = cheats.sign( + operatorPk, avsDirectory.calculateOperatorSetRegistrationDigestHash(address(this), oids, salt, expiry) + ); + + _registerOperatorWithBaseDetails(operator); + + avsDirectory.registerOperatorToOperatorSets( + operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) + ); + + (v, r, s) = cheats.sign( + operatorPk, + avsDirectory.calculateOperatorSetRegistrationDigestHash(address(this), oids, keccak256(""), expiry) + ); + + cheats.expectRevert("AVSDirectory._registerOperatorToOperatorSets: operator already registered to operator set"); + avsDirectory.registerOperatorToOperatorSets( + operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), keccak256(""), expiry) + ); + } + + function testFuzz_revert_OperatorNotRegistered( + address operator, + uint32 operatorSetId, + bytes32 salt, + uint256 expiry + ) public virtual { + avsDirectory.becomeOperatorSetAVS(); + cheats.assume(operator != address(0)); + expiry = bound(expiry, 1, type(uint256).max); + cheats.warp(0); + + _createOperatorSet(operatorSetId); + + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + cheats.expectRevert("AVSDirectory.registerOperatorToOperatorSets: operator not registered to EigenLayer yet"); + avsDirectory.registerOperatorToOperatorSets( + operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(new bytes(0), salt, expiry) + ); + } + + function testFuzz_revert_SaltSpent( + uint256 operatorPk, + uint32 operatorSetId, + bytes32 salt, + uint256 expiry + ) public virtual { + avsDirectory.becomeOperatorSetAVS(); + operatorSetId = uint32(bound(operatorSetId, 1, type(uint32).max)); + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + expiry = bound(expiry, 1, type(uint256).max); + + cheats.warp(0); + + _createOperatorSet(operatorSetId); + + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + address operator = cheats.addr(operatorPk); + (uint8 v, bytes32 r, bytes32 s) = cheats.sign( + operatorPk, avsDirectory.calculateOperatorSetRegistrationDigestHash(address(this), oids, salt, expiry) + ); + + _registerOperatorWithBaseDetails(operator); + + avsDirectory.registerOperatorToOperatorSets( + operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) + ); + + cheats.expectRevert("AVSDirectory.registerOperatorToOperatorSets: salt already spent"); + avsDirectory.registerOperatorToOperatorSets( + operator, new uint32[](0), ISignatureUtils.SignatureWithSaltAndExpiry(new bytes(0), salt, expiry) + ); + } + + function testFuzz_revert_WrongAVS( + address badAvs, + uint256 operatorPk, + uint32 operatorSetId, + bytes32 salt, + uint256 expiry + ) public virtual { + cheats.assume(badAvs != address(this)); + + operatorSetId = uint32(bound(operatorSetId, 1, type(uint32).max)); + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + expiry = bound(expiry, 1, type(uint256).max); + + cheats.warp(0); + + _createOperatorSet(operatorSetId); + + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + address operator = cheats.addr(operatorPk); + + (uint8 v, bytes32 r, bytes32 s) = cheats.sign( + operatorPk, avsDirectory.calculateOperatorSetRegistrationDigestHash(address(this), oids, salt, expiry) + ); + + _registerOperatorWithBaseDetails(operator); + + cheats.startPrank(badAvs); + avsDirectory.becomeOperatorSetAVS(); + cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: signature not from signer"); + avsDirectory.registerOperatorToOperatorSets( + operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) + ); + cheats.stopPrank(); + } + + function testFuzz_revert_invalidOperatorSet( + uint256 operatorPk, + uint32 operatorSetId, + bytes32 salt, + uint256 expiry + ) public virtual { + avsDirectory.becomeOperatorSetAVS(); + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + expiry = bound(expiry, 1, type(uint256).max); + + cheats.warp(0); + + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + address operator = cheats.addr(operatorPk); + (uint8 v, bytes32 r, bytes32 s) = cheats.sign( + operatorPk, avsDirectory.calculateOperatorSetRegistrationDigestHash(address(this), oids, salt, expiry) + ); + + _registerOperatorWithBaseDetails(operator); + + cheats.expectRevert("AVSDirectory._registerOperatorToOperatorSets: invalid operator set"); + avsDirectory.registerOperatorToOperatorSets( + operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) + ); + } + + function testFuzz_MultipleCorrectness( + uint256 operatorPk, + uint256 totalSets, + bytes32 salt, + uint256 expiry + ) public virtual { + avsDirectory.becomeOperatorSetAVS(); + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + totalSets = bound(totalSets, 1, 64); + expiry = bound(expiry, 1, type(uint256).max); + + cheats.warp(0); + + uint32[] memory oids = new uint32[](totalSets); + for (uint256 i; i < oids.length; ++i) { + oids[i] = uint32(uint256(keccak256(abi.encodePacked(i))) % type(uint32).max); + _createOperatorSet(oids[i]); + } + + address operator = cheats.addr(operatorPk); + (uint8 v, bytes32 r, bytes32 s) = cheats.sign( + operatorPk, avsDirectory.calculateOperatorSetRegistrationDigestHash(address(this), oids, salt, expiry) + ); + + _registerOperatorWithBaseDetails(operator); + + for (uint256 i; i < oids.length; ++i) { + cheats.expectEmit(true, false, false, false, address(avsDirectory)); + emit OperatorAddedToOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), oids[i])); + } + + avsDirectory.registerOperatorToOperatorSets( + operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) + ); + + IAVSDirectory.OperatorSet[] memory operatorSets = + avsDirectory.getOperatorSetsOfOperator(operator, 0, type(uint256).max); + + for (uint256 i; i < oids.length; ++i) { + assertTrue(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), oids[i]))); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), oids[i])), 1); + assertEq(operatorSets[i].avs, address(this)); + assertEq(operatorSets[i].operatorSetId, oids[i]); + } + + for (uint256 i; i < oids.length; ++i) { + address[] memory operators = avsDirectory.getOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), oids[i]), 0, type(uint256).max); + assertEq(operators.length, 1); + assertEq(operators[0], operator); + } + + assertEq(operatorSets.length, totalSets); + assertEq(avsDirectory.inTotalOperatorSets(operator), totalSets); + assertTrue(avsDirectory.operatorSaltIsSpent(operator, salt)); + } + + function testFuzz_Correctness( + uint256 operatorPk, + uint32 operatorSetId, + bytes32 salt, + uint256 expiry + ) public virtual { + avsDirectory.becomeOperatorSetAVS(); + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + expiry = bound(expiry, 1, type(uint256).max); + + cheats.warp(0); + + _createOperatorSet(operatorSetId); + + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + address operator = cheats.addr(operatorPk); + (uint8 v, bytes32 r, bytes32 s) = cheats.sign( + operatorPk, avsDirectory.calculateOperatorSetRegistrationDigestHash(address(this), oids, salt, expiry) + ); + + _registerOperatorWithBaseDetails(operator); + + cheats.expectEmit(true, false, false, false, address(avsDirectory)); + emit OperatorAddedToOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), operatorSetId)); + avsDirectory.registerOperatorToOperatorSets( + operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) + ); + + assertTrue(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), operatorSetId))); + + IAVSDirectory.OperatorSet memory operatorSet = avsDirectory.operatorSetsMemberOfAtIndex(operator, 0); + + assertEq(operatorSet.avs, address(this)); + assertEq(operatorSet.operatorSetId, oids[0]); + + address operatorInSet = avsDirectory.operatorSetMemberAtIndex(IAVSDirectory.OperatorSet(address(this), operatorSetId), 0); + assertEq(operator, operatorInSet); + + assertEq(avsDirectory.inTotalOperatorSets(operator), 1); + assertTrue(avsDirectory.operatorSaltIsSpent(operator, salt)); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), operatorSetId)), 1); + } + + function testFuzz_Correctness_MultipleSets( + uint256 operatorPk, + uint256 totalSets, + bytes32 salt, + uint256 expiry + ) public virtual { + avsDirectory.becomeOperatorSetAVS(); + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + totalSets = bound(totalSets, 1, 64); + expiry = bound(expiry, 1, type(uint256).max); + + cheats.warp(0); + + uint32[] memory oids = new uint32[](totalSets); + + for (uint32 i = 1; i < totalSets + 1; ++i) { + _createOperatorSet(i); + oids[i - 1] = i; + } + + address operator = cheats.addr(operatorPk); + (uint8 v, bytes32 r, bytes32 s) = cheats.sign( + operatorPk, avsDirectory.calculateOperatorSetRegistrationDigestHash(address(this), oids, salt, expiry) + ); + + _registerOperatorWithBaseDetails(operator); + + for (uint32 i = 1; i < totalSets + 1; ++i) { + cheats.expectEmit(true, false, false, false, address(avsDirectory)); + emit OperatorAddedToOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), i)); + } + + avsDirectory.registerOperatorToOperatorSets( + operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) + ); + + IAVSDirectory.OperatorSet[] memory operatorSets = + avsDirectory.getOperatorSetsOfOperator(operator, 0, type(uint256).max); + + for (uint32 i = 1; i < totalSets + 1; ++i) { + assertTrue(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), i))); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), i)), 1); + + assertEq(operatorSets[i - 1].avs, address(this)); + assertEq(operatorSets[i - 1].operatorSetId, i); + } + + for(uint32 i = 1; i < totalSets + 1; ++i) { + address[] memory operators = avsDirectory.getOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), i), 0, type(uint256).max); + assertEq(operators.length, 1); + assertEq(operators[0], operator); + } + + assertEq(avsDirectory.inTotalOperatorSets(operator), totalSets); + assertTrue(avsDirectory.operatorSaltIsSpent(operator, salt)); + + assertEq(operatorSets.length, totalSets); + } +} + +contract AVSDirectoryUnitTests_forceDeregisterFromOperatorSets is AVSDirectoryUnitTests { + function testFuzz_revert_OperatorNotInOperatorSet(uint256 operatorPk, uint32 operatorSetId) public virtual { + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + + address operator = cheats.addr(operatorPk); + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + _createOperatorSet(operatorSetId); + + ISignatureUtils.SignatureWithSaltAndExpiry memory emptySig; + + cheats.prank(operator); + cheats.expectRevert("AVSDirectory._deregisterOperatorFromOperatorSet: operator not registered for operator set"); + + avsDirectory.forceDeregisterFromOperatorSets(operator, address(this), oids, emptySig); + } + + function testFuzz_revert_operatorNotCaller(uint256 operatorPk, uint32 operatorSetId) public { + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + + address operator = cheats.addr(operatorPk); + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + _createOperatorSet(operatorSetId); + + ISignatureUtils.SignatureWithSaltAndExpiry memory emptySig; + + cheats.expectRevert("AVSDirectory.forceDeregisterFromOperatorSets: caller must be operator"); + avsDirectory.forceDeregisterFromOperatorSets(operator, address(this), oids, emptySig); + } + + function testFuzz_forceDeregisterFromOperatorSets( + uint256 operatorPk, + uint32 operatorSetId, + uint8 operatorSetsToAdd, + bytes32 salt + ) public { + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + operatorSetsToAdd = uint8(bound(operatorSetsToAdd, 1, 64)); + address operator = cheats.addr(operatorPk); + + // Create operator sets + operatorSetId = uint32(bound(operatorSetId, 1, type(uint32).max - uint32(operatorSetsToAdd))); + uint32[] memory oids = new uint32[](operatorSetsToAdd); + for (uint32 i = 0; i < operatorSetsToAdd; i++) { + oids[i] = operatorSetId + i; + _createOperatorSet(oids[i]); + } + + // Register operator to operator sets + _registerOperatorToOperatorSets(operatorPk, oids, salt, type(uint256).max); + + assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), operatorSetId)), 1); + + // Deregister operator from operator sets + ISignatureUtils.SignatureWithSaltAndExpiry memory emptySig; + cheats.prank(operator); + for (uint256 i = 0; i < oids.length; i++) { + cheats.expectEmit(true, true, true, true, address(avsDirectory)); + emit OperatorRemovedFromOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), oids[i])); + } + avsDirectory.forceDeregisterFromOperatorSets(operator, address(this), oids, emptySig); + + for (uint32 i = 0; i < operatorSetsToAdd; i++) { + assertFalse( + avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), oids[i])), + "operator still in operator set" + ); + + address[] memory operators = avsDirectory.getOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), oids[i]), 0, type(uint256).max); + assertEq(operators.length, 0); + } + + IAVSDirectory.OperatorSet[] memory operatorSets = + avsDirectory.getOperatorSetsOfOperator(operator, 0, type(uint256).max); + + assertEq(operatorSets.length, 0); + assertEq(avsDirectory.inTotalOperatorSets(operator), 0); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), operatorSetId)), 0); + } + + function testFuzz_revert_sigExpired(uint256 operatorPk, uint32 operatorSetId, bytes32 salt) public { + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + + address operator = cheats.addr(operatorPk); + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + _createOperatorSet(operatorSetId); + + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSig = + _createForceDeregSignature(operatorPk, address(this), oids, 0, salt); + + cheats.warp(type(uint256).max); + cheats.expectRevert("AVSDirectory.forceDeregisterFromOperatorSets: operator signature expired"); + avsDirectory.forceDeregisterFromOperatorSets(operator, address(this), oids, operatorSig); + } + + function testFuzz_revert_saltAlreadySpent(uint256 operatorPk, uint32 operatorSetId, bytes32 salt) public { + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + + address operator = cheats.addr(operatorPk); + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + // Register operator to operator sets + _createOperatorSet(operatorSetId); + _registerOperatorToOperatorSets(operatorPk, oids, salt, type(uint256).max); + + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSig = + _createForceDeregSignature(operatorPk, address(this), oids, type(uint256).max, salt); + + cheats.expectRevert("AVSDirectory.forceDeregisterFromOperatorSets: salt already spent"); + avsDirectory.forceDeregisterFromOperatorSets(operator, address(this), oids, operatorSig); + } + + function testFuzz_forceDeregisterFromOperatorSets_onBehalf( + uint256 operatorPk, + uint32 operatorSetId, + uint8 operatorSetsToAdd, + bytes32 salt1, + bytes32 salt2 + ) public { + cheats.assume(salt1 != salt2); + + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + operatorSetsToAdd = uint8(bound(operatorSetsToAdd, 1, 64)); + address operator = cheats.addr(operatorPk); + + // Create operator sets + operatorSetId = uint32(bound(operatorSetId, 1, type(uint32).max - uint32(operatorSetsToAdd))); + uint32[] memory oids = new uint32[](operatorSetsToAdd); + for (uint32 i = 0; i < oids.length; i++) { + oids[i] = operatorSetId + i; + _createOperatorSet(oids[i]); + } + + // Register operator to operator sets + _registerOperatorToOperatorSets(operatorPk, oids, salt1, type(uint256).max); + + // Deregister operator from operator sets + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSig = + _createForceDeregSignature(operatorPk, address(this), oids, type(uint256).max, salt2); + + for (uint256 i = 0; i < oids.length; i++) { + cheats.expectEmit(true, true, true, true, address(avsDirectory)); + emit OperatorRemovedFromOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), oids[i])); + } + + avsDirectory.forceDeregisterFromOperatorSets(operator, address(this), oids, operatorSig); + + for (uint32 i = 0; i < operatorSetsToAdd; i++) { + assertFalse(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), oids[i]))); + } + } + + function _createForceDeregSignature( + uint256 operatorPk, + address avs, + uint32[] memory oids, + uint256 expiry, + bytes32 salt + ) internal view returns (ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature) { + operatorSignature.expiry = expiry; + operatorSignature.salt = salt; + { + bytes32 digestHash = avsDirectory.calculateOperatorSetForceDeregistrationTypehash(avs, oids, salt, expiry); + (uint8 v, bytes32 r, bytes32 s) = cheats.sign(operatorPk, digestHash); + operatorSignature.signature = abi.encodePacked(r, s, v); + } + return operatorSignature; + } +} + +contract AVSDirectoryUnitTests_deregisterOperatorFromOperatorSets is AVSDirectoryUnitTests { + function testFuzz_revert_OperatorNotInOperatorSet(uint256 operatorPk, uint32 operatorSetId) public virtual { + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + + _createOperatorSet(operatorSetId); + + address operator = cheats.addr(operatorPk); + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + cheats.expectRevert("AVSDirectory._deregisterOperatorFromOperatorSet: operator not registered for operator set"); + avsDirectory.deregisterOperatorFromOperatorSets(operator, oids); + } + + function testFuzz_Correctness( + uint256 operatorPk, + uint32 operatorSetId, + bytes32 salt, + uint256 expiry + ) public virtual { + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + + _createOperatorSet(operatorSetId); + + _registerOperatorToOperatorSet(operatorPk, operatorSetId, salt, expiry); + + address operator = cheats.addr(operatorPk); + uint32[] memory oids = new uint32[](1); + oids[0] = operatorSetId; + + // sanity + assertEq(avsDirectory.inTotalOperatorSets(operator), 1); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), operatorSetId)), 1); + + cheats.expectEmit(true, false, false, false, address(avsDirectory)); + emit OperatorRemovedFromOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), operatorSetId)); + + avsDirectory.deregisterOperatorFromOperatorSets(operator, oids); + + // out of bounds array access + vm.expectRevert(); + avsDirectory.operatorSetsMemberOfAtIndex(operator, 0); + + assertEq(avsDirectory.inTotalOperatorSets(operator), 0); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), operatorSetId)), 0); + assertEq(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), operatorSetId)), false); + } + + function testFuzz_Correctness_MultipleSets( + uint256 operatorPk, + uint256 totalSets, + bytes32 salt, + uint256 expiry + ) public virtual { + operatorPk = bound(operatorPk, 1, MAX_PRIVATE_KEY); + totalSets = bound(totalSets, 1, 64); + + uint32[] memory oids = new uint32[](totalSets); + + for (uint32 i = 1; i < totalSets + 1; ++i) { + _createOperatorSet(i); + oids[i - 1] = i; + } + + _registerOperatorToOperatorSets(operatorPk, oids, salt, expiry); + + for (uint32 i = 1; i < totalSets + 1; ++i) { + assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), i)), 1); + } + + address operator = cheats.addr(operatorPk); + + // sanity + assertEq(avsDirectory.inTotalOperatorSets(operator), totalSets); + + for (uint32 i = 1; i < totalSets + 1; ++i) { + cheats.expectEmit(true, false, false, false, address(avsDirectory)); + emit OperatorRemovedFromOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), i)); + } + + avsDirectory.deregisterOperatorFromOperatorSets(operator, oids); + + for (uint32 i = 1; i < totalSets + 1; ++i) { + assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), i)), 0); + assertEq(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), i)), false); + } + + IAVSDirectory.OperatorSet[] memory operatorSets = + avsDirectory.getOperatorSetsOfOperator(operator, 0, type(uint256).max); + + assertEq(operatorSets.length, 0); + assertEq(avsDirectory.inTotalOperatorSets(operator), 0); + } +} + +contract AVSDirectoryUnitTests_createOperatorSet is AVSDirectoryUnitTests { + function testFuzz_createOperatorSet(uint256 totalSets) public { + totalSets = bound(totalSets, 1, 64); + + uint32[] memory oids = new uint32[](totalSets); + + for (uint32 i; i < totalSets; ++i) { + oids[i] = i + 1; + cheats.expectEmit(true, true, true, true, address(avsDirectory)); + emit OperatorSetCreated(IAVSDirectory.OperatorSet({avs: address(this), operatorSetId: i + 1})); + } + + avsDirectory.createOperatorSets(oids); + + for (uint32 i = 1; i < totalSets + 1; ++i) { + assertTrue(avsDirectory.isOperatorSet(address(this), i)); + } + } + + function test_revert_operatorSetExists() public { + _createOperatorSet(1); + cheats.expectRevert("AVSDirectory.createOperatorSet: operator set already exists"); + _createOperatorSet(1); + } +} + +contract AVSDirectoryUnitTests_becomeOperatorSetAVS is AVSDirectoryUnitTests { + function test_becomeOperatorSetAVS() public { + cheats.expectEmit(true, true, true, true, address(avsDirectory)); + emit AVSMigratedToOperatorSets(address(this)); + + avsDirectory.becomeOperatorSetAVS(); + + assertTrue(avsDirectory.isOperatorSetAVS(address(this))); + } + + function test_revert_alreadyOperatorSetAVS() public { + avsDirectory.becomeOperatorSetAVS(); + cheats.expectRevert("AVSDirectory.becomeOperatorSetAVS: already an operator set AVS"); + avsDirectory.becomeOperatorSetAVS(); + } +} + +contract AVSDirectoryUnitTests_migrateOperatorsToOperatorSets is AVSDirectoryUnitTests { + address[] operators = new address[](1); + uint32[][] operatorSetIds = new uint32[][](1); + + function test_revert_paused() public { + cheats.prank(pauser); + avsDirectory.pause(2 ** PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS); + + operators = new address[](1); + operatorSetIds = new uint32[][](1); + + cheats.expectRevert("Pausable: index is paused"); + cheats.prank(defaultAVS); + avsDirectory.migrateOperatorsToOperatorSets(operators, operatorSetIds); + } + + function test_revert_notOperatorSetAVS() public { + cheats.expectRevert("AVSDirectory.migrateOperatorsToOperatorSets: AVS is not an operator set AVS"); + cheats.prank(defaultAVS); + avsDirectory.migrateOperatorsToOperatorSets(operators, operatorSetIds); + } + + function test_revert_operatorNotM2Registered() public { + address operator = cheats.addr(delegationSignerPrivateKey); + operators = new address[](1); + operators[0] = operator; + + avsDirectory.becomeOperatorSetAVS(); + cheats.expectRevert( + "AVSDirectory.migrateOperatorsToOperatorSets: operator already migrated or not a legacy registered operator" + ); + avsDirectory.migrateOperatorsToOperatorSets(operators, operatorSetIds); + } + + function test_revert_operatorAlreadyMigrated(bytes32 salt) public { + // Register Operator to M2 + address operator = cheats.addr(delegationSignerPrivateKey); + _registerOperatorLegacyM2(delegationSignerPrivateKey, salt); + + // Format calldata + operators = new address[](1); + operators[0] = operator; + operatorSetIds = new uint32[][](1); + operatorSetIds[0] = new uint32[](1); + operatorSetIds[0][0] = 1; + + // Setup Operator Sets + _createOperatorSet(1); + avsDirectory.becomeOperatorSetAVS(); + + // Migrate Operator + avsDirectory.migrateOperatorsToOperatorSets(operators, operatorSetIds); + + // Revert when trying to migrate operator again + cheats.expectRevert( + "AVSDirectory.migrateOperatorsToOperatorSets: operator already migrated or not a legacy registered operator" + ); + avsDirectory.migrateOperatorsToOperatorSets(operators, operatorSetIds); + } + + function testFuzz_revert_invalidOperatorSet(bytes32 salt) public { + // Register Operator to M2 + address operator = cheats.addr(delegationSignerPrivateKey); + _registerOperatorLegacyM2(delegationSignerPrivateKey, salt); + + // Format calldata + operators = new address[](1); + operators[0] = operator; + operatorSetIds = new uint32[][](1); + operatorSetIds[0] = new uint32[](1); + operatorSetIds[0][0] = 1; + + // Become operator set AVS + avsDirectory.becomeOperatorSetAVS(); + + // Revert + cheats.expectRevert("AVSDirectory._registerOperatorToOperatorSets: invalid operator set"); + avsDirectory.migrateOperatorsToOperatorSets(operators, operatorSetIds); + } + + function testFuzz_revert_operatorAlreadyRegisteredFromMigration(bytes32 salt) public { + // Register Operator to M2 + address operator = cheats.addr(delegationSignerPrivateKey); + _registerOperatorLegacyM2(delegationSignerPrivateKey, salt); + + // Format calldata + operators = new address[](1); + operators[0] = operator; + operatorSetIds = new uint32[][](1); + operatorSetIds[0] = new uint32[](2); + operatorSetIds[0][0] = 1; + operatorSetIds[0][1] = 1; + + // Become operator set AVS + _createOperatorSet(1); + avsDirectory.becomeOperatorSetAVS(); + + // Revert + cheats.expectRevert("AVSDirectory._registerOperatorToOperatorSets: operator already registered to operator set"); + avsDirectory.migrateOperatorsToOperatorSets(operators, operatorSetIds); + } + + function testFuzz_revert_operatorAlreadyRegisteredFromNormalReg(bytes32 salt1, bytes32 salt2) public { + // Register Operator to M2 + address operator = cheats.addr(delegationSignerPrivateKey); + _registerOperatorLegacyM2(delegationSignerPrivateKey, salt1); + + // Format calldata + operators = new address[](1); + operators[0] = operator; + operatorSetIds = new uint32[][](1); + operatorSetIds[0] = new uint32[](1); + operatorSetIds[0][0] = 1; + + // Register Operator To Operator Set - cannot use helper method since it re-registers operator in DM + avsDirectory.becomeOperatorSetAVS(); + _createOperatorSet(1); + uint256 expiry = type(uint256).max; + (uint8 v, bytes32 r, bytes32 s) = cheats.sign( + delegationSignerPrivateKey, + avsDirectory.calculateOperatorSetRegistrationDigestHash(address(this), operatorSetIds[0], salt2, expiry) + ); + avsDirectory.registerOperatorToOperatorSets( + operator, + operatorSetIds[0], + ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt2, expiry) + ); + + // Revert + cheats.expectRevert("AVSDirectory._registerOperatorToOperatorSets: operator already registered to operator set"); + avsDirectory.migrateOperatorsToOperatorSets(operators, operatorSetIds); + } + + function testFuzz_Correctness(bytes32 salt) public { + // Register Operator to M2 + address operator = cheats.addr(delegationSignerPrivateKey); + _registerOperatorLegacyM2(delegationSignerPrivateKey, salt); + + // Format calldata + operators = new address[](1); + operators[0] = operator; + operatorSetIds = new uint32[][](1); + operatorSetIds[0] = new uint32[](1); + operatorSetIds[0][0] = 1; + + // Become operator set AVS + avsDirectory.becomeOperatorSetAVS(); + _createOperatorSet(1); + + // Expect Emits + cheats.expectEmit(true, true, true, true, address(avsDirectory)); + emit OperatorAddedToOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), 1)); + cheats.expectEmit(true, true, true, true, address(avsDirectory)); + emit OperatorAVSRegistrationStatusUpdated( + operator, address(this), IAVSDirectory.OperatorAVSRegistrationStatus.UNREGISTERED + ); + cheats.expectEmit(true, true, true, true, address(avsDirectory)); + emit OperatorMigratedToOperatorSets(operator, address(this), operatorSetIds[0]); + + // Migrate + avsDirectory.migrateOperatorsToOperatorSets(operators, operatorSetIds); + + // Checks + assertTrue(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), 1))); + assertTrue( + avsDirectory.avsOperatorStatus(address(this), operator) + == IAVSDirectory.OperatorAVSRegistrationStatus.UNREGISTERED + ); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), 1)), 1); + } + + function testFuzz_correctness_multiple( + uint256 privateKey, + uint8 numOperators, + bytes32 salt, + uint8 numOids + ) public { + numOperators = uint8(bound(numOperators, 1, 64)); + numOids = uint8(bound(numOids, 1, 32)); + + // Create Operator Set IDs + uint32[] memory oids = new uint32[](numOids); + for (uint32 i = 0; i < numOids; i++) { + oids[i] = i; + } + + // Create Operators, Initailize Calldata, Register Operators + privateKey = bound(privateKey, 1, MAX_PRIVATE_KEY - numOperators); + operators = new address[](numOperators); + operatorSetIds = new uint32[][](numOperators); + for (uint256 i = 0; i < numOperators; i++) { + _registerOperatorLegacyM2(privateKey + i, salt); + operators[i] = cheats.addr(privateKey + i); + operatorSetIds[i] = oids; + } + + // Become operator set AVS + avsDirectory.becomeOperatorSetAVS(); + _createOperatorSets(oids); + + // Expect Emits + for (uint256 i = 0; i < numOperators; i++) { + for (uint256 j = 0; j < oids.length; j++) { + cheats.expectEmit(true, true, true, true, address(avsDirectory)); + emit OperatorAddedToOperatorSet(operators[i], IAVSDirectory.OperatorSet(address(this), oids[j])); + } + cheats.expectEmit(true, true, true, true, address(avsDirectory)); + emit OperatorAVSRegistrationStatusUpdated( + operators[i], address(this), IAVSDirectory.OperatorAVSRegistrationStatus.UNREGISTERED + ); + cheats.expectEmit(true, true, true, true, address(avsDirectory)); + emit OperatorMigratedToOperatorSets(operators[i], address(this), operatorSetIds[i]); + } + + // Migrate + avsDirectory.migrateOperatorsToOperatorSets(operators, operatorSetIds); + + // Checks + for (uint256 i = 0; i < numOperators; i++) { + for (uint256 j = 0; j < oids.length; j++) { + assertTrue(avsDirectory.isMember(operators[i], IAVSDirectory.OperatorSet(address(this), oids[j]))); + } + assertTrue( + avsDirectory.avsOperatorStatus(address(this), operators[i]) + == IAVSDirectory.OperatorAVSRegistrationStatus.UNREGISTERED + ); + + IAVSDirectory.OperatorSet[] memory opSets = avsDirectory.getOperatorSetsOfOperator(operators[i], 0, type(uint256).max); + assertEq(oids.length, opSets.length); + } + + for(uint256 i = 0; i < oids.length; i++) { + address[] memory operatorsInSet = avsDirectory.getOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), oids[i]), 0, type(uint256).max); + assertEq(operatorsInSet.length, operators.length); + } + } + + function _registerOperatorLegacyM2(uint256 privateKey, bytes32 salt) internal { + address operator = cheats.addr(privateKey); + _registerOperatorWithBaseDetails(operator); + + uint256 expiry = type(uint256).max; + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature = + _getOperatorAVSRegistrationSignature(privateKey, operator, address(this), salt, expiry); + + avsDirectory.registerOperatorToAVS(operator, operatorSignature); + } } -contract AVSDirectoryUnitTests_operatorAVSRegisterationStatus is AVSDirectoryUnitTests { +contract AVSDirectoryUnitTests_legacyOperatorAVSRegistration is AVSDirectoryUnitTests { function test_revert_whenRegisterDeregisterToAVSPaused() public { // set the pausing flag cheats.prank(pauser); avsDirectory.pause(2 ** PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS); cheats.expectRevert("Pausable: index is paused"); - avsDirectory.registerOperatorToAVS(address(0), ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(""), 0, 0)); + avsDirectory.registerOperatorToAVS( + address(0), ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(""), 0, 0) + ); cheats.expectRevert("Pausable: index is paused"); avsDirectory.deregisterOperatorFromAVS(address(0)); } + function test_revert_deregisterOperatorFromAVS_operatorNotRegistered() public { + cheats.expectRevert("AVSDirectory.deregisterOperatorFromAVS: operator not registered"); + avsDirectory.deregisterOperatorFromAVS(address(0)); + } + + function test_revert_deregisterOperatorFromAVS_whenAVSISOperatorSetAVS() public { + // Register operator + bytes32 salt = bytes32(0); + address operator = cheats.addr(delegationSignerPrivateKey); + assertFalse(delegationManager.isOperator(operator), "bad test setup"); + _registerOperatorWithBaseDetails(operator); + + uint256 expiry = type(uint256).max; + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature = + _getOperatorAVSRegistrationSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); + + cheats.startPrank(defaultAVS); + avsDirectory.registerOperatorToAVS(operator, operatorSignature); + + // Become operator set AVS + avsDirectory.becomeOperatorSetAVS(); + + // Deregister operator + cheats.expectRevert("AVSDirectory.deregisterOperatorFromAVS: AVS is an operator set AVS"); + avsDirectory.deregisterOperatorFromAVS(operator); + } + + function testFuzz_deregisterOperatorFromAVS(bytes32 salt) public { + address operator = cheats.addr(delegationSignerPrivateKey); + assertFalse(delegationManager.isOperator(operator), "bad test setup"); + _registerOperatorWithBaseDetails(operator); + + uint256 expiry = type(uint256).max; + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature = + _getOperatorAVSRegistrationSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); + + cheats.prank(defaultAVS); + avsDirectory.registerOperatorToAVS(operator, operatorSignature); + + cheats.expectEmit(true, true, true, true, address(avsDirectory)); + emit OperatorAVSRegistrationStatusUpdated( + operator, defaultAVS, IAVSDirectory.OperatorAVSRegistrationStatus.UNREGISTERED + ); + + cheats.prank(defaultAVS); + avsDirectory.deregisterOperatorFromAVS(operator); + + assertTrue( + avsDirectory.avsOperatorStatus(defaultAVS, operator) + == IAVSDirectory.OperatorAVSRegistrationStatus.UNREGISTERED + ); + } + // @notice Tests that an avs who calls `updateAVSMetadataURI` will correctly see an `AVSMetadataURIUpdated` event emitted with their input function testFuzz_UpdateAVSMetadataURI(string memory metadataURI) public { // call `updateAVSMetadataURI` and check for event @@ -192,6 +1262,25 @@ contract AVSDirectoryUnitTests_operatorAVSRegisterationStatus is AVSDirectoryUni avsDirectory.updateAVSMetadataURI(metadataURI); } + function testFuzz_revert_whenAVSIsOperatorSetAVS(bytes32 salt) public { + // set the AVS to be an operator set AVS + cheats.prank(defaultAVS); + avsDirectory.becomeOperatorSetAVS(); + + // Register Operator to EigenLayer + address operator = cheats.addr(delegationSignerPrivateKey); + assertFalse(delegationManager.isOperator(operator), "bad test setup"); + _registerOperatorWithBaseDetails(operator); + + uint256 expiry = type(uint256).max; + + cheats.prank(defaultAVS); + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature = + _getOperatorAVSRegistrationSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); + cheats.expectRevert("AVSDirectory.registerOperatorToAVS: AVS is an operator set AVS"); + avsDirectory.registerOperatorToAVS(operator, operatorSignature); + } + // @notice Verifies an operator registers successfull to avs and see an `OperatorAVSRegistrationStatusUpdated` event emitted function testFuzz_registerOperatorToAVS(bytes32 salt) public { address operator = cheats.addr(delegationSignerPrivateKey); @@ -207,9 +1296,14 @@ contract AVSDirectoryUnitTests_operatorAVSRegisterationStatus is AVSDirectoryUni cheats.prank(defaultAVS); ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature = - _getOperatorSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); + _getOperatorAVSRegistrationSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); avsDirectory.registerOperatorToAVS(operator, operatorSignature); + + assertTrue( + avsDirectory.avsOperatorStatus(defaultAVS, operator) + == IAVSDirectory.OperatorAVSRegistrationStatus.REGISTERED + ); } // @notice Verifies an operator registers successfull to avs and see an `OperatorAVSRegistrationStatusUpdated` event emitted @@ -220,7 +1314,7 @@ contract AVSDirectoryUnitTests_operatorAVSRegisterationStatus is AVSDirectoryUni cheats.prank(defaultAVS); uint256 expiry = type(uint256).max; ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature = - _getOperatorSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); + _getOperatorAVSRegistrationSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); cheats.expectRevert("AVSDirectory.registerOperatorToAVS: operator not registered to EigenLayer yet"); avsDirectory.registerOperatorToAVS(operator, operatorSignature); @@ -234,7 +1328,7 @@ contract AVSDirectoryUnitTests_operatorAVSRegisterationStatus is AVSDirectoryUni uint256 expiry = type(uint256).max; ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature = - _getOperatorSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); + _getOperatorAVSRegistrationSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: signature not from signer"); cheats.prank(operator); @@ -242,9 +1336,9 @@ contract AVSDirectoryUnitTests_operatorAVSRegisterationStatus is AVSDirectoryUni } // @notice Verifies an operator registers fails when the signature expiry already expires - function testFuzz_revert_whenExpiryHasExpired( - ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature - ) public { + function testFuzz_revert_whenExpiryHasExpired(ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature) + public + { address operator = cheats.addr(delegationSignerPrivateKey); operatorSignature.expiry = bound(operatorSignature.expiry, 0, block.timestamp - 1); @@ -260,7 +1354,7 @@ contract AVSDirectoryUnitTests_operatorAVSRegisterationStatus is AVSDirectoryUni uint256 expiry = type(uint256).max; ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature = - _getOperatorSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); + _getOperatorAVSRegistrationSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); cheats.startPrank(defaultAVS); avsDirectory.registerOperatorToAVS(operator, operatorSignature); @@ -283,10 +1377,14 @@ contract AVSDirectoryUnitTests_operatorAVSRegisterationStatus is AVSDirectoryUni avsDirectory.cancelSalt(salt); assertTrue(avsDirectory.operatorSaltIsSpent(operator, salt), "salt was not successfully cancelled"); - assertFalse(avsDirectory.operatorSaltIsSpent(defaultAVS, salt), "salt should only be cancelled for the operator"); + assertFalse( + avsDirectory.operatorSaltIsSpent(defaultAVS, salt), "salt should only be cancelled for the operator" + ); - bytes32 newSalt; - unchecked { newSalt = bytes32(uint(salt) + 1); } + bytes32 newSalt; + unchecked { + newSalt = bytes32(uint256(salt) + 1); + } assertFalse(salt == newSalt, "bad test setup"); @@ -305,7 +1403,7 @@ contract AVSDirectoryUnitTests_operatorAVSRegisterationStatus is AVSDirectoryUni uint256 expiry = type(uint256).max; ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature = - _getOperatorSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); + _getOperatorAVSRegistrationSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); cheats.prank(operator); avsDirectory.cancelSalt(salt); @@ -315,20 +1413,6 @@ contract AVSDirectoryUnitTests_operatorAVSRegisterationStatus is AVSDirectoryUni avsDirectory.registerOperatorToAVS(operator, operatorSignature); } - /// @notice Verifies that an operator cannot cancel the same salt twice - function testFuzz_revert_whenSaltCancelledTwice(bytes32 salt) public { - address operator = cheats.addr(delegationSignerPrivateKey); - assertFalse(delegationManager.isOperator(operator), "bad test setup"); - _registerOperatorWithBaseDetails(operator); - - cheats.startPrank(operator); - avsDirectory.cancelSalt(salt); - - cheats.expectRevert("AVSDirectory.cancelSalt: cannot cancel spent salt"); - avsDirectory.cancelSalt(salt); - cheats.stopPrank(); - } - /// @notice Verifies that an operator cannot cancel the same salt twice function testFuzz_revert_whenCancellingSaltUsedToRegister(bytes32 salt) public { address operator = cheats.addr(delegationSignerPrivateKey); @@ -337,13 +1421,9 @@ contract AVSDirectoryUnitTests_operatorAVSRegisterationStatus is AVSDirectoryUni uint256 expiry = type(uint256).max; ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature = - _getOperatorSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); + _getOperatorAVSRegistrationSignature(delegationSignerPrivateKey, operator, defaultAVS, salt, expiry); cheats.prank(defaultAVS); avsDirectory.registerOperatorToAVS(operator, operatorSignature); - - cheats.prank(operator); - cheats.expectRevert("AVSDirectory.cancelSalt: cannot cancel spent salt"); - avsDirectory.cancelSalt(salt); } } diff --git a/src/test/unit/RewardsCoordinatorUnit.t.sol b/src/test/unit/RewardsCoordinatorUnit.t.sol index 933dbb6a0..d88ad1cd3 100644 --- a/src/test/unit/RewardsCoordinatorUnit.t.sol +++ b/src/test/unit/RewardsCoordinatorUnit.t.sol @@ -55,8 +55,18 @@ contract RewardsCoordinatorUnitTests is EigenLayerUnitTestSetup, IRewardsCoordin /// @notice absolute min timestamp that a rewards can start at uint32 GENESIS_REWARDS_TIMESTAMP = 1712188800; + /// @notice Lower bound start range is ~1 month into the past, multiple of CALCULATION_INTERVAL_SECONDS + uint32 OPERATOR_SET_MAX_RETROACTIVE_LENGTH = 28 days; + /// @notice absolute min timestamp (seconds) that an operatorSet rewards submission can start at + uint32 OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP = 1720656000; + + /// @notice Delay in timestamp before a posted root can be claimed against uint32 activationDelay = 7 days; + /// @notice The activation delay until an updated operator's commission bips takes effect + uint32 OPERATOR_COMMISSION_ACTIVATION_DELAY = 17.5 days; + /// @notice The maximum commission bips that can be set for an operator + uint16 MAX_COMMISSION_BIPS = 10000; /// @notice the commission for all operators across all avss uint16 globalCommissionBips = 1000; @@ -74,7 +84,10 @@ contract RewardsCoordinatorUnitTests is EigenLayerUnitTestSetup, IRewardsCoordin uint8 internal constant PAUSED_PROCESS_CLAIM = 2; /// @dev Index for flag that pauses submitRoots - uint8 internal constant PAUSED_SUBMIT_ROOTS = 3; + uint8 internal constant PAUSED_SUBMIT_DISABLE_ROOTS = 3; + + /// @dev Index for flag that pauses calling rewardOperatorSetForRange + uint8 internal constant PAUSED_REWARD_OPERATOR_SET = 4; /// @dev Index for flag that pauses rewardAllStakersAndOperators uint8 internal constant PAUSED_REWARD_ALL_STAKERS_AND_OPERATORS = 4; @@ -93,11 +106,14 @@ contract RewardsCoordinatorUnitTests is EigenLayerUnitTestSetup, IRewardsCoordin rewardsCoordinatorImplementation = new RewardsCoordinator( delegationManagerMock, strategyManagerMock, + avsDirectoryMock, CALCULATION_INTERVAL_SECONDS, MAX_REWARDS_DURATION, MAX_RETROACTIVE_LENGTH, MAX_FUTURE_LENGTH, - GENESIS_REWARDS_TIMESTAMP + GENESIS_REWARDS_TIMESTAMP, + OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + OPERATOR_SET_MAX_RETROACTIVE_LENGTH ); rewardsCoordinator = RewardsCoordinator( address( @@ -1339,7 +1355,7 @@ contract RewardsCoordinatorUnitTests_submitRoot is RewardsCoordinatorUnitTests { function test_Revert_WhenSubmitRootPaused() public { cheats.prank(pauser); - rewardsCoordinator.pause(2 ** PAUSED_SUBMIT_ROOTS); + rewardsCoordinator.pause(2 ** PAUSED_SUBMIT_DISABLE_ROOTS); cheats.expectRevert("Pausable: index is paused"); rewardsCoordinator.submitRoot(bytes32(0), 0); @@ -2254,3 +2270,706 @@ contract RewardsCoordinatorUnitTests_processClaim is RewardsCoordinatorUnitTests return claims; } } + +contract RewardsCoordinatorUnitTests_disableRoot is RewardsCoordinatorUnitTests { + function testFuzz_disableRoot_Revert_WhenNotRewardsUpdater( + address invalidRewardsUpdater + ) public filterFuzzedAddressInputs(invalidRewardsUpdater) { + cheats.prank(invalidRewardsUpdater); + + cheats.expectRevert("RewardsCoordinator: caller is not the rewardsUpdater"); + rewardsCoordinator.disableRoot(0); + } + + function test_disableRoot_Revert_WhenPaused() public { + cheats.prank(pauser); + rewardsCoordinator.pause(2 ** PAUSED_SUBMIT_DISABLE_ROOTS); + + cheats.expectRevert("Pausable: index is paused"); + rewardsCoordinator.disableRoot(0); + } + + function testFuzz_disableRoot_Revert_WhenRootIndexOutOfBounds(uint32 rootIndex) public { + // submitRoots with indexes 0,1,2 + _submitRoots(); + cheats.assume(rootIndex > 2); + + cheats.expectRevert("RewardsCoordinator.disableRoot: invalid rootIndex"); + cheats.prank(rewardsUpdater); + rewardsCoordinator.disableRoot(rootIndex); + } + + function testFuzz_disableRoot_Revert_WhenRootAlreadyDisabled(uint32 rootIndex) public { + // submitRoots with indexes 0,1,2 + _submitRoots(); + rootIndex = uint32(bound(uint256(rootIndex), 0, 2)); + + cheats.startPrank(rewardsUpdater); + rewardsCoordinator.disableRoot(rootIndex); + + cheats.expectRevert("RewardsCoordinator.disableRoot: root already disabled"); + rewardsCoordinator.disableRoot(rootIndex); + cheats.stopPrank(); + } + + function testeFuzz_disableRoot_Revert_WhenRootAlreadyActivated(uint32 rootIndex) public { + // submitRoots with indexes 0,1,2 + _submitRoots(); + rootIndex = uint32(bound(uint256(rootIndex), 0, 2)); + cheats.warp(block.timestamp + activationDelay); + + cheats.expectRevert("RewardsCoordinator.disableRoot: root already activated"); + cheats.prank(rewardsUpdater); + rewardsCoordinator.disableRoot(rootIndex); + } + + function testFuzz_disableRoot(uint32 rootIndex, uint256 randSalt) public { + // Set timestamp to some value in the future + cheats.warp(bound(randSalt, 1e5, 1e6)); + uint256 currTimestamp = block.timestamp; + // submitRoots with indexes 0,1,2 + _submitRoots(); + rootIndex = uint32(bound(uint256(rootIndex), 0, 2)); + + cheats.warp(currTimestamp); + + cheats.expectEmit(true, true, true, true, address(rewardsCoordinator)); + emit DistributionRootDisabled(rootIndex); + cheats.prank(rewardsUpdater); + rewardsCoordinator.disableRoot(rootIndex); + + assertEq( + rewardsCoordinator.getDistributionRootAtIndex(rootIndex).disabled, + true, + "root should be disabled" + ); + } + + function _submitRoots() internal { + cheats.warp(1e6); + + // submitRoots with indexes 0,1,2 + cheats.startPrank(rewardsUpdater); + rewardsCoordinator.submitRoot(bytes32("0"), uint32(block.timestamp - 1)); + + cheats.warp(block.timestamp + 2); + rewardsCoordinator.submitRoot(bytes32("1"), uint32(block.timestamp - 1)); + + cheats.warp(block.timestamp + 2); + rewardsCoordinator.submitRoot(bytes32("2"), uint32(block.timestamp - 1)); + + cheats.stopPrank(); + } +} + +contract RewardsCoordinatorUnitTests_operatorCommission is RewardsCoordinatorUnitTests { + uint8 numberOfRewardTypes = 1; + + function testFuzz_operatorCommissionBips_EmptyHistory( + address operator, + IAVSDirectory.OperatorSet calldata operatorSet, + uint8 rewardTypeEnum + ) public { + rewardTypeEnum = uint8(bound(rewardTypeEnum, 0, numberOfRewardTypes - 1)); + IRewardsCoordinator.RewardType rewardType = IRewardsCoordinator.RewardType(rewardTypeEnum); + rewardType = IRewardsCoordinator.RewardType(uint8(bound(uint256(rewardType), 0, 1))); + // Check operator commission + uint32 operatorCommissionBipsStored = rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType); + assertEq( + globalCommissionBips, + operatorCommissionBipsStored, + "Incorrect default operator commission bips" + ); + } + + function testFuzz_setOperatorCommissionBips_Reverts_WhenBipsGreaterThanMax( + address operator, + IAVSDirectory.OperatorSet calldata operatorSet, + uint8 rewardTypeEnum, + uint16 newOperatorCommissionBips + ) public filterFuzzedAddressInputs(operator) { + rewardTypeEnum = uint8(bound(rewardTypeEnum, 0, numberOfRewardTypes - 1)); + IRewardsCoordinator.RewardType rewardType = IRewardsCoordinator.RewardType(rewardTypeEnum); + cheats.assume(newOperatorCommissionBips > MAX_COMMISSION_BIPS); + cheats.expectRevert("RewardsCoordinator.setOperatorCommissionBips: commissionBips too high"); + cheats.prank(operator); + rewardsCoordinator.setOperatorCommissionBips(operatorSet, rewardType, newOperatorCommissionBips); + } + + /// @notice test setting operator commission bips to a new value with empty history + function testFuzz_setOperatorCommissionBips_EmptyHistory( + address operator, + IAVSDirectory.OperatorSet calldata operatorSet, + uint8 rewardTypeEnum, + uint16 newOperatorCommissionBips, + uint256 randSalt + ) public filterFuzzedAddressInputs(operator) { + rewardTypeEnum = uint8(bound(rewardTypeEnum, 0, numberOfRewardTypes - 1)); + IRewardsCoordinator.RewardType rewardType = IRewardsCoordinator.RewardType(rewardTypeEnum); + cheats.assume(newOperatorCommissionBips != globalCommissionBips); + cheats.assume(newOperatorCommissionBips <= MAX_COMMISSION_BIPS); + // 1. Set operator commission and check updated value hasn't taken effect yet + uint16 prevOperatorCommissionBips = rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType); + cheats.prank(operator); + uint32 effectTimestamp = rewardsCoordinator.setOperatorCommissionBips( + operatorSet, + rewardType, + newOperatorCommissionBips + ); + assertTrue( + rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType) == prevOperatorCommissionBips, + "Operator commission bips should not be updated" + ); + assertTrue( + rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType) != newOperatorCommissionBips, + "Operator commission bips should not be updated" + ); + + // 2. warp timestamp forwards to random time that is not the effectTimestamp + uint256 warpTimestamp = bound(randSalt, block.timestamp, effectTimestamp - 1); + cheats.warp(warpTimestamp); + assertTrue( + rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType) != newOperatorCommissionBips, + "Operator commission bips should still be not updated" + ); + + // 3. warp timestamp forwards to effectTimestamp, operator commission should be updated now + cheats.warp(effectTimestamp); + assertTrue( + rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType) == newOperatorCommissionBips, + "Operator commission bips should be updated" + ); + } + + /// @notice test setting operator commission bips to a new value with non empty history + function testFuzz_setOperatorCommissionBips_WithHistory( + address operator, + IAVSDirectory.OperatorSet calldata operatorSet, + uint8 rewardTypeEnum, + uint16 newOperatorCommissionBips, + uint256 randSalt + ) public filterFuzzedAddressInputs(operator) { + rewardTypeEnum = uint8(bound(rewardTypeEnum, 0, numberOfRewardTypes - 1)); + IRewardsCoordinator.RewardType rewardType = IRewardsCoordinator.RewardType(rewardTypeEnum); + cheats.assume(newOperatorCommissionBips <= MAX_COMMISSION_BIPS); + + // 1. Set operator commission to initial value with existing history + uint16 prevOperatorCommissionBips = uint16(bound(randSalt, 0, MAX_COMMISSION_BIPS)); + cheats.assume(prevOperatorCommissionBips != newOperatorCommissionBips); + cheats.prank(operator); + uint32 effectTimestamp = rewardsCoordinator.setOperatorCommissionBips( + operatorSet, + rewardType, + prevOperatorCommissionBips + ); + cheats.warp(effectTimestamp); + assertTrue( + rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType) == prevOperatorCommissionBips, + "1. Operator commission bips should be initialized properly" + ); + assertEq( + rewardsCoordinator.getOperatorCommissionUpdateHistoryLength(operator, operatorSet, rewardType), + 1, + "2. Invalid commission history length" + ); + + // 2. Set operator commission and check updated value hasn't taken effect yet + cheats.prank(operator); + effectTimestamp = rewardsCoordinator.setOperatorCommissionBips( + operatorSet, + rewardType, + newOperatorCommissionBips + ); + assertEq( + rewardsCoordinator.getOperatorCommissionUpdateHistoryLength(operator, operatorSet, rewardType), + 2, + "3. Invalid commission history length" + ); + assertTrue( + rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType) == prevOperatorCommissionBips, + "4. Operator commission bips should not be updated" + ); + assertTrue( + rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType) != newOperatorCommissionBips, + "5. Operator commission bips should not be updated" + ); + + // 3. warp timestamp forwards to random time that is not the effectTimestamp + uint256 warpTimestamp = bound(randSalt, block.timestamp, effectTimestamp - 1); + + cheats.warp(warpTimestamp); + assertTrue( + rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType) == prevOperatorCommissionBips, + "6. Operator commission bips should still be not updated" + ); + + // 4. warp timestamp forwards to effectTimestamp, operator commission should be updated now + cheats.warp(effectTimestamp); + assertTrue( + rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType) == newOperatorCommissionBips, + "7.Operator commission bips should be updated" + ); + } + + /// @notice test setting operator commission bips to a new value with pending update + /// has same effectTimestamp. Should overrwrite previous value + function testFuzz_setOperatorCommissionBips_SameBlockUpdate( + address operator, + IAVSDirectory.OperatorSet calldata operatorSet, + uint8 rewardTypeEnum, + uint16 pendingCommissionBips, + uint16 overwriteCommissionBips + ) public filterFuzzedAddressInputs(operator) { + rewardTypeEnum = uint8(bound(rewardTypeEnum, 0, numberOfRewardTypes - 1)); + IRewardsCoordinator.RewardType rewardType = IRewardsCoordinator.RewardType(rewardTypeEnum); + cheats.assume(pendingCommissionBips <= MAX_COMMISSION_BIPS); + cheats.assume(overwriteCommissionBips <= MAX_COMMISSION_BIPS); + cheats.prank(operator); + uint32 effectTimestamp = rewardsCoordinator.setOperatorCommissionBips( + operatorSet, + rewardType, + pendingCommissionBips + ); + assertEq( + rewardsCoordinator.getOperatorCommissionUpdateHistoryLength(operator, operatorSet, rewardType), + 1, + "1. Invalid commission history length" + ); + cheats.prank(operator); + uint32 effectTimestamp2 = rewardsCoordinator.setOperatorCommissionBips( + operatorSet, + rewardType, + overwriteCommissionBips + ); + assertEq( + rewardsCoordinator.getOperatorCommissionUpdateHistoryLength(operator, operatorSet, rewardType), + 1, + "2. Invalid commission history length" + ); + assertEq( + effectTimestamp, + effectTimestamp2, + "3. Effect timestamp should be the same" + ); + cheats.warp(effectTimestamp); + assertEq( + rewardsCoordinator.getOperatorCommissionBips(operator, operatorSet, rewardType), + overwriteCommissionBips, + "4. Operator commission bips should be updated" + ); + } +} + +contract RewardsCoordinatorUnitTests_rewardOperatorSetForRange is RewardsCoordinatorUnitTests { + uint32 defaultOperatorSetId = 0; + uint32 validDuration = 2 weeks; + uint32 validStartTimestamp = OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP; + + function test_Revert_WhenPaused() public { + cheats.prank(pauser); + rewardsCoordinator.pause(2 ** PAUSED_REWARD_OPERATOR_SET); + + cheats.expectRevert("Pausable: index is paused"); + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions; + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function test_Revert_WhenReentrancy() public { + uint256 amount = 1e38-1; + Reenterer reenterer = new Reenterer(); + + reenterer.prepareReturnData(abi.encode(amount)); + + address targetToUse = address(rewardsCoordinator); + uint256 msgValueToUse = 0; + + _deployMockRewardTokens(address(this), 1); + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: IERC20(address(reenterer)), + amount: amount, + startTimestamp: uint32(block.timestamp), + duration: 0 + }); + + bytes memory calldataToUse = abi.encodeWithSelector(RewardsCoordinator.createAVSRewardsSubmission.selector, rewardsSubmissions); + reenterer.prepare(targetToUse, msgValueToUse, calldataToUse, bytes("ReentrancyGuard: reentrant call")); + + cheats.expectRevert(); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function test_Revert_EmptyStratsAndMultipliers() public { + IRewardsCoordinator.StrategyAndMultiplier[] memory emptyStratsAndMultipliers; + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: emptyStratsAndMultipliers, + token: IERC20(address(this)), + amount: 1, + startTimestamp: uint32(block.timestamp), + duration: 0 + }); + + cheats.prank(defaultAVS); + cheats.expectRevert("RewardsCoordinator._validateRewardsSubmission: no strategies set"); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function test_Revert_ZeroAmount() public { + uint256 amount = 0; + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: IERC20(address(this)), + amount: amount, + startTimestamp: uint32(block.timestamp), + duration: 0 + }); + + cheats.prank(defaultAVS); + cheats.expectRevert("RewardsCoordinator._validateRewardsSubmission: amount cannot be 0"); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function test_Revert_AmountTooLarge() public { + uint256 amount = 1e38; + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: IERC20(address(this)), + amount: amount, + startTimestamp: uint32(block.timestamp), + duration: 0 + }); + + cheats.prank(defaultAVS); + cheats.expectRevert("RewardsCoordinator._validateRewardsSubmission: amount too large"); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function test_Revert_DurationTooLarge() public { + uint32 duration = MAX_REWARDS_DURATION + 1; + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: IERC20(address(this)), + amount: 1, + startTimestamp: uint32(block.timestamp), + duration: duration + }); + + cheats.prank(defaultAVS); + cheats.expectRevert("RewardsCoordinator._validateRewardsSubmission: duration exceeds MAX_REWARDS_DURATION"); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function test_Revert_DurationInvalidMultiple(uint256 duration) public { + uint256 duration = CALCULATION_INTERVAL_SECONDS - 1; + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: IERC20(address(this)), + amount: 1, + startTimestamp: uint32(block.timestamp), + duration: uint32(duration) + }); + + cheats.prank(defaultAVS); + cheats.expectRevert("RewardsCoordinator._validateRewardsSubmission: duration must be a multiple of CALCULATION_INTERVAL_SECONDS"); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function test_Revert_InvalidStartTimestamp() public { + uint32 startTimestamp = OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP + 1; + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: IERC20(address(this)), + amount: 1, + startTimestamp: startTimestamp, + duration: validDuration + }); + + cheats.prank(defaultAVS); + cheats.expectRevert("RewardsCoordinator._validateRewardsSubmission: startTimestamp must be a multiple of CALCULATION_INTERVAL_SECONDS"); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function test_Revert_StartTimestampPriorToGenesis() public { + uint256 startTimestamp = OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP - CALCULATION_INTERVAL_SECONDS; + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: IERC20(address(this)), + amount: 1, + startTimestamp: uint32(startTimestamp), + duration: validDuration + }); + + cheats.prank(defaultAVS); + cheats.expectRevert("RewardsCoordinator._validateRewardsSubmission: startTimestamp too far in the past"); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + /// @notice Warps block timestamp & attemps to go make a reward to genesis + function test_Revert_StartTimestampGoesFarBack() public { + /// Warp to a timestamp past max retroactive length + cheats.warp(OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP + OPERATOR_SET_MAX_RETROACTIVE_LENGTH + CALCULATION_INTERVAL_SECONDS); + uint256 startTimestamp = OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP; + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: IERC20(address(this)), + amount: 1, + startTimestamp: uint32(startTimestamp), + duration: validDuration + }); + + cheats.prank(defaultAVS); + cheats.expectRevert("RewardsCoordinator._validateRewardsSubmission: startTimestamp too far in the past"); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function test_Revert_StartTimestampTooFarInFuture() public { + cheats.warp(OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP); + + uint256 startTimestamp = OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP + MAX_FUTURE_LENGTH + CALCULATION_INTERVAL_SECONDS; + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: IERC20(address(this)), + amount: 1, + startTimestamp: uint32(startTimestamp), + duration: validDuration + }); + + cheats.prank(defaultAVS); + cheats.expectRevert("RewardsCoordinator._validateRewardsSubmission: startTimestamp too far in the future"); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function test_Revert_InvalidStrategyConsidered() public { + cheats.warp(OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP); + defaultStrategyAndMultipliers[0].strategy = IStrategy(address(999)); + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: IERC20(address(this)), + amount: 1, + startTimestamp: validStartTimestamp, + duration: validDuration + }); + + cheats.prank(defaultAVS); + cheats.expectRevert("RewardsCoordinator._validateRewardsSubmission: invalid strategy considered"); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function test_Revert_StrategiesNotOrdered() public { + cheats.warp(OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP); + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + IRewardsCoordinator.StrategyAndMultiplier[] + memory dupStratsAndMultipliers = new IRewardsCoordinator.StrategyAndMultiplier[](2); + dupStratsAndMultipliers[0] = defaultStrategyAndMultipliers[0]; + dupStratsAndMultipliers[1] = defaultStrategyAndMultipliers[0]; + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: dupStratsAndMultipliers, + token: IERC20(address(this)), + amount: 1, + startTimestamp: validStartTimestamp, + duration: validDuration + }); + + cheats.prank(defaultAVS); + cheats.expectRevert("RewardsCoordinator._validateRewardsSubmission: strategies must be in ascending order to handle duplicates"); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + } + + function testFuzz_RewardOperatorSetForRange_SingleSubmission( + uint256 startTimestamp, + uint256 duration, + uint256 amount + ) public { + cheats.warp(OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP); + + // 1. Bound fuzz inputs to valid ranges and amounts + IERC20 rewardToken = new ERC20PresetFixedSupply("dog wif hat", "MOCK1", mockTokenInitialSupply, defaultAVS); + amount = bound(amount, 1, mockTokenInitialSupply); + duration = bound(duration, 0, MAX_REWARDS_DURATION); + duration = duration - (duration % CALCULATION_INTERVAL_SECONDS); + startTimestamp = bound( + startTimestamp, + uint256(_maxTimestamp(OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, uint32(block.timestamp) - OPERATOR_SET_MAX_RETROACTIVE_LENGTH)) + + CALCULATION_INTERVAL_SECONDS - + 1, + block.timestamp + uint256(MAX_FUTURE_LENGTH) + ); + startTimestamp = startTimestamp - (startTimestamp % CALCULATION_INTERVAL_SECONDS); + + // 2. Create rewards submission input param + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](1); + rewardsSubmissions[0] = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: rewardToken, + amount: amount, + startTimestamp: uint32(startTimestamp), + duration: uint32(duration) + }); + + // 3. call createAVSRewardsSubmission() with expected event emitted + uint256 avsBalanceBefore = rewardToken.balanceOf(defaultAVS); + uint256 rewardsCoordinatorBalanceBefore = rewardToken.balanceOf(address(rewardsCoordinator)); + + cheats.startPrank(defaultAVS); + rewardToken.approve(address(rewardsCoordinator), amount); + uint256 currSubmissionNonce = rewardsCoordinator.submissionNonce(defaultAVS); + bytes32 rewardsSubmissionHash = keccak256(abi.encode(defaultAVS, currSubmissionNonce, rewardsSubmissions[0])); + + cheats.expectEmit(true, true, true, true, address(rewardsCoordinator)); + emit OperatorSetRewardCreated(defaultAVS, currSubmissionNonce, rewardsSubmissionHash, rewardsSubmissions[0]); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + cheats.stopPrank(); + + assertTrue(rewardsCoordinator.isAVSRewardsSubmissionHash(defaultAVS, rewardsSubmissionHash), "rewards submission hash not submitted"); + assertEq(currSubmissionNonce + 1, rewardsCoordinator.submissionNonce(defaultAVS), "submission nonce not incremented"); + assertEq( + avsBalanceBefore - amount, + rewardToken.balanceOf(defaultAVS), + "AVS balance not decremented by amount of rewards submission" + ); + assertEq( + rewardsCoordinatorBalanceBefore + amount, + rewardToken.balanceOf(address(rewardsCoordinator)), + "RewardsCoordinator balance not incremented by amount of rewards submission" + ); + } + + /** + * @notice test multiple rewards submissions asserting for the following + * - correct event emitted + * - submission nonce incrementation by numSubmissions, and rewards submission hashes being set in storage. + * - rewards submission hash being set in storage + * - token balances before and after of avs and rewardsCoordinator + */ + function testFuzz_RewardOperatorSetForRange_MultipleSubmissions( + uint256 startTimestamp, + uint256 duration, + uint256 amount, + uint256 numSubmissions + ) public { + cheats.assume(2 <= numSubmissions && numSubmissions <= 10); + cheats.warp(OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP); + + IRewardsCoordinator.OperatorSetRewardsSubmission[] memory rewardsSubmissions = new IRewardsCoordinator.OperatorSetRewardsSubmission[](numSubmissions); + bytes32[] memory rewardsSubmissionHashes = new bytes32[](numSubmissions); + uint256 startSubmissionNonce = rewardsCoordinator.submissionNonce(defaultAVS); + _deployMockRewardTokens(defaultAVS, numSubmissions); + + uint256[] memory avsBalancesBefore = _getBalanceForTokens(rewardTokens, defaultAVS); + uint256[] memory rewardsCoordinatorBalancesBefore = _getBalanceForTokens( + rewardTokens, + address(rewardsCoordinator) + ); + uint256[] memory amounts = new uint256[](numSubmissions); + + // Create multiple rewards submissions and their expected event + for (uint256 i = 0; i < numSubmissions; ++i) { + // 1. Bound fuzz inputs to valid ranges and amounts using randSeed for each + amount = bound(amount + i, 1, mockTokenInitialSupply); + amounts[i] = amount; + duration = bound(duration + i, 0, MAX_REWARDS_DURATION); + duration = duration - (duration % CALCULATION_INTERVAL_SECONDS); + startTimestamp = bound( + startTimestamp + i, + uint256(_maxTimestamp(OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, uint32(block.timestamp) - OPERATOR_SET_MAX_RETROACTIVE_LENGTH)) + + CALCULATION_INTERVAL_SECONDS - + 1, + block.timestamp + uint256(MAX_FUTURE_LENGTH) + ); + startTimestamp = startTimestamp - (startTimestamp % CALCULATION_INTERVAL_SECONDS); + + // 2. Create rewards submission input param + IRewardsCoordinator.OperatorSetRewardsSubmission memory rewardsSubmission = IRewardsCoordinator.OperatorSetRewardsSubmission({ + rewardType: IRewardsCoordinator.RewardType.DELEGATED_STAKE, + operatorSetId: defaultOperatorSetId, + strategiesAndMultipliers: defaultStrategyAndMultipliers, + token: rewardTokens[i], + amount: amounts[i], + startTimestamp: uint32(startTimestamp), + duration: uint32(duration) + }); + rewardsSubmissions[i] = rewardsSubmission; + + // 3. expected event emitted for this rewardsSubmission + rewardsSubmissionHashes[i] = keccak256(abi.encode(defaultAVS, startSubmissionNonce + i, rewardsSubmissions[i])); + cheats.expectEmit(true, true, true, true, address(rewardsCoordinator)); + emit OperatorSetRewardCreated(defaultAVS, startSubmissionNonce + i, rewardsSubmissionHashes[i], rewardsSubmissions[i]); + } + + // 4. call createAVSRewardsSubmission() + cheats.prank(defaultAVS); + rewardsCoordinator.rewardOperatorSetForRange(rewardsSubmissions); + + // 5. Check for submissionNonce() and rewardsSubmissionHashes being set + assertEq( + startSubmissionNonce + numSubmissions, + rewardsCoordinator.submissionNonce(defaultAVS), + "submission nonce not incremented properly" + ); + + for (uint256 i = 0; i < numSubmissions; ++i) { + assertTrue( + rewardsCoordinator.isAVSRewardsSubmissionHash(defaultAVS, rewardsSubmissionHashes[i]), + "rewards submission hash not submitted" + ); + assertEq( + avsBalancesBefore[i] - amounts[i], + rewardTokens[i].balanceOf(defaultAVS), + "AVS balance not decremented by amount of rewards submission" + ); + assertEq( + rewardsCoordinatorBalancesBefore[i] + amounts[i], + rewardTokens[i].balanceOf(address(rewardsCoordinator)), + "RewardsCoordinator balance not incremented by amount of rewards submission" + ); + } + } +} \ No newline at end of file diff --git a/src/test/utils/EigenLayerUnitTestSetup.sol b/src/test/utils/EigenLayerUnitTestSetup.sol index 82a9c85b3..6939fd7d2 100644 --- a/src/test/utils/EigenLayerUnitTestSetup.sol +++ b/src/test/utils/EigenLayerUnitTestSetup.sol @@ -5,6 +5,7 @@ import "src/test/mocks/StrategyManagerMock.sol"; import "src/test/mocks/DelegationManagerMock.sol"; import "src/test/mocks/SlasherMock.sol"; import "src/test/mocks/EigenPodManagerMock.sol"; +import "src/test/mocks/AVSDirectoryMock.sol"; import "src/test/utils/EigenLayerUnitTestBase.sol"; abstract contract EigenLayerUnitTestSetup is EigenLayerUnitTestBase { @@ -13,6 +14,7 @@ abstract contract EigenLayerUnitTestSetup is EigenLayerUnitTestBase { DelegationManagerMock public delegationManagerMock; SlasherMock public slasherMock; EigenPodManagerMock public eigenPodManagerMock; + AVSDirectoryMock public avsDirectoryMock; function setUp() public virtual override { EigenLayerUnitTestBase.setUp(); @@ -20,6 +22,7 @@ abstract contract EigenLayerUnitTestSetup is EigenLayerUnitTestBase { delegationManagerMock = new DelegationManagerMock(); slasherMock = new SlasherMock(); eigenPodManagerMock = new EigenPodManagerMock(pauserRegistry); + avsDirectoryMock = new AVSDirectoryMock(); addressIsExcludedFromFuzzedInputs[address(0)] = true; addressIsExcludedFromFuzzedInputs[address(strategyManagerMock)] = true; From 4163212d26d955bc6a123cc4790d76a01a0b3d1f Mon Sep 17 00:00:00 2001 From: Michael Sun <35479365+8sunyuan@users.noreply.github.com> Date: Mon, 22 Jul 2024 15:32:27 -0400 Subject: [PATCH 06/47] feat: operator commission bips (#627) * feat: operator commission bips configured with a delay * build: bindings * fix: interfaces and comments * fix: storage gap and comments * chore: tests cleanup * build: bindings * chore: `forge fmt src/contracts` * feat: `operatorCommissionUpdates` length getter * fix: remove unused imports * fix: optimizations * chore: uncheckeds and remove dup view * build: bindings * chore: format --------- Co-authored-by: clandestine.eth <96172957+0xClandestine@users.noreply.github.com> --- pkg/bindings/AVSDirectory/binding.go | 851 ++---------------- pkg/bindings/AVSDirectoryStorage/binding.go | 791 ++-------------- .../DelayedWithdrawalRouter/binding.go | 2 +- pkg/bindings/DelegationManager/binding.go | 2 +- pkg/bindings/EigenPodManager/binding.go | 2 +- pkg/bindings/IAVSDirectory/binding.go | 631 ++----------- pkg/bindings/IRewardsCoordinator/binding.go | 232 +---- pkg/bindings/RewardsCoordinator/binding.go | 300 +----- .../RewardsCoordinatorStorage/binding.go | 325 +------ .../core/RewardsCoordinatorStorage.sol | 3 + .../interfaces/IRewardsCoordinator.sol | 12 +- src/test/unit/RewardsCoordinatorUnit.t.sol | 2 +- 12 files changed, 277 insertions(+), 2876 deletions(-) diff --git a/pkg/bindings/AVSDirectory/binding.go b/pkg/bindings/AVSDirectory/binding.go index c78bf2f99..86422e510 100644 --- a/pkg/bindings/AVSDirectory/binding.go +++ b/pkg/bindings/AVSDirectory/binding.go @@ -29,12 +29,6 @@ var ( _ = abi.ConvertType ) -// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 -} - // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -44,8 +38,8 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryMetaData contains all meta data concerning the AVSDirectory contract. var AVSDirectoryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"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\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getNumOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetsOfOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetMemberAtIndex\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOfAtIndex\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", - Bin: "0x60c06040523480156200001157600080fd5b5060405162003f5938038062003f59833981016040819052620000349162000118565b6001600160a01b0381166080526200004b62000056565b504660a0526200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a051613ddb6200017e60003960006124c40152600081816105fa01528181610be601526115400152613ddb6000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c8063955e669611610146578063c825fe68116100c3578063df5cf72311610087578063df5cf723146105f5578063ec76f4421461061c578063ef2dfa8d14610650578063f2fde38b14610663578063f698da2514610676578063fabc1cbc1461067e57600080fd5b8063c825fe681461055a578063cbdf0e4214610581578063d79aceab14610594578063da2ff05d146105bb578063dce974b9146105ce57600080fd5b8063aec205c51161010a578063aec205c5146104f9578063afe02ed514610501578063b2841d4814610514578063b5a768ca14610527578063c1a8e2c51461054757600080fd5b8063955e66961461049a5780639926ee7d146104ad578063a1060c88146104c0578063a364f4da146104d3578063a98fb355146104e657600080fd5b806349075da3116101d45780637357723b116101985780637357723b146104055780637673e93a1461042557806384d76f7b14610448578063886f1195146104765780638da5cb5b1461048957600080fd5b806349075da31461038f578063595c6a67146103ca5780635ac86ab7146103d25780635c975abb146103f5578063715018a6146103fd57600080fd5b80631e2199e21161021b5780631e2199e2146102d957806320606b70146102ec578063374823b5146103135780633fee332d14610351578063411d415b1461036457600080fd5b80631023aa351461025857806310d67a2f1461027e578063136439dd1461029357806316ae76cb146102a65780631794bb3c146102c6575b600080fd5b61026b61026636600461325d565b610691565b6040519081526020015b60405180910390f35b61029161028c366004613279565b6106bc565b005b6102916102a1366004613296565b610778565b6102b96102b43660046132af565b6108b7565b60405161027591906132e4565b6102916102d436600461334a565b6109fc565b6102916102e7366004613481565b610b26565b61026b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103416103213660046134fc565b609960209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610275565b61029161035f366004613528565b610e46565b6103776103723660046135b6565b611090565b6040516001600160a01b039091168152602001610275565b6103bd61039d3660046135e1565b609860209081526000928352604080842090915290825290205460ff1681565b6040516102759190613630565b6102916110c6565b6103416103e0366004613658565b606654600160ff9092169190911b9081161490565b60665461026b565b61029161118d565b61041861041336600461367b565b6111a1565b60405161027591906136af565b610341610433366004613279565b609a6020526000908152604090205460ff1681565b6103416104563660046136fc565b609b60209081526000928352604080842090915290825290205460ff1681565b606554610377906001600160a01b031681565b6033546001600160a01b0316610377565b61026b6104a8366004613731565b611297565b6102916104bb366004613797565b6112fc565b61026b6104ce3660046137e6565b6116ca565b6102916104e1366004613279565b611734565b6102916104f436600461382c565b611902565b610291611949565b61029161050f36600461389d565b611a11565b61026b610522366004613731565b611bde565b61053a6105353660046134fc565b611c1e565b60405161027591906138de565b610291610555366004613904565b611c58565b61026b7f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61026b61058f366004613279565b611c8d565b61026b7fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6103416105c9366004613958565b611cae565b61026b7f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b6103777f000000000000000000000000000000000000000000000000000000000000000081565b61029161062a366004613296565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b61029161065e366004613985565b611cda565b610291610671366004613279565b612083565b61026b6120f9565b61029161068c366004613296565b612108565b60006106b6609d60006106a385612264565b81526020019081526020016000206122c9565b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561070f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073391906139f0565b6001600160a01b0316336001600160a01b03161461076c5760405162461bcd60e51b815260040161076390613a0d565b60405180910390fd5b610775816122d3565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156107c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e49190613a57565b6108005760405162461bcd60e51b815260040161076390613a79565b606654818116146108795760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610763565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b0383166000908152609c602052604081206060919084906108de906122c9565b6108e89190613ad7565b9050808311156108f6578092505b826001600160401b0381111561090e5761090e613162565b60405190808252806020026020018201604052801561095357816020015b604080518082019091526000808252602082015281526020019060019003908161092c5790505b50915060005b838110156109f3576109c561098f6109718388613aee565b6001600160a01b0389166000908152609c60205260409020906123ca565b60408051808201909152600080825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b8382815181106109d7576109d7613b06565b6020026020010181905250806109ec90613b1c565b9050610959565b50509392505050565b600054610100900460ff1615808015610a1c5750600054600160ff909116105b80610a365750303b158015610a36575060005460ff166001145b610a995760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610763565b6000805460ff191660011790558015610abc576000805461ff0019166101001790555b610ac683836123d6565b610ace6124c0565b609755610ada84612589565b8015610b20576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60665460019060029081161415610b4f5760405162461bcd60e51b815260040161076390613b37565b4282604001511015610bc75760405162461bcd60e51b81526020600482015260476024820152600080516020613d6683398151915260448201527f70657261746f72536574733a206f70657261746f72207369676e617475726520606482015266195e1c1a5c995960ca1b608482015260a401610763565b6040516336b87bd760e11b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015610c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c519190613a57565b610cd05760405162461bcd60e51b81526020600482015260566024820152600080516020613d6683398151915260448201527f70657261746f72536574733a206f70657261746f72206e6f7420726567697374606482015275195c9959081d1bc8115a59d95b93185e595c881e595d60521b608482015260a401610763565b336000908152609a602052604090205460ff16610d575760405162461bcd60e51b815260206004820152604b6024820152600080516020613d6683398151915260448201527f70657261746f72536574733a20415653206973206e6f7420616e206f7065726160648201526a746f72207365742041565360a81b608482015260a401610763565b6001600160a01b038516600090815260996020908152604080832085830151845290915290205460ff1615610de25760405162461bcd60e51b815260206004820152603f6024820152600080516020613d6683398151915260448201527f70657261746f72536574733a2073616c7420616c7265616479207370656e74006064820152608401610763565b610e0285610dfb33878787602001518860400151611297565b84516125db565b6001600160a01b03851660009081526099602090815260408083208583015184529091529020805460ff19166001179055610e3f85338686612795565b5050505050565b60665460019060029081161415610e6f5760405162461bcd60e51b815260040161076390613b37565b815151610f0757336001600160a01b03871614610f025760405162461bcd60e51b815260206004820152604560248201527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a2063616c6c6572206d757374206265206f70656064820152643930ba37b960d91b608482015260a401610763565b61107c565b4282604001511015610f925760405162461bcd60e51b815260206004820152604860248201527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a206f70657261746f72207369676e617475726560648201526708195e1c1a5c995960c21b608482015260a401610763565b6001600160a01b038616600090815260996020908152604080832085830151845290915290205460ff1615611031576040805162461bcd60e51b81526020600482015260248101919091527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a2073616c7420616c7265616479207370656e746064820152608401610763565b61104a86610dfb87878787602001518860400151611bde565b6001600160a01b03861660009081526099602090815260408083208583015184529091529020805460ff191660011790555b611088858786866129f9565b505050505050565b60006110bf82609d60006110a387612264565b81526020019081526020016000206123ca90919063ffffffff16565b9392505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561110e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111329190613a57565b61114e5760405162461bcd60e51b815260040161076390613a79565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611195612b86565b61119f6000612589565b565b606060006111ae85612264565b6000818152609d602052604081209192509085906111cb906122c9565b6111d59190613ad7565b9050808411156111e3578093505b836001600160401b038111156111fb576111fb613162565b604051908082528060200260200182016040528015611224578160200160208202803683370190505b50925060005b8481101561128d5761125361123f8288613aee565b6000858152609d60205260409020906123ca565b84828151811061126557611265613b06565b6001600160a01b039092166020928302919091019091015261128681613b1c565b905061122a565b5050509392505050565b60006112f27f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92987878787876040516020016112d796959493929190613bb2565b60405160208183030381529060405280519060200120612be0565b9695505050505050565b606654600090600190811614156113255760405162461bcd60e51b815260040161076390613b37565b428260400151101561138d5760405162461bcd60e51b815260206004820152603e6024820152600080516020613d8683398151915260448201527f56533a206f70657261746f72207369676e6174757265206578706972656400006064820152608401610763565b336000908152609a602052604090205460ff16156114015760405162461bcd60e51b815260206004820152603e6024820152600080516020613d8683398151915260448201527f56533a2041565320697320616e206f70657261746f72207365742041565300006064820152608401610763565b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff16600181111561143b5761143b61361a565b141561149d5760405162461bcd60e51b815260206004820152603f6024820152600080516020613d8683398151915260448201527f56533a206f70657261746f7220616c72656164792072656769737465726564006064820152608401610763565b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff16156115215760405162461bcd60e51b81526020600482015260366024820152600080516020613d868339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b6064820152608401610763565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab9190613a57565b6116215760405162461bcd60e51b815260206004820152604d6024820152600080516020613d8683398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a401610763565b61163983610dfb8533866020015187604001516116ca565b6001600160a01b038316600081815260996020908152604080832086830151845282528083208054600160ff19918216811790925533808652609885528386208787529094529382902080549094168117909355519092917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916116bd9190613630565b60405180910390a3505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a0810182905260009061172b9060c0016112d7565b95945050505050565b6066546000906001908116141561175d5760405162461bcd60e51b815260040161076390613b37565b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff1660018111156117975761179761361a565b1461180a5760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f742072656769737465726564006064820152608401610763565b336000908152609a602052604090205460ff161561189b5760405162461bcd60e51b815260206004820152604260248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a2041565320697320616e206f70657261746f72207365742041606482015261565360f01b608482015260a401610763565b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916118f69190613630565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713838360405161193d929190613bf2565b60405180910390a25050565b336000908152609a602052604090205460ff16156119cf5760405162461bcd60e51b815260206004820152603e60248201527f4156534469726563746f72792e6265636f6d654f70657261746f72536574415660448201527f533a20616c726561647920616e206f70657261746f72207365742041565300006064820152608401610763565b336000818152609a6020526040808220805460ff19166001179055517f702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf9190a2565b60005b81811015611bd957336000908152609b6020526040812090848484818110611a3e57611a3e613b06565b9050602002016020810190611a539190613c21565b63ffffffff16815260208101919091526040016000205460ff1615611ae05760405162461bcd60e51b815260206004820152603b60248201527f4156534469726563746f72792e6372656174654f70657261746f725365743a2060448201527f6f70657261746f722073657420616c72656164792065786973747300000000006064820152608401610763565b336000908152609b60205260408120600191858585818110611b0457611b04613b06565b9050602002016020810190611b199190613c21565b63ffffffff1663ffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c6040518060400160405280336001600160a01b03168152602001858585818110611b9757611b97613b06565b9050602002016020810190611bac9190613c21565b63ffffffff169052604051611bc191906138de565b60405180910390a1611bd281613b1c565b9050611a14565b505050565b60006112f27f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49587878787876040516020016112d796959493929190613bb2565b60408051808201909152600080825260208201526001600160a01b0383166000908152609c602052604090206110bf9061098f90846123ca565b60665460019060029081161415611c815760405162461bcd60e51b815260040161076390613b37565b610b20338585856129f9565b6001600160a01b0381166000908152609c602052604081206106b6906122c9565b60006110bf611cbc83612264565b6001600160a01b0385166000908152609c6020526040902090612c27565b60665460019060029081161415611d035760405162461bcd60e51b815260040161076390613b37565b336000908152609a602052604090205460ff16611d9c5760405162461bcd60e51b815260206004820152604b60248201527f4156534469726563746f72792e6d6967726174654f70657261746f7273546f4f60448201527f70657261746f72536574733a20415653206973206e6f7420616e206f7065726160648201526a746f72207365742041565360a81b608482015260a401610763565b60005b8481101561108857600133600090815260986020526040812090888885818110611dcb57611dcb613b06565b9050602002016020810190611de09190613279565b6001600160a01b0316815260208101919091526040016000205460ff166001811115611e0e57611e0e61361a565b14611eba5760405162461bcd60e51b815260206004820152606a60248201527f4156534469726563746f72792e6d6967726174654f70657261746f7273546f4f60448201527f70657261746f72536574733a206f70657261746f7220616c7265616479206d6960648201527f677261746564206f72206e6f742061206c656761637920726567697374657265608482015269321037b832b930ba37b960b11b60a482015260c401610763565b611f0e868683818110611ecf57611ecf613b06565b9050602002016020810190611ee49190613279565b33868685818110611ef757611ef7613b06565b9050602002810190611f099190613c3c565b612795565b33600090815260986020526040812081888885818110611f3057611f30613b06565b9050602002016020810190611f459190613279565b6001600160a01b031681526020810191909152604001600020805460ff191660018381811115611f7757611f7761361a565b021790555033868683818110611f8f57611f8f613b06565b9050602002016020810190611fa49190613279565b6001600160a01b03167ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b416000604051611fdd9190613630565b60405180910390a333868683818110611ff857611ff8613b06565b905060200201602081019061200d9190613279565b6001600160a01b03167f54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a0186868581811061204957612049613b06565b905060200281019061205b9190613c3c565b604051612069929190613c85565b60405180910390a38061207b81613b1c565b915050611d9f565b61208b612b86565b6001600160a01b0381166120f05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610763565b61077581612589565b60006121036124c0565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217f91906139f0565b6001600160a01b0316336001600160a01b0316146121af5760405162461bcd60e51b815260040161076390613a0d565b60665419811960665419161461222d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610763565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016108ac565b60008160000151826020015163ffffffff166040516020016122b192919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b6040516020818303038152906040526106b690613ca1565b60006106b6825490565b6001600160a01b0381166123615760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610763565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60006110bf8383612c3f565b6065546001600160a01b03161580156123f757506001600160a01b03821615155b6124795760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610763565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26124bc826122d3565b5050565b60007f00000000000000000000000000000000000000000000000000000000000000004614156124f1575060975490565b50604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383163b156126f557604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061261b9086908690600401613cc8565b602060405180830381865afa158015612638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265c9190613d25565b6001600160e01b03191614611bd95760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610763565b826001600160a01b03166127098383612c69565b6001600160a01b031614611bd95760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610763565b60005b81811015610e3f5760006040518060400160405280866001600160a01b031681526020018585858181106127ce576127ce613b06565b90506020020160208101906127e39190613c21565b63ffffffff1690526001600160a01b0386166000908152609b6020526040812091925085858581811061281857612818613b06565b905060200201602081019061282d9190613c21565b63ffffffff16815260208101919091526040016000205460ff166128c45760405162461bcd60e51b815260206004820152604260248201527f4156534469726563746f72792e5f72656769737465724f70657261746f72546f60448201527f4f70657261746f72536574733a20696e76616c6964206f70657261746f722073606482015261195d60f21b608482015260a401610763565b60006128cf82612264565b6001600160a01b0388166000908152609c602052604090209091506128f49082612c8d565b61298c5760405162461bcd60e51b815260206004820152605960248201527f4156534469726563746f72792e5f72656769737465724f70657261746f72546f60448201527f4f70657261746f72536574733a206f70657261746f7220616c7265616479207260648201527f65676973746572656420746f206f70657261746f722073657400000000000000608482015260a401610763565b6000818152609d602052604090206129a49088612c99565b50866001600160a01b03167f43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e836040516129de91906138de565b60405180910390a25050806129f290613b1c565b9050612798565b60005b81811015610e3f5760006040518060400160405280876001600160a01b03168152602001858585818110612a3257612a32613b06565b9050602002016020810190612a479190613c21565b63ffffffff16905290506000612a5c82612264565b6001600160a01b0387166000908152609c60205260409020909150612a819082612cae565b612b195760405162461bcd60e51b815260206004820152605960248201527f4156534469726563746f72792e5f646572656769737465724f70657261746f7260448201527f46726f6d4f70657261746f725365743a206f70657261746f72206e6f7420726560648201527f676973746572656420666f72206f70657261746f722073657400000000000000608482015260a401610763565b6000818152609d60205260409020612b319087612cba565b50856001600160a01b03167fad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe83604051612b6b91906138de565b60405180910390a2505080612b7f90613b1c565b90506129fc565b6033546001600160a01b0316331461119f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6000612bea6124c0565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b600081815260018301602052604081205415156110bf565b6000826000018281548110612c5657612c56613b06565b9060005260206000200154905092915050565b6000806000612c788585612ccf565b91509150612c8581612d3f565b509392505050565b60006110bf8383612efa565b60006110bf836001600160a01b038416612efa565b60006110bf8383612f49565b60006110bf836001600160a01b038416612f49565b600080825160411415612d065760208301516040840151606085015160001a612cfa8782858561303c565b94509450505050612d38565b825160401415612d305760208301516040840151612d25868383613129565b935093505050612d38565b506000905060025b9250929050565b6000816004811115612d5357612d5361361a565b1415612d5c5750565b6001816004811115612d7057612d7061361a565b1415612dbe5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610763565b6002816004811115612dd257612dd261361a565b1415612e205760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610763565b6003816004811115612e3457612e3461361a565b1415612e8d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610763565b6004816004811115612ea157612ea161361a565b14156107755760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610763565b6000818152600183016020526040812054612f41575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106b6565b5060006106b6565b60008181526001830160205260408120548015613032576000612f6d600183613ad7565b8554909150600090612f8190600190613ad7565b9050818114612fe6576000866000018281548110612fa157612fa1613b06565b9060005260206000200154905080876000018481548110612fc457612fc4613b06565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ff757612ff7613d4f565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106b6565b60009150506106b6565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156130735750600090506003613120565b8460ff16601b1415801561308b57508460ff16601c14155b1561309c5750600090506004613120565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156130f0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661311957600060019250925050613120565b9150600090505b94509492505050565b6000806001600160ff1b0383168161314660ff86901c601b613aee565b90506131548782888561303c565b935093505050935093915050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561319a5761319a613162565b60405290565b604051601f8201601f191681016001600160401b03811182821017156131c8576131c8613162565b604052919050565b6001600160a01b038116811461077557600080fd5b803563ffffffff811681146131f957600080fd5b919050565b60006040828403121561321057600080fd5b604051604081018181106001600160401b038211171561323257613232613162565b6040529050808235613243816131d0565b8152613251602084016131e5565b60208201525092915050565b60006040828403121561326f57600080fd5b6110bf83836131fe565b60006020828403121561328b57600080fd5b81356110bf816131d0565b6000602082840312156132a857600080fd5b5035919050565b6000806000606084860312156132c457600080fd5b83356132cf816131d0565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b8281101561333d5761332d84835180516001600160a01b0316825260209081015163ffffffff16910152565b9284019290850190600101613301565b5091979650505050505050565b60008060006060848603121561335f57600080fd5b833561336a816131d0565b9250602084013561337a816131d0565b929592945050506040919091013590565b60008083601f84011261339d57600080fd5b5081356001600160401b038111156133b457600080fd5b6020830191508360208260051b8501011115612d3857600080fd5b6000606082840312156133e157600080fd5b6133e9613178565b905081356001600160401b038082111561340257600080fd5b818401915084601f83011261341657600080fd5b813560208282111561342a5761342a613162565b61343c601f8301601f191682016131a0565b9250818352868183860101111561345257600080fd5b818185018285013760008183850101528285528086013581860152505050506040820135604082015292915050565b6000806000806060858703121561349757600080fd5b84356134a2816131d0565b935060208501356001600160401b03808211156134be57600080fd5b6134ca8883890161338b565b909550935060408701359150808211156134e357600080fd5b506134f0878288016133cf565b91505092959194509250565b6000806040838503121561350f57600080fd5b823561351a816131d0565b946020939093013593505050565b60008060008060006080868803121561354057600080fd5b853561354b816131d0565b9450602086013561355b816131d0565b935060408601356001600160401b038082111561357757600080fd5b61358389838a0161338b565b9095509350606088013591508082111561359c57600080fd5b506135a9888289016133cf565b9150509295509295909350565b600080606083850312156135c957600080fd5b6135d384846131fe565b946040939093013593505050565b600080604083850312156135f457600080fd5b82356135ff816131d0565b9150602083013561360f816131d0565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061365257634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561366a57600080fd5b813560ff811681146110bf57600080fd5b60008060006080848603121561369057600080fd5b61369a85856131fe565b95604085013595506060909401359392505050565b6020808252825182820181905260009190848201906040850190845b818110156136f05783516001600160a01b0316835292840192918401916001016136cb565b50909695505050505050565b6000806040838503121561370f57600080fd5b823561371a816131d0565b9150613728602084016131e5565b90509250929050565b60008060008060006080868803121561374957600080fd5b8535613754816131d0565b945060208601356001600160401b0381111561376f57600080fd5b61377b8882890161338b565b9699909850959660408101359660609091013595509350505050565b600080604083850312156137aa57600080fd5b82356137b5816131d0565b915060208301356001600160401b038111156137d057600080fd5b6137dc858286016133cf565b9150509250929050565b600080600080608085870312156137fc57600080fd5b8435613807816131d0565b93506020850135613817816131d0565b93969395505050506040820135916060013590565b6000806020838503121561383f57600080fd5b82356001600160401b038082111561385657600080fd5b818501915085601f83011261386a57600080fd5b81358181111561387957600080fd5b86602082850101111561388b57600080fd5b60209290920196919550909350505050565b600080602083850312156138b057600080fd5b82356001600160401b038111156138c657600080fd5b6138d28582860161338b565b90969095509350505050565b81516001600160a01b0316815260208083015163ffffffff1690820152604081016106b6565b60008060006040848603121561391957600080fd5b8335613924816131d0565b925060208401356001600160401b0381111561393f57600080fd5b61394b8682870161338b565b9497909650939450505050565b6000806060838503121561396b57600080fd5b8235613976816131d0565b915061372884602085016131fe565b6000806000806040858703121561399b57600080fd5b84356001600160401b03808211156139b257600080fd5b6139be8883890161338b565b909650945060208701359150808211156139d757600080fd5b506139e48782880161338b565b95989497509550505050565b600060208284031215613a0257600080fd5b81516110bf816131d0565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613a6957600080fd5b815180151581146110bf57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015613ae957613ae9613ac1565b500390565b60008219821115613b0157613b01613ac1565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613b3057613b30613ac1565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b8183526000602080850194508260005b85811015613ba75763ffffffff613b94836131e5565b1687529582019590820190600101613b7e565b509495945050505050565b8681526001600160a01b038616602082015260a060408201819052600090613bdd9083018688613b6e565b60608301949094525060800152949350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060208284031215613c3357600080fd5b6110bf826131e5565b6000808335601e19843603018112613c5357600080fd5b8301803591506001600160401b03821115613c6d57600080fd5b6020019150600581901b3603821315612d3857600080fd5b602081526000613c99602083018486613b6e565b949350505050565b80516020808301519190811015613cc2576000198160200360031b1b821691505b50919050565b82815260006020604081840152835180604085015260005b81811015613cfc57858101830151858201606001528201613ce0565b81811115613d0e576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215613d3757600080fd5b81516001600160e01b0319811681146110bf57600080fd5b634e487b7160e01b600052603160045260246000fdfe4156534469726563746f72792e72656769737465724f70657261746f72546f4f4156534469726563746f72792e72656769737465724f70657261746f72546f41a264697066735822122005d3574a86f79ee534ef469f7b042b9e3750db3f062f6f79fd4302b9ad8baa7a64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"deregisterFromAVSOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"memberInfo\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"inTotalSets\",\"type\":\"uint248\",\"internalType\":\"uint248\"},{\"name\":\"isLegacyOperator\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"isLegacyOperator\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", + Bin: "0x60c06040523480156200001157600080fd5b5060405162002b9838038062002b98833981016040819052620000349162000118565b6001600160a01b0381166080526200004b62000056565b504660a0526200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a051612a1a6200017e600039600061181c0152600081816104120152818161096501526110c10152612a1a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80639926ee7d116100f9578063d79aceab11610097578063f2fde38b11610071578063f2fde38b14610468578063f37c521c1461047b578063f698da25146104da578063fabc1cbc146104e257600080fd5b8063d79aceab146103e6578063df5cf7231461040d578063ec76f4421461043457600080fd5b8063a364f4da116100d3578063a364f4da14610386578063a98fb35514610399578063c1a8e2c5146103ac578063c825fe68146103bf57600080fd5b80639926ee7d1461034d5780639c6c518414610360578063a1060c881461037357600080fd5b8063595c6a6711610166578063715018a611610140578063715018a6146102f6578063886f1195146102fe5780638da5cb5b14610329578063955e66961461033a57600080fd5b8063595c6a67146102c35780635ac86ab7146102cb5780635c975abb146102ee57600080fd5b80631e2199e2116101a25780631e2199e21461020457806320606b7014610217578063374823b5146102515780633c4385d01461028f57600080fd5b806310d67a2f146101c9578063136439dd146101de5780631794bb3c146101f1575b600080fd5b6101dc6101d73660046121b8565b6104f5565b005b6101dc6101ec3660046121dc565b6105b1565b6101dc6101ff3660046121f5565b6106f0565b6101dc61021236600461239e565b61081a565b61023e7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61027f61025f36600461241a565b609860209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610248565b61027f61029d36600461245f565b609a60209081526000938452604080852082529284528284209052825290205460ff1681565b6101dc610d21565b61027f6102d93660046124a6565b606654600160ff9092169190911b9081161490565b60665461023e565b6101dc610de8565b606554610311906001600160a01b031681565b6040516001600160a01b039091168152602001610248565b6033546001600160a01b0316610311565b61023e6103483660046124c9565b610dfc565b6101dc61035b366004612530565b610e61565b6101dc61036e366004612580565b611230565b61023e6103813660046125d5565b611265565b6101dc6103943660046121b8565b6112cf565b6101dc6103a736600461261b565b6113da565b6101dc6103ba366004612580565b611421565b61023e7f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61023e7fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6103117f000000000000000000000000000000000000000000000000000000000000000081565b6101dc6104423660046121dc565b33600090815260986020908152604080832093835292905220805460ff19166001179055565b6101dc6104763660046121b8565b611456565b6104bb61048936600461268d565b60996020908152600092835260408084209091529082529020546001600160f81b03811690600160f81b900460ff1682565b604080516001600160f81b039093168352901515602083015201610248565b61023e6114cc565b6101dc6104f03660046121dc565b6114db565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056c91906126c6565b6001600160a01b0316336001600160a01b0316146105a55760405162461bcd60e51b815260040161059c906126e3565b60405180910390fd5b6105ae81611637565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061d919061272d565b6106395760405162461bcd60e51b815260040161059c9061274f565b606654818116146106b25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161059c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156107105750600054600160ff909116105b8061072a5750303b15801561072a575060005460ff166001145b61078d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161059c565b6000805460ff1916600117905580156107b0576000805461ff0019166101001790555b6107ba838361172e565b6107c2611818565b6097556107ce846118e1565b8015610814576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b606654600090600190811614156108435760405162461bcd60e51b815260040161059c90612797565b42826040015110156108bb5760405162461bcd60e51b8152602060048201526047602482015260008051602061298583398151915260448201527f70657261746f72536574733a206f70657261746f72207369676e617475726520606482015266195e1c1a5c995960ca1b608482015260a40161059c565b6001600160a01b038516600090815260986020908152604080832085830151845290915290205460ff16156109465760405162461bcd60e51b815260206004820152603f602482015260008051602061298583398151915260448201527f70657261746f72536574733a2073616c7420616c7265616479207370656e7400606482015260840161059c565b6040516336b87bd760e11b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156109ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d0919061272d565b610a4f5760405162461bcd60e51b8152602060048201526056602482015260008051602061298583398151915260448201527f70657261746f72536574733a206f70657261746f72206e6f7420726567697374606482015275195c9959081d1bc8115a59d95b93185e595c881e595d60521b608482015260a40161059c565b610a6f85610a6833878787602001518860400151610dfc565b8451611933565b6001600160a01b03851660008181526098602090815260408083208683015184528252808320805460ff1916600117905533835260998252808320938352929052208054600160f81b900460ff16610b045780546001600160f81b0316600160f81b1781556040516001815233906001600160a01b038816906000805160206129a58339815191529060200160405180910390a35b60005b84811015610cf657336000908152609a602090815260408083206001600160a01b038b168452909152812090878784818110610b4557610b456127ce565b9050602002016020810190610b5a91906127e4565b63ffffffff16815260208101919091526040016000205460ff1615610bfb5760405162461bcd60e51b8152602060048201526058602482015260008051602061298583398151915260448201527f70657261746f72536574733a206f70657261746f7220616c726561647920726560648201527f676973746572656420746f206f70657261746f72207365740000000000000000608482015260a40161059c565b336000908152609a602090815260408083206001600160a01b038b1684529091528120600191888885818110610c3357610c336127ce565b9050602002016020810190610c4891906127e4565b63ffffffff1681526020810191909152604001600020805460ff19169115159190911790557f0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba3098733888885818110610ca257610ca26127ce565b9050602002016020810190610cb791906127e4565b604080516001600160a01b03948516815293909216602084015263ffffffff169082015260600160405180910390a1610cef81612815565b9050610b07565b5080546001600160f81b031981166001600160f81b0391821695909501169390931790925550505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d919061272d565b610da95760405162461bcd60e51b815260040161059c9061274f565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610df0611af2565b610dfa60006118e1565b565b6000610e577f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f9298787878787604051602001610e3c96959493929190612830565b60405160208183030381529060405280519060200120611b4c565b9695505050505050565b60665460009060019081161415610e8a5760405162461bcd60e51b815260040161059c90612797565b4282604001511015610ef25760405162461bcd60e51b815260206004820152603e60248201526000805160206129c583398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161059c565b3360009081526099602090815260408083206001600160a01b038716845290915290208054600160f81b900460ff1615610f825760405162461bcd60e51b815260206004820152603f60248201526000805160206129c583398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161059c565b80546001600160f81b03161561101e5760405162461bcd60e51b815260206004820152606160248201526000805160206129c583398151915260448201527f56533a206f70657261746f7220736574204156532063616e6e6f74207265676960648201527f73746572206f70657261746f72732077697468206c6567616379206d6574686f6084820152601960fa1b60a482015260c40161059c565b6001600160a01b038416600090815260986020908152604080832086830151845290915290205460ff16156110a25760405162461bcd60e51b815260206004820152603660248201526000805160206129c58339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161059c565b6040516336b87bd760e11b81526001600160a01b0385811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112c919061272d565b6111a25760405162461bcd60e51b815260206004820152604d60248201526000805160206129c583398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161059c565b6111c1846111ba863387602001518860400151611265565b8551611933565b6001600160a01b0384166000818152609860209081526040808320878301518452825291829020805460ff1916600190811790915584546001600160f81b0316600160f81b17855591519182523392916000805160206129a5833981519152910160405180910390a350505050565b606654600090600190811614156112595760405162461bcd60e51b815260040161059c90612797565b61081484338585611b93565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290526000906112c69060c001610e3c565b95945050505050565b606654600090600190811614156112f85760405162461bcd60e51b815260040161059c90612797565b3360009081526099602090815260408083206001600160a01b038616845290915290208054600160f81b900460ff166113995760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161059c565b80546001600160f81b031681556040516000815233906001600160a01b038516906000805160206129a58339815191529060200160405180910390a3505050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371383836040516114159291906128a0565b60405180910390a25050565b6066546000906001908116141561144a5760405162461bcd60e51b815260040161059c90612797565b61081433858585611b93565b61145e611af2565b6001600160a01b0381166114c35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161059c565b6105ae816118e1565b60006114d6611818565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155291906126c6565b6001600160a01b0316336001600160a01b0316146115825760405162461bcd60e51b815260040161059c906126e3565b6066541981196066541916146116005760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161059c565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106e5565b6001600160a01b0381166116c55760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161059c565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561174f57506001600160a01b03821615155b6117d15760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161059c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261181482611637565b5050565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611849575060975490565b50604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383163b15611a5257604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061197390869086906004016128cf565b602060405180830381865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b4919061292c565b6001600160e01b03191614611a4d5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161059c565b505050565b826001600160a01b0316611a668383611e2e565b6001600160a01b031614611a4d5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161059c565b6033546001600160a01b03163314610dfa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161059c565b6000611b56611818565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60005b81811015611d9c576001600160a01b038086166000908152609a60209081526040808320938816835292905290812090848484818110611bd857611bd86127ce565b9050602002016020810190611bed91906127e4565b63ffffffff16815260208101919091526040016000205460ff16611c9f5760405162461bcd60e51b815260206004820152605860248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4f70657261746f725365743a206f70657261746f72206e6f742072656760648201527f6973746572656420666f72206f70657261746f72207365740000000000000000608482015260a40161059c565b6001600160a01b038086166000908152609a60209081526040808320938816835292905290812081858585818110611cd957611cd96127ce565b9050602002016020810190611cee91906127e4565b63ffffffff1681526020810191909152604001600020805460ff19169115159190911790557f9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df828486858585818110611d4857611d486127ce565b9050602002016020810190611d5d91906127e4565b604080516001600160a01b03948516815293909216602084015263ffffffff169082015260600160405180910390a1611d9581612815565b9050611b96565b506001600160a01b03808516600090815260996020908152604080832093871683529290522080546001600160f81b03808216849003166001600160f81b031990911681178255611e275780546001600160f81b03168155604051600081526001600160a01b0386811691908616906000805160206129a58339815191529060200160405180910390a35b5050505050565b6000806000611e3d8585611e52565b91509150611e4a81611ec2565b509392505050565b600080825160411415611e895760208301516040840151606085015160001a611e7d8782858561207d565b94509450505050611ebb565b825160401415611eb35760208301516040840151611ea886838361216a565b935093505050611ebb565b506000905060025b9250929050565b6000816004811115611ed657611ed6612956565b1415611edf5750565b6001816004811115611ef357611ef3612956565b1415611f415760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161059c565b6002816004811115611f5557611f55612956565b1415611fa35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161059c565b6003816004811115611fb757611fb7612956565b14156120105760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161059c565b600481600481111561202457612024612956565b14156105ae5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161059c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156120b45750600090506003612161565b8460ff16601b141580156120cc57508460ff16601c14155b156120dd5750600090506004612161565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612131573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661215a57600060019250925050612161565b9150600090505b94509492505050565b6000806001600160ff1b0383168161218760ff86901c601b61296c565b90506121958782888561207d565b935093505050935093915050565b6001600160a01b03811681146105ae57600080fd5b6000602082840312156121ca57600080fd5b81356121d5816121a3565b9392505050565b6000602082840312156121ee57600080fd5b5035919050565b60008060006060848603121561220a57600080fd5b8335612215816121a3565b92506020840135612225816121a3565b929592945050506040919091013590565b60008083601f84011261224857600080fd5b50813567ffffffffffffffff81111561226057600080fd5b6020830191508360208260051b8501011115611ebb57600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156122b4576122b461227b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156122e3576122e361227b565b604052919050565b6000606082840312156122fd57600080fd5b612305612291565b9050813567ffffffffffffffff8082111561231f57600080fd5b818401915084601f83011261233357600080fd5b81356020828211156123475761234761227b565b612359601f8301601f191682016122ba565b9250818352868183860101111561236f57600080fd5b818185018285013760008183850101528285528086013581860152505050506040820135604082015292915050565b600080600080606085870312156123b457600080fd5b84356123bf816121a3565b9350602085013567ffffffffffffffff808211156123dc57600080fd5b6123e888838901612236565b9095509350604087013591508082111561240157600080fd5b5061240e878288016122eb565b91505092959194509250565b6000806040838503121561242d57600080fd5b8235612438816121a3565b946020939093013593505050565b803563ffffffff8116811461245a57600080fd5b919050565b60008060006060848603121561247457600080fd5b833561247f816121a3565b9250602084013561248f816121a3565b915061249d60408501612446565b90509250925092565b6000602082840312156124b857600080fd5b813560ff811681146121d557600080fd5b6000806000806000608086880312156124e157600080fd5b85356124ec816121a3565b9450602086013567ffffffffffffffff81111561250857600080fd5b61251488828901612236565b9699909850959660408101359660609091013595509350505050565b6000806040838503121561254357600080fd5b823561254e816121a3565b9150602083013567ffffffffffffffff81111561256a57600080fd5b612576858286016122eb565b9150509250929050565b60008060006040848603121561259557600080fd5b83356125a0816121a3565b9250602084013567ffffffffffffffff8111156125bc57600080fd5b6125c886828701612236565b9497909650939450505050565b600080600080608085870312156125eb57600080fd5b84356125f6816121a3565b93506020850135612606816121a3565b93969395505050506040820135916060013590565b6000806020838503121561262e57600080fd5b823567ffffffffffffffff8082111561264657600080fd5b818501915085601f83011261265a57600080fd5b81358181111561266957600080fd5b86602082850101111561267b57600080fd5b60209290920196919550909350505050565b600080604083850312156126a057600080fd5b82356126ab816121a3565b915060208301356126bb816121a3565b809150509250929050565b6000602082840312156126d857600080fd5b81516121d5816121a3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561273f57600080fd5b815180151581146121d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156127f657600080fd5b6121d582612446565b634e487b7160e01b600052601160045260246000fd5b6000600019821415612829576128296127ff565b5060010190565b8681526001600160a01b03861660208083019190915260a0604083018190528201859052600090869060c08401835b888110156128885763ffffffff61287585612446565b168252928201929082019060010161285f565b50606085019690965250505060800152949350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015612903578581018301518582016060015282016128e7565b81811115612915576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561293e57600080fd5b81516001600160e01b0319811681146121d557600080fd5b634e487b7160e01b600052602160045260246000fd5b6000821982111561297f5761297f6127ff565b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f4f1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f4156534469726563746f72792e72656769737465724f70657261746f72546f41a2646970667358221220abc08f435dccd66e9e342b55c33d48f0b14953f563bc7cf580c802cd03e5343764736f6c634300080c0033", } // AVSDirectoryABI is the input ABI used to generate the binding from. @@ -277,37 +271,6 @@ func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORAVSREGISTRATIONTYPEHASH( return _AVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) } -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCaller) OPERATORSETFORCEDEREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectorySession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectory.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) -} - -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectory.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) -} - // OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. // // Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) @@ -339,37 +302,6 @@ func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORSETREGISTRATIONTYPEHASH( return _AVSDirectory.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) } -// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. -// -// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) -func (_AVSDirectory *AVSDirectoryCaller) AvsOperatorStatus(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint8, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "avsOperatorStatus", arg0, arg1) - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. -// -// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) -func (_AVSDirectory *AVSDirectorySession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { - return _AVSDirectory.Contract.AvsOperatorStatus(&_AVSDirectory.CallOpts, arg0, arg1) -} - -// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. -// -// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) -func (_AVSDirectory *AVSDirectoryCallerSession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { - return _AVSDirectory.Contract.AvsOperatorStatus(&_AVSDirectory.CallOpts, arg0, arg1) -} - // CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. // // Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -401,37 +333,6 @@ func (_AVSDirectory *AVSDirectoryCallerSession) CalculateOperatorAVSRegistration return _AVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectory.CallOpts, operator, avs, salt, expiry) } -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectorySession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) -} - -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) -} - // CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. // // Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -525,6 +426,7 @@ func (_AVSDirectory *AVSDirectoryCallerSession) DomainSeparator() ([32]byte, err return _AVSDirectory.Contract.DomainSeparator(&_AVSDirectory.CallOpts) } +<<<<<<< HEAD // GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // // Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) @@ -619,42 +521,14 @@ func (_AVSDirectory *AVSDirectoryCallerSession) GetOperatorsInOperatorSet(operat } // InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +======= +// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. +>>>>>>> ce94473c (feat: operator commission bips (#627)) // -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectory *AVSDirectoryCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "inTotalOperatorSets", operator) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectory *AVSDirectorySession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _AVSDirectory.Contract.InTotalOperatorSets(&_AVSDirectory.CallOpts, operator) -} - -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectory *AVSDirectoryCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _AVSDirectory.Contract.InTotalOperatorSets(&_AVSDirectory.CallOpts, operator) -} - -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) IsMember(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { +// Solidity: function isMember(address , address , uint32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) IsMember(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "isMember", operator, operatorSet) + err := _AVSDirectory.contract.Call(opts, &out, "isMember", arg0, arg1, arg2) if err != nil { return *new(bool), err @@ -666,80 +540,63 @@ func (_AVSDirectory *AVSDirectoryCaller) IsMember(opts *bind.CallOpts, operator } -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. +// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. // -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, operator, operatorSet) +// Solidity: function isMember(address , address , uint32 ) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) IsMember(arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { + return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, arg0, arg1, arg2) } -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. +// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. // -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, operator, operatorSet) +// Solidity: function isMember(address , address , uint32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) IsMember(arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { + return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, arg0, arg1, arg2) } -// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. +// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. // -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) IsOperatorSet(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (bool, error) { +// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) +func (_AVSDirectory *AVSDirectoryCaller) MemberInfo(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (struct { + InTotalSets *big.Int + IsLegacyOperator bool +}, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "isOperatorSet", arg0, arg1) + err := _AVSDirectory.contract.Call(opts, &out, "memberInfo", arg0, arg1) + outstruct := new(struct { + InTotalSets *big.Int + IsLegacyOperator bool + }) if err != nil { - return *new(bool), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.InTotalSets = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.IsLegacyOperator = *abi.ConvertType(out[1], new(bool)).(*bool) - return out0, err + return *outstruct, err } -// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. +// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. // -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { - return _AVSDirectory.Contract.IsOperatorSet(&_AVSDirectory.CallOpts, arg0, arg1) +// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) +func (_AVSDirectory *AVSDirectorySession) MemberInfo(arg0 common.Address, arg1 common.Address) (struct { + InTotalSets *big.Int + IsLegacyOperator bool +}, error) { + return _AVSDirectory.Contract.MemberInfo(&_AVSDirectory.CallOpts, arg0, arg1) } -// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. +// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. // -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { - return _AVSDirectory.Contract.IsOperatorSet(&_AVSDirectory.CallOpts, arg0, arg1) -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) IsOperatorSetAVS(opts *bind.CallOpts, arg0 common.Address) (bool, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "isOperatorSetAVS", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { - return _AVSDirectory.Contract.IsOperatorSetAVS(&_AVSDirectory.CallOpts, arg0) -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { - return _AVSDirectory.Contract.IsOperatorSetAVS(&_AVSDirectory.CallOpts, arg0) +// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) +func (_AVSDirectory *AVSDirectoryCallerSession) MemberInfo(arg0 common.Address, arg1 common.Address) (struct { + InTotalSets *big.Int + IsLegacyOperator bool +}, error) { + return _AVSDirectory.Contract.MemberInfo(&_AVSDirectory.CallOpts, arg0, arg1) } // OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. @@ -773,6 +630,7 @@ func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSaltIsSpent(arg0 common. return _AVSDirectory.Contract.OperatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) } +<<<<<<< HEAD // OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. // // Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) @@ -835,6 +693,8 @@ func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetsMemberOfAtIndex(oper return _AVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectory.CallOpts, operator, index) } +======= +>>>>>>> ce94473c (feat: operator commission bips (#627)) // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // // Solidity: function owner() view returns(address) @@ -959,27 +819,6 @@ func (_AVSDirectory *AVSDirectoryCallerSession) PauserRegistry() (common.Address return _AVSDirectory.Contract.PauserRegistry(&_AVSDirectory.CallOpts) } -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectory *AVSDirectoryTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "becomeOperatorSetAVS") -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectory *AVSDirectorySession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _AVSDirectory.Contract.BecomeOperatorSetAVS(&_AVSDirectory.TransactOpts) -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _AVSDirectory.Contract.BecomeOperatorSetAVS(&_AVSDirectory.TransactOpts) -} - // CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. // // Solidity: function cancelSalt(bytes32 salt) returns() @@ -1001,25 +840,25 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) CancelSalt(salt [32]byte) (* return _AVSDirectory.Contract.CancelSalt(&_AVSDirectory.TransactOpts, salt) } -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// DeregisterFromAVSOperatorSets is a paid mutator transaction binding the contract method 0x9c6c5184. // -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "createOperatorSets", operatorSetIds) +// Solidity: function deregisterFromAVSOperatorSets(address avs, uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactor) DeregisterFromAVSOperatorSets(opts *bind.TransactOpts, avs common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "deregisterFromAVSOperatorSets", avs, operatorSetIds) } -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// DeregisterFromAVSOperatorSets is a paid mutator transaction binding the contract method 0x9c6c5184. // -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectorySession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.CreateOperatorSets(&_AVSDirectory.TransactOpts, operatorSetIds) +// Solidity: function deregisterFromAVSOperatorSets(address avs, uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectorySession) DeregisterFromAVSOperatorSets(avs common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.DeregisterFromAVSOperatorSets(&_AVSDirectory.TransactOpts, avs, operatorSetIds) } -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// DeregisterFromAVSOperatorSets is a paid mutator transaction binding the contract method 0x9c6c5184. // -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.CreateOperatorSets(&_AVSDirectory.TransactOpts, operatorSetIds) +// Solidity: function deregisterFromAVSOperatorSets(address avs, uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) DeregisterFromAVSOperatorSets(avs common.Address, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.DeregisterFromAVSOperatorSets(&_AVSDirectory.TransactOpts, avs, operatorSetIds) } // DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. @@ -1064,27 +903,6 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) DeregisterOperatorFromOperat return _AVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectory.TransactOpts, operator, operatorSetIds) } -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectorySession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - // Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. // // Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() @@ -1106,27 +924,6 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) Initialize(initialOwner comm return _AVSDirectory.Contract.Initialize(&_AVSDirectory.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) } -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectorySession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectory.TransactOpts, operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectory.TransactOpts, operators, operatorSetIds) -} - // Pause is a paid mutator transaction binding the contract method 0x136439dd. // // Solidity: function pause(uint256 newPausedStatus) returns() @@ -1461,150 +1258,6 @@ func (_AVSDirectory *AVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log types. return event, nil } -// AVSDirectoryAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the AVSDirectory contract. -type AVSDirectoryAVSMigratedToOperatorSetsIterator struct { - Event *AVSDirectoryAVSMigratedToOperatorSets // 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 *AVSDirectoryAVSMigratedToOperatorSetsIterator) 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(AVSDirectoryAVSMigratedToOperatorSets) - 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(AVSDirectoryAVSMigratedToOperatorSets) - 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 *AVSDirectoryAVSMigratedToOperatorSetsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryAVSMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the AVSDirectory contract. -type AVSDirectoryAVSMigratedToOperatorSets struct { - Avs common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectory *AVSDirectoryFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryAVSMigratedToOperatorSetsIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryAVSMigratedToOperatorSetsIterator{contract: _AVSDirectory.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil -} - -// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectory *AVSDirectoryFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", 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(AVSDirectoryAVSMigratedToOperatorSets) - if err := _AVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", 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 -} - -// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectory *AVSDirectoryFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*AVSDirectoryAVSMigratedToOperatorSets, error) { - event := new(AVSDirectoryAVSMigratedToOperatorSets) - if err := _AVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // AVSDirectoryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AVSDirectory contract. type AVSDirectoryInitializedIterator struct { Event *AVSDirectoryInitialized // Event containing the contract specifics and raw log @@ -1808,15 +1461,15 @@ func (it *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() erro // AVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectory contract. type AVSDirectoryOperatorAVSRegistrationStatusUpdated struct { - Operator common.Address - Avs common.Address - Status uint8 - Raw types.Log // Blockchain specific contextual infos + Operator common.Address + Avs common.Address + IsLegacyOperator bool + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { var operatorRule []interface{} @@ -1835,9 +1488,9 @@ func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUp return &AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil } -// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { var operatorRule []interface{} @@ -1881,9 +1534,9 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpd }), nil } -// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { event := new(AVSDirectoryOperatorAVSRegistrationStatusUpdated) if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { @@ -1962,39 +1615,30 @@ func (it *AVSDirectoryOperatorAddedToOperatorSetIterator) Close() error { // AVSDirectoryOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the AVSDirectory contract. type AVSDirectoryOperatorAddedToOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - Raw types.Log // Blockchain specific contextual infos + Operator common.Address + Avs common.Address + OperatorSetId uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAddedToOperatorSet is a free log retrieval operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// FilterOperatorAddedToOperatorSet is a free log retrieval operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. // -// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryOperatorAddedToOperatorSetIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } +// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts) (*AVSDirectoryOperatorAddedToOperatorSetIterator, error) { - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet") if err != nil { return nil, err } return &AVSDirectoryOperatorAddedToOperatorSetIterator{contract: _AVSDirectory.contract, event: "OperatorAddedToOperatorSet", logs: logs, sub: sub}, nil } -// WatchOperatorAddedToOperatorSet is a free log subscription operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// WatchOperatorAddedToOperatorSet is a free log subscription operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. // -// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } +// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorAddedToOperatorSet) (event.Subscription, error) { - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorAddedToOperatorSet") if err != nil { return nil, err } @@ -2026,9 +1670,9 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts }), nil } -// ParseOperatorAddedToOperatorSet is a log parse operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// ParseOperatorAddedToOperatorSet is a log parse operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. // -// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) +// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*AVSDirectoryOperatorAddedToOperatorSet, error) { event := new(AVSDirectoryOperatorAddedToOperatorSet) if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { @@ -2038,160 +1682,6 @@ func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log t return event, nil } -// AVSDirectoryOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the AVSDirectory contract. -type AVSDirectoryOperatorMigratedToOperatorSetsIterator struct { - Event *AVSDirectoryOperatorMigratedToOperatorSets // 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 *AVSDirectoryOperatorMigratedToOperatorSetsIterator) 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(AVSDirectoryOperatorMigratedToOperatorSets) - 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(AVSDirectoryOperatorMigratedToOperatorSets) - 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 *AVSDirectoryOperatorMigratedToOperatorSetsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryOperatorMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the AVSDirectory contract. -type AVSDirectoryOperatorMigratedToOperatorSets struct { - Operator common.Address - Avs common.Address - OperatorSetIds []uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryOperatorMigratedToOperatorSetsIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryOperatorMigratedToOperatorSetsIterator{contract: _AVSDirectory.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil -} - -// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, 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(AVSDirectoryOperatorMigratedToOperatorSets) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", 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 -} - -// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*AVSDirectoryOperatorMigratedToOperatorSets, error) { - event := new(AVSDirectoryOperatorMigratedToOperatorSets) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // AVSDirectoryOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the AVSDirectory contract. type AVSDirectoryOperatorRemovedFromOperatorSetIterator struct { Event *AVSDirectoryOperatorRemovedFromOperatorSet // Event containing the contract specifics and raw log @@ -2261,39 +1751,30 @@ func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Close() error { // AVSDirectoryOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the AVSDirectory contract. type AVSDirectoryOperatorRemovedFromOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - Raw types.Log // Blockchain specific contextual infos + Operator common.Address + Avs common.Address + OperatorSetId uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } +// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts) (*AVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet") if err != nil { return nil, err } return &AVSDirectoryOperatorRemovedFromOperatorSetIterator{contract: _AVSDirectory.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil } -// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } +// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorRemovedFromOperatorSet) (event.Subscription, error) { - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet") if err != nil { return nil, err } @@ -2325,9 +1806,9 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(o }), nil } -// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*AVSDirectoryOperatorRemovedFromOperatorSet, error) { event := new(AVSDirectoryOperatorRemovedFromOperatorSet) if err := _AVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { @@ -2337,140 +1818,6 @@ func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet(l return event, nil } -// AVSDirectoryOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the AVSDirectory contract. -type AVSDirectoryOperatorSetCreatedIterator struct { - Event *AVSDirectoryOperatorSetCreated // 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 *AVSDirectoryOperatorSetCreatedIterator) 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(AVSDirectoryOperatorSetCreated) - 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(AVSDirectoryOperatorSetCreated) - 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 *AVSDirectoryOperatorSetCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryOperatorSetCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryOperatorSetCreated represents a OperatorSetCreated event raised by the AVSDirectory contract. -type AVSDirectoryOperatorSetCreated struct { - OperatorSet IAVSDirectoryOperatorSet - 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 (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*AVSDirectoryOperatorSetCreatedIterator, error) { - - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorSetCreated") - if err != nil { - return nil, err - } - return &AVSDirectoryOperatorSetCreatedIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorSetCreated) (event.Subscription, error) { - - logs, sub, err := _AVSDirectory.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(AVSDirectoryOperatorSetCreated) - if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorSetCreated(log types.Log) (*AVSDirectoryOperatorSetCreated, error) { - event := new(AVSDirectoryOperatorSetCreated) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // AVSDirectoryOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the AVSDirectory contract. type AVSDirectoryOwnershipTransferredIterator struct { Event *AVSDirectoryOwnershipTransferred // Event containing the contract specifics and raw log diff --git a/pkg/bindings/AVSDirectoryStorage/binding.go b/pkg/bindings/AVSDirectoryStorage/binding.go index b7fc38aa6..095521ea5 100644 --- a/pkg/bindings/AVSDirectoryStorage/binding.go +++ b/pkg/bindings/AVSDirectoryStorage/binding.go @@ -29,12 +29,6 @@ var ( _ = abi.ConvertType ) -// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 -} - // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -44,7 +38,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryStorageMetaData contains all meta data concerning the AVSDirectoryStorage contract. var AVSDirectoryStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"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\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getNumOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetsOfOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetMemberAtIndex\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOfAtIndex\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"memberInfo\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"inTotalSets\",\"type\":\"uint248\",\"internalType\":\"uint248\"},{\"name\":\"isLegacyOperator\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"isLegacyOperator\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false}]", } // AVSDirectoryStorageABI is the input ABI used to generate the binding from. @@ -255,37 +249,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORAVSREGISTR return _AVSDirectoryStorage.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) } -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OPERATORSETFORCEDEREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectoryStorage.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) -} - -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectoryStorage.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) -} - // OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. // // Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) @@ -317,37 +280,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORSETREGISTR return _AVSDirectoryStorage.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) } -// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. -// -// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) AvsOperatorStatus(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint8, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "avsOperatorStatus", arg0, arg1) - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. -// -// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { - return _AVSDirectoryStorage.Contract.AvsOperatorStatus(&_AVSDirectoryStorage.CallOpts, arg0, arg1) -} - -// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. -// -// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { - return _AVSDirectoryStorage.Contract.AvsOperatorStatus(&_AVSDirectoryStorage.CallOpts, arg0, arg1) -} - // CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. // // Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -379,37 +311,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateOperatorA return _AVSDirectoryStorage.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectoryStorage.CallOpts, operator, avs, salt, expiry) } -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectoryStorage.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) -} - -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectoryStorage.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) -} - // CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. // // Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -472,11 +373,12 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) Delegation() (comm return _AVSDirectoryStorage.Contract.Delegation(&_AVSDirectoryStorage.CallOpts) } -// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. // -// Solidity: function domainSeparator() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function isMember(address , address , uint32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsMember(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { var out []interface{} +<<<<<<< HEAD err := _AVSDirectoryStorage.contract.Call(opts, &out, "domainSeparator") if err != nil { @@ -633,6 +535,9 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) InTotalOperatorSet func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsMember(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { var out []interface{} err := _AVSDirectoryStorage.contract.Call(opts, &out, "isMember", operator, operatorSet) +======= + err := _AVSDirectoryStorage.contract.Call(opts, &out, "isMember", arg0, arg1, arg2) +>>>>>>> ce94473c (feat: operator commission bips (#627)) if err != nil { return *new(bool), err @@ -644,80 +549,63 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsMember(opts *bind.CallO } -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) -} - -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) -} - -// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. -// -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsOperatorSet(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (bool, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "isOperatorSet", arg0, arg1) - - 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 0x84d76f7b. +// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. // -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { - return _AVSDirectoryStorage.Contract.IsOperatorSet(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +// Solidity: function isMember(address , address , uint32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsMember(arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { + return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, arg0, arg1, arg2) } -// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. +// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. // -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { - return _AVSDirectoryStorage.Contract.IsOperatorSet(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +// Solidity: function isMember(address , address , uint32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsMember(arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { + return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, arg0, arg1, arg2) } -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. // -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsOperatorSetAVS(opts *bind.CallOpts, arg0 common.Address) (bool, error) { +// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) MemberInfo(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (struct { + InTotalSets *big.Int + IsLegacyOperator bool +}, error) { var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "isOperatorSetAVS", arg0) + err := _AVSDirectoryStorage.contract.Call(opts, &out, "memberInfo", arg0, arg1) + outstruct := new(struct { + InTotalSets *big.Int + IsLegacyOperator bool + }) if err != nil { - return *new(bool), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.InTotalSets = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.IsLegacyOperator = *abi.ConvertType(out[1], new(bool)).(*bool) - return out0, err + return *outstruct, err } -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. // -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { - return _AVSDirectoryStorage.Contract.IsOperatorSetAVS(&_AVSDirectoryStorage.CallOpts, arg0) +// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) MemberInfo(arg0 common.Address, arg1 common.Address) (struct { + InTotalSets *big.Int + IsLegacyOperator bool +}, error) { + return _AVSDirectoryStorage.Contract.MemberInfo(&_AVSDirectoryStorage.CallOpts, arg0, arg1) } -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. +// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. // -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { - return _AVSDirectoryStorage.Contract.IsOperatorSetAVS(&_AVSDirectoryStorage.CallOpts, arg0) +// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) MemberInfo(arg0 common.Address, arg1 common.Address) (struct { + InTotalSets *big.Int + IsLegacyOperator bool +}, error) { + return _AVSDirectoryStorage.Contract.MemberInfo(&_AVSDirectoryStorage.CallOpts, arg0, arg1) } // OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. @@ -751,6 +639,7 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSaltIsSpen return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) } +<<<<<<< HEAD // OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. // // Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) @@ -876,6 +765,8 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) CreateOperator return _AVSDirectoryStorage.Contract.CreateOperatorSets(&_AVSDirectoryStorage.TransactOpts, operatorSetIds) } +======= +>>>>>>> ce94473c (feat: operator commission bips (#627)) // DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // // Solidity: function deregisterOperatorFromAVS(address operator) returns() @@ -918,48 +809,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) DeregisterOper return _AVSDirectoryStorage.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds) } -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operators, operatorSetIds) -} - // RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // // Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() @@ -983,23 +832,23 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperat // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, operatorSignature) +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, signature) } // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, operatorSignature) +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, signature) } // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, operatorSignature) +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, signature) } // UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. @@ -1168,150 +1017,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseAVSMetadataURIUpda return event, nil } -// AVSDirectoryStorageAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageAVSMigratedToOperatorSetsIterator struct { - Event *AVSDirectoryStorageAVSMigratedToOperatorSets // 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 *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) 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(AVSDirectoryStorageAVSMigratedToOperatorSets) - 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(AVSDirectoryStorageAVSMigratedToOperatorSets) - 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 *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageAVSMigratedToOperatorSets struct { - Avs common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryStorageAVSMigratedToOperatorSetsIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryStorageAVSMigratedToOperatorSetsIterator{contract: _AVSDirectoryStorage.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil -} - -// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", 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(AVSDirectoryStorageAVSMigratedToOperatorSets) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMigratedToOperatorSets", 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 -} - -// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*AVSDirectoryStorageAVSMigratedToOperatorSets, error) { - event := new(AVSDirectoryStorageAVSMigratedToOperatorSets) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the AVSDirectoryStorage contract. type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator struct { Event *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated // Event containing the contract specifics and raw log @@ -1381,15 +1086,15 @@ func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Close // AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectoryStorage contract. type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated struct { - Operator common.Address - Avs common.Address - Status uint8 - Raw types.Log // Blockchain specific contextual infos + Operator common.Address + Avs common.Address + IsLegacyOperator bool + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator, error) { var operatorRule []interface{} @@ -1408,9 +1113,9 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAVSRegist return &AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil } -// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { var operatorRule []interface{} @@ -1454,9 +1159,9 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistr }), nil } -// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, error) { event := new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { @@ -1535,39 +1240,30 @@ func (it *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Close() error { // AVSDirectoryStorageOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the AVSDirectoryStorage contract. type AVSDirectoryStorageOperatorAddedToOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - Raw types.Log // Blockchain specific contextual infos + Operator common.Address + Avs common.Address + OperatorSetId uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAddedToOperatorSet is a free log retrieval operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// FilterOperatorAddedToOperatorSet is a free log retrieval operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. // -// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryStorageOperatorAddedToOperatorSetIterator, error) { +// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts) (*AVSDirectoryStorageOperatorAddedToOperatorSetIterator, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAddedToOperatorSet") if err != nil { return nil, err } return &AVSDirectoryStorageOperatorAddedToOperatorSetIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorAddedToOperatorSet", logs: logs, sub: sub}, nil } -// WatchOperatorAddedToOperatorSet is a free log subscription operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// WatchOperatorAddedToOperatorSet is a free log subscription operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. // -// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } +// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAddedToOperatorSet) (event.Subscription, error) { - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorAddedToOperatorSet") if err != nil { return nil, err } @@ -1599,9 +1295,9 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAddedToOpe }), nil } -// ParseOperatorAddedToOperatorSet is a log parse operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// ParseOperatorAddedToOperatorSet is a log parse operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. // -// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) +// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*AVSDirectoryStorageOperatorAddedToOperatorSet, error) { event := new(AVSDirectoryStorageOperatorAddedToOperatorSet) if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { @@ -1611,160 +1307,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAddedToOpe return event, nil } -// AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator struct { - Event *AVSDirectoryStorageOperatorMigratedToOperatorSets // 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 *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) 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(AVSDirectoryStorageOperatorMigratedToOperatorSets) - 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(AVSDirectoryStorageOperatorMigratedToOperatorSets) - 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 *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorMigratedToOperatorSets struct { - Operator common.Address - Avs common.Address - OperatorSetIds []uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil -} - -// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, 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(AVSDirectoryStorageOperatorMigratedToOperatorSets) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", 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 -} - -// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*AVSDirectoryStorageOperatorMigratedToOperatorSets, error) { - event := new(AVSDirectoryStorageOperatorMigratedToOperatorSets) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the AVSDirectoryStorage contract. type AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator struct { Event *AVSDirectoryStorageOperatorRemovedFromOperatorSet // Event containing the contract specifics and raw log @@ -1834,39 +1376,30 @@ func (it *AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator) Close() err // AVSDirectoryStorageOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the AVSDirectoryStorage contract. type AVSDirectoryStorageOperatorRemovedFromOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - Raw types.Log // Blockchain specific contextual infos + Operator common.Address + Avs common.Address + OperatorSetId uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } +// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts) (*AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator, error) { - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet") if err != nil { return nil, err } return &AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil } -// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { +// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorRemovedFromOperatorSet) (event.Subscription, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet") if err != nil { return nil, err } @@ -1898,9 +1431,9 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorRemovedFro }), nil } -// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*AVSDirectoryStorageOperatorRemovedFromOperatorSet, error) { event := new(AVSDirectoryStorageOperatorRemovedFromOperatorSet) if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { @@ -1909,137 +1442,3 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorRemovedFro event.Raw = log return event, nil } - -// AVSDirectoryStorageOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorSetCreatedIterator struct { - Event *AVSDirectoryStorageOperatorSetCreated // 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 *AVSDirectoryStorageOperatorSetCreatedIterator) 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(AVSDirectoryStorageOperatorSetCreated) - 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(AVSDirectoryStorageOperatorSetCreated) - 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 *AVSDirectoryStorageOperatorSetCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageOperatorSetCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageOperatorSetCreated represents a OperatorSetCreated event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorSetCreated struct { - OperatorSet IAVSDirectoryOperatorSet - 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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*AVSDirectoryStorageOperatorSetCreatedIterator, error) { - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorSetCreated") - if err != nil { - return nil, err - } - return &AVSDirectoryStorageOperatorSetCreatedIterator{contract: _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorSetCreated) (event.Subscription, error) { - - logs, sub, err := _AVSDirectoryStorage.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(AVSDirectoryStorageOperatorSetCreated) - if err := _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorSetCreated(log types.Log) (*AVSDirectoryStorageOperatorSetCreated, error) { - event := new(AVSDirectoryStorageOperatorSetCreated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/pkg/bindings/DelayedWithdrawalRouter/binding.go b/pkg/bindings/DelayedWithdrawalRouter/binding.go index 31fb64ca0..4943de658 100644 --- a/pkg/bindings/DelayedWithdrawalRouter/binding.go +++ b/pkg/bindings/DelayedWithdrawalRouter/binding.go @@ -44,7 +44,7 @@ type IDelayedWithdrawalRouterUserDelayedWithdrawals struct { // DelayedWithdrawalRouterMetaData contains all meta data concerning the DelayedWithdrawalRouter contract. var DelayedWithdrawalRouterMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"canClaimDelayedWithdrawal\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDelayedWithdrawals\",\"inputs\":[{\"name\":\"maxNumberOfDelayedWithdrawalsToClaim\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimDelayedWithdrawals\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxNumberOfDelayedWithdrawalsToClaim\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createDelayedWithdrawal\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getClaimableUserDelayedWithdrawals\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIDelayedWithdrawalRouter.DelayedWithdrawal[]\",\"components\":[{\"name\":\"amount\",\"type\":\"uint224\",\"internalType\":\"uint224\"},{\"name\":\"blockCreated\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getUserDelayedWithdrawals\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIDelayedWithdrawalRouter.DelayedWithdrawal[]\",\"components\":[{\"name\":\"amount\",\"type\":\"uint224\",\"internalType\":\"uint224\"},{\"name\":\"blockCreated\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_withdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"userDelayedWithdrawalByIndex\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelayedWithdrawalRouter.DelayedWithdrawal\",\"components\":[{\"name\":\"amount\",\"type\":\"uint224\",\"internalType\":\"uint224\"},{\"name\":\"blockCreated\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"userWithdrawals\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelayedWithdrawalRouter.UserDelayedWithdrawals\",\"components\":[{\"name\":\"delayedWithdrawalsCompleted\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delayedWithdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelayedWithdrawalRouter.DelayedWithdrawal[]\",\"components\":[{\"name\":\"amount\",\"type\":\"uint224\",\"internalType\":\"uint224\"},{\"name\":\"blockCreated\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"userWithdrawalsLength\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DelayedWithdrawalCreated\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelayedWithdrawalsClaimed\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amountClaimed\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"delayedWithdrawalsCompleted\",\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"event\",\"name\":\"WithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162001f0e38038062001f0e8339810160408190526200003491620001a8565b6001600160a01b038116620000cb5760405162461bcd60e51b815260206004820152604c60248201527f44656c617965645769746864726177616c526f757465722e636f6e737472756360448201527f746f723a205f656967656e506f644d616e616765722063616e6e6f742062652060648201526b7a65726f206164647265737360a01b608482015260a4015b60405180910390fd5b6001600160a01b038116608052620000e2620000e9565b50620001da565b600054610100900460ff1615620001535760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000c2565b60005460ff9081161015620001a6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b600060208284031215620001bb57600080fd5b81516001600160a01b0381168114620001d357600080fd5b9392505050565b608051611d11620001fd600039600081816101fa0152610c000152611d116000f3fe60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f0000000000000000000000000000000000000000000000000000000000000000169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea264697066735822122000d7cf28f4403941c299573f87dac2e0ac298f40aace10d232ce8c2e9d0894a564736f6c634300080c0033", + Bin: "0x60a06040523480156200001157600080fd5b5060405162001f0e38038062001f0e8339810160408190526200003491620001a8565b6001600160a01b038116620000cb5760405162461bcd60e51b815260206004820152604c60248201527f44656c617965645769746864726177616c526f757465722e636f6e737472756360448201527f746f723a205f656967656e506f644d616e616765722063616e6e6f742062652060648201526b7a65726f206164647265737360a01b608482015260a4015b60405180910390fd5b6001600160a01b038116608052620000e2620000e9565b50620001da565b600054610100900460ff1615620001535760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000c2565b60005460ff9081161015620001a6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b600060208284031215620001bb57600080fd5b81516001600160a01b0381168114620001d357600080fd5b9392505050565b608051611d11620001fd600039600081816101fa0152610c000152611d116000f3fe60806040526004361061014b5760003560e01c806385594e58116100b6578063e4f4f8871161006f578063e4f4f887146103cc578063e5db06c014610405578063eb990c5914610425578063ecb7cb1b14610445578063f2fde38b14610472578063fabc1cbc1461049257600080fd5b806385594e5814610317578063886f1195146103445780638da5cb5b14610364578063c0db354c14610382578063ca661c0414610395578063d44e1b76146103ac57600080fd5b806350f73e7c1161010857806350f73e7c14610254578063595c6a67146102785780635ac86ab71461028d5780635c975abb146102cd578063715018a6146102e257806375608896146102f757600080fd5b806310d67a2f14610150578063136439dd146101725780631f39d87f146101925780633e1de008146101c85780634665bcda146101e85780634d50f9a414610234575b600080fd5b34801561015c57600080fd5b5061017061016b36600461196d565b6104b2565b005b34801561017e57600080fd5b5061017061018d366004611991565b61056e565b34801561019e57600080fd5b506101b26101ad36600461196d565b6106ad565b6040516101bf91906119c8565b60405180910390f35b3480156101d457600080fd5b506101b26101e336600461196d565b6108a8565b3480156101f457600080fd5b5061021c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bf565b34801561024057600080fd5b5061017061024f366004611991565b6109ee565b34801561026057600080fd5b5061026a60c95481565b6040519081526020016101bf565b34801561028457600080fd5b506101706109ff565b34801561029957600080fd5b506102bd6102a8366004611a15565b609854600160ff9092169190911b9081161490565b60405190151581526020016101bf565b3480156102d957600080fd5b5060985461026a565b3480156102ee57600080fd5b50610170610ac6565b34801561030357600080fd5b506102bd610312366004611a38565b610ada565b34801561032357600080fd5b50610337610332366004611a38565b610b5d565b6040516101bf9190611a64565b34801561035057600080fd5b5060975461021c906001600160a01b031681565b34801561037057600080fd5b506033546001600160a01b031661021c565b610170610390366004611a72565b610bdd565b3480156103a157600080fd5b5061026a62034bc081565b3480156103b857600080fd5b506101706103c7366004611991565b610e9d565b3480156103d857600080fd5b5061026a6103e736600461196d565b6001600160a01b0316600090815260ca602052604090206001015490565b34801561041157600080fd5b50610170610420366004611a38565b610f31565b34801561043157600080fd5b50610170610440366004611aab565b610fc6565b34801561045157600080fd5b5061046561046036600461196d565b6110ee565b6040516101bf9190611af1565b34801561047e57600080fd5b5061017061048d36600461196d565b6111a8565b34801561049e57600080fd5b506101706104ad366004611991565b61121e565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610505573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105299190611b47565b6001600160a01b0316336001600160a01b0316146105625760405162461bcd60e51b815260040161055990611b64565b60405180910390fd5b61056b8161137a565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105da9190611bae565b6105f65760405162461bcd60e51b815260040161055990611bd0565b6098548181161461066f5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926106da8383611c2e565b90508060005b82811015610786576001600160a01b038716600090815260ca6020526040812060010161070d8388611c45565b8154811061071d5761071d611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061076391611c45565b4310156107735781925050610786565b508061077e81611c73565b9150506106e0565b508060008167ffffffffffffffff8111156107a3576107a3611c8e565b6040519080825280602002602001820160405280156107e857816020015b60408051808201909152600080825260208201528152602001906001900390816107c15790505b509050811561089d5760005b8281101561089b576001600160a01b038916600090815260ca602052604090206001016108218289611c45565b8154811061083157610831611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810191909152825183908390811061087d5761087d611c5d565b6020026020010181905250808061089390611c73565b9150506107f4565b505b979650505050505050565b6001600160a01b038116600090815260ca6020526040812080546001909101546060926108d58383611c2e565b905060008167ffffffffffffffff8111156108f2576108f2611c8e565b60405190808252806020026020018201604052801561093757816020015b60408051808201909152600080825260208201528152602001906001900390816109105790505b50905060005b828110156109e4576001600160a01b038716600090815260ca6020526040902060010161096a8287611c45565b8154811061097a5761097a611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff169181019190915282518390839081106109c6576109c6611c5d565b602002602001018190525080806109dc90611c73565b91505061093d565b5095945050505050565b6109f6611471565b61056b816114cb565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b9190611bae565b610a875760405162461bcd60e51b815260040161055990611bd0565b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610ace611471565b610ad86000611593565b565b6001600160a01b038216600090815260ca60205260408120548210801590610b54575060c9546001600160a01b038416600090815260ca60205260409020600101805484908110610b2d57610b2d611c5d565b600091825260209091200154610b509190600160e01b900463ffffffff16611c45565b4310155b90505b92915050565b60408051808201909152600080825260208201526001600160a01b038316600090815260ca60205260409020600101805483908110610b9e57610b9e611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16918101919091529392505050565b60405163a38406a360e01b81526001600160a01b038084166004830152839133917f0000000000000000000000000000000000000000000000000000000000000000169063a38406a390602401602060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6b9190611b47565b6001600160a01b031614610ce75760405162461bcd60e51b815260206004820152603d60248201527f44656c617965645769746864726177616c526f757465722e6f6e6c794569676560448201527f6e506f643a206e6f7420706f644f776e6572277320456967656e506f640000006064820152608401610559565b60985460009060019081161415610d105760405162461bcd60e51b815260040161055990611ca4565b6001600160a01b038316610da65760405162461bcd60e51b815260206004820152605160248201527f44656c617965645769746864726177616c526f757465722e637265617465446560448201527f6c617965645769746864726177616c3a20726563697069656e742063616e6e6f60648201527074206265207a65726f206164647265737360781b608482015260a401610559565b346001600160e01b03811615610e96576040805180820182526001600160e01b03808416825263ffffffff43811660208085019182526001600160a01b038a16600081815260ca8352968720600190810180548083018255818a5293892088519551909616600160e01b029490961693909317939091019290925593525490917fb8f1b14c7caf74150801dcc9bc18d575cbeaf5b421943497e409df92c92e0f5991889188918691610e5791611c2e565b604080516001600160a01b0395861681529490931660208501526001600160e01b039091169183019190915260608201526080015b60405180910390a1505b5050505050565b60026065541415610ef05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610f1e5760405162461bcd60e51b815260040161055990611ca4565b610f2833836115e5565b50506001606555565b60026065541415610f845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610559565b600260655560985460009060019081161415610fb25760405162461bcd60e51b815260040161055990611ca4565b610fbc83836115e5565b5050600160655550565b600054610100900460ff1615808015610fe65750600054600160ff909116105b806110005750303b158015611000575060005460ff166001145b6110635760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610559565b6000805460ff191660011790558015611086576000805461ff0019166101001790555b61108f85611593565b6110998484611750565b6110a2826114cb565b8015610e96576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6040805180820190915260008152606060208201526001600160a01b038216600090815260ca6020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b8282101561119a57600084815260209081902060408051808201909152908401546001600160e01b0381168252600160e01b900463ffffffff168183015282526001909201910161114e565b505050915250909392505050565b6111b0611471565b6001600160a01b0381166112155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610559565b61056b81611593565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190611b47565b6001600160a01b0316336001600160a01b0316146112c55760405162461bcd60e51b815260040161055990611b64565b6098541981196098541916146113435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610559565b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106a2565b6001600160a01b0381166114085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610559565b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314610ad85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610559565b62034bc08111156115525760405162461bcd60e51b815260206004820152604560248201527f44656c617965645769746864726177616c526f757465722e5f7365745769746860448201527f64726177616c44656c6179426c6f636b733a206e657756616c756520746f6f206064820152646c6172676560d81b608482015260a401610559565b60c95460408051918252602082018390527f4ffb00400574147429ee377a5633386321e66d45d8b14676014b5fa393e61e9e910160405180910390a160c955565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600090815260ca602052604081208054600190910154825b848110801561161e57508161161c8285611c45565b105b156116cb576001600160a01b038616600090815260ca602052604081206001016116488386611c45565b8154811061165857611658611c5d565b6000918252602091829020604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1691810182905260c95490925061169e91611c45565b4310156116ab57506116cb565b80516116c0906001600160e01b031686611c45565b945050600101611607565b6116d58184611c45565b6001600160a01b038716600090815260ca602052604090205583156116fe576116fe868561183a565b7f6b7151500bd0b5cc211bcc47b3029831b769004df4549e8e1c9a69da05bb0943868561172b8487611c45565b604080516001600160a01b039094168452602084019290925290820152606001610e8c565b6097546001600160a01b031615801561177157506001600160a01b03821615155b6117f35760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610559565b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26118368261137a565b5050565b8047101561188a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610559565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118d7576040519150601f19603f3d011682016040523d82523d6000602084013e6118dc565b606091505b50509050806119535760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610559565b505050565b6001600160a01b038116811461056b57600080fd5b60006020828403121561197f57600080fd5b813561198a81611958565b9392505050565b6000602082840312156119a357600080fd5b5035919050565b80516001600160e01b0316825260209081015163ffffffff16910152565b602080825282518282018190526000919060409081850190868401855b82811015611a08576119f88483516119aa565b92840192908501906001016119e5565b5091979650505050505050565b600060208284031215611a2757600080fd5b813560ff8116811461198a57600080fd5b60008060408385031215611a4b57600080fd5b8235611a5681611958565b946020939093013593505050565b60408101610b5782846119aa565b60008060408385031215611a8557600080fd5b8235611a9081611958565b91506020830135611aa081611958565b809150509250929050565b60008060008060808587031215611ac157600080fd5b8435611acc81611958565b93506020850135611adc81611958565b93969395505050506040820135916060013590565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b8084101561089b57611b338286516119aa565b938501936001939093019290820190611b20565b600060208284031215611b5957600080fd5b815161198a81611958565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215611bc057600080fd5b8151801515811461198a57600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082821015611c4057611c40611c18565b500390565b60008219821115611c5857611c58611c18565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611c8757611c87611c18565b5060010190565b634e487b7160e01b600052604160045260246000fd5b60208082526019908201527f5061757361626c653a20696e646578206973207061757365640000000000000060408201526060019056fea264697066735822122005b0ecc66b0468e43c0d5b0ff9c7b1e449b7556e61ae26d108ff696ed83f730364736f6c634300080c0033", } // DelayedWithdrawalRouterABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/DelegationManager/binding.go b/pkg/bindings/DelegationManager/binding.go index 27c91c8d8..d244533e3 100644 --- a/pkg/bindings/DelegationManager/binding.go +++ b/pkg/bindings/DelegationManager/binding.go @@ -63,7 +63,7 @@ type ISignatureUtilsSignatureWithExpiry 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\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162005c4638038062005c46833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051615a1d6200022960003960006126a00152600081816105b10152818161102e015281816113aa01528181611c23015281816129f901528181613eac0152614398015260006107620152600081816104f901528181610ffc0152818161137801528181611cb701528181612ac601528181612c4901528181613fd2015261443e0152615a1d6000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a61035536600461484e565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a23660046148b4565b6109ce565b6103ba6103b536600461484e565b610a90565b604051610364919061490f565b6103da6103d53660046149ac565b610df9565b005b6103da6103ea3660046149ff565b610f3e565b6103da6103fd366004614a23565b610ff1565b6103da610410366004614a64565b6110a8565b6103da610423366004614a7d565b6111e7565b61035a6104363660046149ff565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614a23565b6111fb565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614ae8565b611229565b6103da6104bc366004614a23565b61136d565b61035a6104cf3660046149ff565b609b6020526000908152604090205481565b6103da6104ef366004614b8f565b61141d565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b6105413660046149ff565b6001600160a01b039081166000908152609960205260409020600101541690565b6105756105703660046149ff565b61155a565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da61157a565b61035a6105f3366004614e8c565b611641565b610575610606366004614ec8565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614ef9565b611671565b6103da610644366004614a64565b61170c565b61051b6106573660046149ff565b609a602052600090815260409020546001600160a01b031681565b6105756106803660046149ff565b61171d565b6103da611757565b61035a61069b366004614f88565b609860209081526000928352604080842090915290825290205481565b6103da6106c6366004615069565b61176b565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd3660046150f9565b611997565b6040516103649190615183565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da610738366004615196565b611a71565b61035a61074b3660046149ff565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004614a64565b609e6020526000908152604090205460ff1681565b6105756107b53660046151cb565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec3660046149ff565b60a16020526000908152604090205481565b61086e61080c3660046149ff565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b23660046151f7565b611b43565b61035a62034bc081565b6108d46108cf3660046149ff565b611bfc565b604051610364929190615278565b6103ba6108f03660046149ff565b611fb4565b6103da61090336600461529d565b612478565b6103da6109163660046152f5565b612595565b6103da6109293660046149ff565b612626565b61035a61269c565b6103da610944366004614a64565b6126da565b609d54600090815b838110156109c657600060a1600087878581811061097157610971615311565b905060200201602081019061098691906149ff565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b506109bf8161533d565b9050610951565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a4c61269c565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ac55760405162461bcd60e51b8152600401610abc90615358565b60405180910390fd5b6000836001600160401b03811115610adf57610adf614c31565b604051908082528060200260200182016040528015610b08578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610dee57868682818110610b4357610b43615311565b9050602002810190610b55919061538f565b610b639060208101906153af565b9050878783818110610b7757610b77615311565b9050602002810190610b89919061538f565b610b9390806153af565b905014610c085760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610abc565b33878783818110610c1b57610c1b615311565b9050602002810190610c2d919061538f565b610c3e9060608101906040016149ff565b6001600160a01b031614610cba5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610abc565b610dbf3383898985818110610cd157610cd1615311565b9050602002810190610ce3919061538f565b610cf49060608101906040016149ff565b8a8a86818110610d0657610d06615311565b9050602002810190610d18919061538f565b610d2290806153af565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d6857610d68615311565b9050602002810190610d7a919061538f565b610d889060208101906153af565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061283692505050565b838281518110610dd157610dd1615311565b602090810291909101015280610de68161533d565b915050610b29565b509095945050505050565b610e023361155a565b15610e885760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610abc565b610e923384612df6565b604080518082019091526060815260006020820152610eb43380836000612fe9565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610eed91906153f8565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f3092919061544a565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615479565b6001600160a01b0316336001600160a01b031614610fe55760405162461bcd60e51b8152600401610abc90615496565b610fee8161327f565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110505750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61106c5760405162461bcd60e51b8152600401610abc906154e0565b6110758361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a181858585613376565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611114919061553d565b6111305760405162461bcd60e51b8152600401610abc9061555a565b606654818116146111a95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6111ef6133f1565b6110a18484848461344b565b6001600160a01b0383166000908152609b602052604081205461122085828686611b43565b95945050505050565b600054610100900460ff16158080156112495750600054600160ff909116105b806112635750303b158015611263575060005460ff166001145b6112c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610abc565b6000805460ff1916600117905580156112e9576000805461ff0019166101001790555b6112f38888613671565b6112fb61375b565b609755611307896137f2565b61131086613844565b61131c8585858561344b565b8015611362576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113cc5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6113e85760405162461bcd60e51b8152600401610abc906154e0565b6113f18361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a18185858561393e565b606654600290600490811614156114465760405162461bcd60e51b8152600401610abc90615358565b600260c95414156114995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c95560005b88811015611549576115398a8a838181106114be576114be615311565b90506020028101906114d091906155a2565b8989848181106114e2576114e2615311565b90506020028101906114f491906153af565b89898681811061150657611506615311565b9050602002013588888781811061151f5761151f615311565b905060200201602081019061153491906155b8565b6139b9565b6115428161533d565b90506114a1565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e6919061553d565b6116025760405162461bcd60e51b8152600401610abc9061555a565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116549190615649565b604051602081830303815290604052805190602001209050919050565b6066546002906004908116141561169a5760405162461bcd60e51b8152600401610abc90615358565b600260c95414156116ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c9556116ff86868686866139b9565b5050600160c95550505050565b6117146133f1565b610fee81613844565b60006001600160a01b0382161580159061175157506001600160a01b038083166000818152609a6020526040902054909116145b92915050565b61175f6133f1565b61176960006137f2565b565b42836020015110156117ef5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610abc565b6117f88561155a565b156118815760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610abc565b61188a8461171d565b6119165760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610abc565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119528783888860200151611b43565b6001600160a01b0388166000908152609b60205260409020600184019055855190915061198290889083906141a3565b61198e87878686612fe9565b50505050505050565b6060600082516001600160401b038111156119b4576119b4614c31565b6040519080825280602002602001820160405280156119dd578160200160208202803683370190505b50905060005b83518110156109c6576001600160a01b03851660009081526098602052604081208551909190869084908110611a1b57611a1b615311565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a5657611a56615311565b6020908102919091010152611a6a8161533d565b90506119e3565b611a7a3361171d565b611afc5760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610abc565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611b3792919061544a565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611bb961269c565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c90919061565c565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015611d00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d2891908101906156d0565b9150915060008313611d3f57909590945092505050565b606080835160001415611df9576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611db457611db4615311565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611de857611de8615311565b602002602001018181525050611fa7565b8351611e0690600161578a565b6001600160401b03811115611e1d57611e1d614c31565b604051908082528060200260200182016040528015611e46578160200160208202803683370190505b50915081516001600160401b03811115611e6257611e62614c31565b604051908082528060200260200182016040528015611e8b578160200160208202803683370190505b50905060005b8451811015611f2557848181518110611eac57611eac615311565b6020026020010151838281518110611ec657611ec6615311565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611ef857611ef8615311565b6020026020010151828281518110611f1257611f12615311565b6020908102919091010152600101611e91565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611f4a91906157a2565b81518110611f5a57611f5a615311565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611f8a91906157a2565b81518110611f9a57611f9a615311565b6020026020010181815250505b9097909650945050505050565b60665460609060019060029081161415611fe05760405162461bcd60e51b8152600401610abc90615358565b611fe98361155a565b6120695760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610abc565b6120728361171d565b156120e55760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610abc565b6001600160a01b0383166121615760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610abc565b6001600160a01b038084166000818152609a6020526040902054909116903314806121945750336001600160a01b038216145b806121bb57506001600160a01b038181166000908152609960205260409020600101541633145b61222d5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610abc565b60008061223986611bfc565b9092509050336001600160a01b0387161461228f57826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b0319169055815161231157604080516000815260208101909152945061246f565b81516001600160401b0381111561232a5761232a614c31565b604051908082528060200260200182016040528015612353578160200160208202803683370190505b50945060005b825181101561246d576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106123b9576123b9615311565b6020026020010151826000815181106123d4576123d4615311565b60200260200101906001600160a01b031690816001600160a01b03168152505083838151811061240657612406615311565b60200260200101518160008151811061242157612421615311565b60200260200101818152505061243a89878b8585612836565b88848151811061244c5761244c615311565b602002602001018181525050505080806124659061533d565b915050612359565b505b50505050919050565b6124813361155a565b156124ff5760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610abc565b6125088361171d565b6125895760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610abc565b6110a333848484612fe9565b61259e3361171d565b61261c5760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610abc565b610fee3382612df6565b61262e6133f1565b6001600160a01b0381166126935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abc565b610fee816137f2565b60007f00000000000000000000000000000000000000000000000000000000000000004614156126cd575060975490565b6126d561375b565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561272d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127519190615479565b6001600160a01b0316336001600160a01b0316146127815760405162461bcd60e51b8152600401610abc90615496565b6066541981196066541916146127ff5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016111dc565b60006001600160a01b0386166128cd5760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610abc565b82516129575760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610abc565b60005b8351811015612d04576001600160a01b038616156129b0576129b0868886848151811061298957612989615311565b60200260200101518685815181106129a3576129a3615311565b6020026020010151613376565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129e0576129e0615311565b60200260200101516001600160a01b03161415612aa9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb8988858481518110612a3957612a39615311565b60200260200101516040518363ffffffff1660e01b8152600401612a729291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b50505050612cfc565b846001600160a01b0316876001600160a01b03161480612b7b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d858381518110612b0557612b05615311565b60200260200101516040518263ffffffff1660e01b8152600401612b3891906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b79919061553d565b155b612c475760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610abc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612c8957612c89615311565b6020026020010151868581518110612ca357612ca3615311565b60200260200101516040518463ffffffff1660e01b8152600401612cc9939291906157b9565b600060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050505b60010161295a565b506001600160a01b0386166000908152609f60205260408120805491829190612d2c8361533d565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d9482611641565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612de290839085906157dd565b60405180910390a198975050505050505050565b6213c680612e0a60608301604084016157f6565b63ffffffff161115612ebf5760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610abc565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612efb90606084019084016157f6565b63ffffffff161015612f915760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610abc565b6001600160a01b03821660009081526099602052604090208190612fb58282615833565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611b379084906153f8565b606654600090600190811614156130125760405162461bcd60e51b8152600401610abc90615358565b6001600160a01b038085166000908152609960205260409020600101541680158015906130485750336001600160a01b03821614155b801561305d5750336001600160a01b03861614155b156131ca5742846020015110156130dc5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156131765760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516131b79088908890859088906109ce565b90506131c8828287600001516141a3565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061322988611bfc565b9150915060005b825181101561136257613277888a85848151811061325057613250615311565b602002602001015185858151811061326a5761326a615311565b602002602001015161393e565b600101613230565b6001600160a01b03811661330d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610abc565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038085166000908152609860209081526040808320938616835292905290812080548392906133ad9084906157a2565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f30939291906157b9565b6033546001600160a01b031633146117695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abc565b8281146134d35760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610abc565b8260005b818110156136695760008686838181106134f3576134f3615311565b905060200201602081019061350891906149ff565b6001600160a01b038116600090815260a1602052604081205491925086868581811061353657613536615311565b90506020020135905062034bc08111156135fa5760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610abc565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806136629061533d565b90506134d7565b505050505050565b6065546001600160a01b031615801561369257506001600160a01b03821615155b6137145760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26137578261327f565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc08111156138fd5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610abc565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061397590849061578a565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f30939291906157b9565b60006139c76105f387615896565b6000818152609e602052604090205490915060ff16613a485760405162461bcd60e51b815260206004820152604360248201526000805160206159c883398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610abc565b609d544390613a5d60a0890160808a016157f6565b63ffffffff16613a6d919061578a565b1115613af55760405162461bcd60e51b815260206004820152605f60248201526000805160206159c883398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610abc565b613b0560608701604088016149ff565b6001600160a01b0316336001600160a01b031614613b925760405162461bcd60e51b815260206004820152605060248201526000805160206159c883398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610abc565b8115613c1457613ba560a08701876153af565b85149050613c145760405162461bcd60e51b815260206004820152604260248201526000805160206159c883398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610abc565b6000818152609e60205260409020805460ff191690558115613d795760005b613c4060a08801886153af565b9050811015613d73574360a16000613c5b60a08b018b6153af565b85818110613c6b57613c6b615311565b9050602002016020810190613c8091906149ff565b6001600160a01b03168152602081019190915260400160002054613caa60a08a0160808b016157f6565b63ffffffff16613cba919061578a565b1115613cd85760405162461bcd60e51b8152600401610abc906158a2565b613d6b613ce860208901896149ff565b33613cf660a08b018b6153af565b85818110613d0657613d06615311565b9050602002016020810190613d1b91906149ff565b613d2860c08c018c6153af565b86818110613d3857613d38615311565b905060200201358a8a87818110613d5157613d51615311565b9050602002016020810190613d6691906149ff565b61435d565b600101613c33565b50614168565b336000908152609a60205260408120546001600160a01b0316905b613da160a08901896153af565b9050811015614165574360a16000613dbc60a08c018c6153af565b85818110613dcc57613dcc615311565b9050602002016020810190613de191906149ff565b6001600160a01b03168152602081019190915260400160002054613e0b60a08b0160808c016157f6565b63ffffffff16613e1b919061578a565b1115613e395760405162461bcd60e51b8152600401610abc906158a2565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613e5b60a08a018a6153af565b83818110613e6b57613e6b615311565b9050602002016020810190613e8091906149ff565b6001600160a01b03161415613fd0576000613e9e60208a018a6149ff565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c83613edf60c08e018e6153af565b87818110613eef57613eef615311565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f67919061565c565b6001600160a01b038084166000908152609a6020526040902054919250168015613fc857613fc88184613f9d60a08f018f6153af565b88818110613fad57613fad615311565b9050602002016020810190613fc291906149ff565b8561393e565b50505061415d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061401257614012615311565b905060200201602081019061402791906149ff565b61403460a08d018d6153af565b8681811061404457614044615311565b905060200201602081019061405991906149ff565b61406660c08e018e6153af565b8781811061407657614076615311565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156140d657600080fd5b505af11580156140ea573d6000803e3d6000fd5b505050506001600160a01b0382161561415d5761415d823361410f60a08c018c6153af565b8581811061411f5761411f615311565b905060200201602081019061413491906149ff565b61414160c08d018d6153af565b8681811061415157614151615311565b9050602002013561393e565b600101613d94565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b156142bd57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906141e3908690869060040161592a565b602060405180830381865afa158015614200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142249190615987565b6001600160e01b031916146110a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610abc565b826001600160a01b03166142d1838361449d565b6001600160a01b0316146110a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610abc565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156144085760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b1300906143d1908890889087906004016157b9565b600060405180830381600087803b1580156143eb57600080fd5b505af11580156143ff573d6000803e3d6000fd5b50505050614496565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b15801561448257600080fd5b505af1158015611362573d6000803e3d6000fd5b5050505050565b60008060006144ac85856144b9565b915091506109c681614529565b6000808251604114156144f05760208301516040840151606085015160001a6144e4878285856146e4565b94509450505050614522565b82516040141561451a576020830151604084015161450f8683836147d1565b935093505050614522565b506000905060025b9250929050565b600081600481111561453d5761453d6159b1565b14156145465750565b600181600481111561455a5761455a6159b1565b14156145a85760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610abc565b60028160048111156145bc576145bc6159b1565b141561460a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610abc565b600381600481111561461e5761461e6159b1565b14156146775760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610abc565b600481600481111561468b5761468b6159b1565b1415610fee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610abc565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561471b57506000905060036147c8565b8460ff16601b1415801561473357508460ff16601c14155b1561474457506000905060046147c8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614798573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147c1576000600192509250506147c8565b9150600090505b94509492505050565b6000806001600160ff1b038316816147ee60ff86901c601b61578a565b90506147fc878288856146e4565b935093505050935093915050565b60008083601f84011261481c57600080fd5b5081356001600160401b0381111561483357600080fd5b6020830191508360208260051b850101111561452257600080fd5b6000806020838503121561486157600080fd5b82356001600160401b0381111561487757600080fd5b6148838582860161480a565b90969095509350505050565b6001600160a01b0381168114610fee57600080fd5b80356148af8161488f565b919050565b600080600080600060a086880312156148cc57600080fd5b85356148d78161488f565b945060208601356148e78161488f565b935060408601356148f78161488f565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b818110156149475783518352928401929184019160010161492b565b50909695505050505050565b60006060828403121561496557600080fd5b50919050565b60008083601f84011261497d57600080fd5b5081356001600160401b0381111561499457600080fd5b60208301915083602082850101111561452257600080fd5b6000806000608084860312156149c157600080fd5b6149cb8585614953565b925060608401356001600160401b038111156149e657600080fd5b6149f28682870161496b565b9497909650939450505050565b600060208284031215614a1157600080fd5b8135614a1c8161488f565b9392505050565b600080600060608486031215614a3857600080fd5b8335614a438161488f565b92506020840135614a538161488f565b929592945050506040919091013590565b600060208284031215614a7657600080fd5b5035919050565b60008060008060408587031215614a9357600080fd5b84356001600160401b0380821115614aaa57600080fd5b614ab68883890161480a565b90965094506020870135915080821115614acf57600080fd5b50614adc8782880161480a565b95989497509550505050565b60008060008060008060008060c0898b031215614b0457600080fd5b8835614b0f8161488f565b97506020890135614b1f8161488f565b9650604089013595506060890135945060808901356001600160401b0380821115614b4957600080fd5b614b558c838d0161480a565b909650945060a08b0135915080821115614b6e57600080fd5b50614b7b8b828c0161480a565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614bab57600080fd5b88356001600160401b0380821115614bc257600080fd5b614bce8c838d0161480a565b909a50985060208b0135915080821115614be757600080fd5b614bf38c838d0161480a565b909850965060408b0135915080821115614c0c57600080fd5b614c188c838d0161480a565b909650945060608b0135915080821115614b6e57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614c6957614c69614c31565b60405290565b604080519081016001600160401b0381118282101715614c6957614c69614c31565b604051601f8201601f191681016001600160401b0381118282101715614cb957614cb9614c31565b604052919050565b63ffffffff81168114610fee57600080fd5b80356148af81614cc1565b60006001600160401b03821115614cf757614cf7614c31565b5060051b60200190565b600082601f830112614d1257600080fd5b81356020614d27614d2283614cde565b614c91565b82815260059290921b84018101918181019086841115614d4657600080fd5b8286015b84811015614d6a578035614d5d8161488f565b8352918301918301614d4a565b509695505050505050565b600082601f830112614d8657600080fd5b81356020614d96614d2283614cde565b82815260059290921b84018101918181019086841115614db557600080fd5b8286015b84811015614d6a5780358352918301918301614db9565b600060e08284031215614de257600080fd5b614dea614c47565b9050614df5826148a4565b8152614e03602083016148a4565b6020820152614e14604083016148a4565b604082015260608201356060820152614e2f60808301614cd3565b608082015260a08201356001600160401b0380821115614e4e57600080fd5b614e5a85838601614d01565b60a084015260c0840135915080821115614e7357600080fd5b50614e8084828501614d75565b60c08301525092915050565b600060208284031215614e9e57600080fd5b81356001600160401b03811115614eb457600080fd5b614ec084828501614dd0565b949350505050565b600060208284031215614eda57600080fd5b813560ff81168114614a1c57600080fd5b8015158114610fee57600080fd5b600080600080600060808688031215614f1157600080fd5b85356001600160401b0380821115614f2857600080fd5b9087019060e0828a031215614f3c57600080fd5b90955060208701359080821115614f5257600080fd5b50614f5f8882890161480a565b909550935050604086013591506060860135614f7a81614eeb565b809150509295509295909350565b60008060408385031215614f9b57600080fd5b8235614fa68161488f565b91506020830135614fb68161488f565b809150509250929050565b600060408284031215614fd357600080fd5b614fdb614c6f565b905081356001600160401b0380821115614ff457600080fd5b818401915084601f83011261500857600080fd5b813560208282111561501c5761501c614c31565b61502e601f8301601f19168201614c91565b9250818352868183860101111561504457600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561508157600080fd5b853561508c8161488f565b9450602086013561509c8161488f565b935060408601356001600160401b03808211156150b857600080fd5b6150c489838a01614fc1565b945060608801359150808211156150da57600080fd5b506150e788828901614fc1565b95989497509295608001359392505050565b6000806040838503121561510c57600080fd5b82356151178161488f565b915060208301356001600160401b0381111561513257600080fd5b61513e85828601614d01565b9150509250929050565b600081518084526020808501945080840160005b838110156151785781518752958201959082019060010161515c565b509495945050505050565b602081526000614a1c6020830184615148565b600080602083850312156151a957600080fd5b82356001600160401b038111156151bf57600080fd5b6148838582860161496b565b600080604083850312156151de57600080fd5b82356151e98161488f565b946020939093013593505050565b6000806000806080858703121561520d57600080fd5b84356152188161488f565b935060208501359250604085013561522f8161488f565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156151785781516001600160a01b031687529582019590820190600101615253565b60408152600061528b604083018561523f565b82810360208401526112208185615148565b6000806000606084860312156152b257600080fd5b83356152bd8161488f565b925060208401356001600160401b038111156152d857600080fd5b6152e486828701614fc1565b925050604084013590509250925092565b60006060828403121561530757600080fd5b614a1c8383614953565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561535157615351615327565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e198336030181126153a557600080fd5b9190910192915050565b6000808335601e198436030181126153c657600080fd5b8301803591506001600160401b038211156153e057600080fd5b6020019150600581901b360382131561452257600080fd5b6060810182356154078161488f565b6001600160a01b0390811683526020840135906154238261488f565b166020830152604083013561543781614cc1565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561548b57600080fd5b8151614a1c8161488f565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561554f57600080fd5b8151614a1c81614eeb565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de198336030181126153a557600080fd5b6000602082840312156155ca57600080fd5b8135614a1c81614eeb565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261563060e085018261523f565b905060c083015184820360c08601526112208282615148565b602081526000614a1c60208301846155d5565b60006020828403121561566e57600080fd5b5051919050565b600082601f83011261568657600080fd5b81516020615696614d2283614cde565b82815260059290921b840181019181810190868411156156b557600080fd5b8286015b84811015614d6a57805183529183019183016156b9565b600080604083850312156156e357600080fd5b82516001600160401b03808211156156fa57600080fd5b818501915085601f83011261570e57600080fd5b8151602061571e614d2283614cde565b82815260059290921b8401810191818101908984111561573d57600080fd5b948201945b838610156157645785516157558161488f565b82529482019490820190615742565b9188015191965090935050508082111561577d57600080fd5b5061513e85828601615675565b6000821982111561579d5761579d615327565b500190565b6000828210156157b4576157b4615327565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000614ec060408301846155d5565b60006020828403121561580857600080fd5b8135614a1c81614cc1565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561583e8161488f565b6158488183615813565b5060018101602083013561585b8161488f565b6158658183615813565b50604083013561587481614cc1565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006117513683614dd0565b6020808252606e908201526000805160206159c883398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b8181101561595e57858101830151858201606001528201615942565b81811115615970576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561599957600080fd5b81516001600160e01b031981168114614a1c57600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a26469706673582212201a88ea42e4cac4dd0831a1f8bfe22cc6c2ba4c8776376923419ad9ee255481f164736f6c634300080c0033", + Bin: "0x6101006040523480156200001257600080fd5b5060405162005c3338038062005c33833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051615a0a6200022960003960006126870152600081816105b10152818161102e015281816113aa01528181611c0a015281816129e001528181613e93015261437f015260006107620152600081816104f901528181610ffc0152818161137801528181611c9e01528181612aad01528181612c3001528181613fb901526144250152615a0a6000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a610355366004614835565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a236600461489b565b6109ce565b6103ba6103b5366004614835565b610a90565b60405161036491906148f6565b6103da6103d5366004614993565b610df9565b005b6103da6103ea3660046149e6565b610f3e565b6103da6103fd366004614a0a565b610ff1565b6103da610410366004614a4b565b6110a8565b6103da610423366004614a64565b6111e7565b61035a6104363660046149e6565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614a0a565b6111fb565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614acf565b611229565b6103da6104bc366004614a0a565b61136d565b61035a6104cf3660046149e6565b609b6020526000908152604090205481565b6103da6104ef366004614b76565b61141d565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b6105413660046149e6565b6001600160a01b039081166000908152609960205260409020600101541690565b6105756105703660046149e6565b61155a565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da61157a565b61035a6105f3366004614e73565b611641565b610575610606366004614eaf565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614ee0565b611671565b6103da610644366004614a4b565b61170c565b61051b6106573660046149e6565b609a602052600090815260409020546001600160a01b031681565b6105756106803660046149e6565b61171d565b6103da61173e565b61035a61069b366004614f6f565b609860209081526000928352604080842090915290825290205481565b6103da6106c6366004615050565b611752565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd3660046150e0565b61197e565b604051610364919061516a565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da61073836600461517d565b611a58565b61035a61074b3660046149e6565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004614a4b565b609e6020526000908152604090205460ff1681565b6105756107b53660046151b2565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec3660046149e6565b60a16020526000908152604090205481565b61086e61080c3660046149e6565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b23660046151de565b611b2a565b61035a62034bc081565b6108d46108cf3660046149e6565b611be3565b60405161036492919061525f565b6103ba6108f03660046149e6565b611f9b565b6103da610903366004615284565b61245f565b6103da6109163660046152dc565b61257c565b6103da6109293660046149e6565b61260d565b61035a612683565b6103da610944366004614a4b565b6126c1565b609d54600090815b838110156109c657600060a16000878785818110610971576109716152f8565b905060200201602081019061098691906149e6565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b506109bf81615324565b9050610951565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a4c612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ac55760405162461bcd60e51b8152600401610abc9061533f565b60405180910390fd5b6000836001600160401b03811115610adf57610adf614c18565b604051908082528060200260200182016040528015610b08578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610dee57868682818110610b4357610b436152f8565b9050602002810190610b559190615376565b610b63906020810190615396565b9050878783818110610b7757610b776152f8565b9050602002810190610b899190615376565b610b939080615396565b905014610c085760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610abc565b33878783818110610c1b57610c1b6152f8565b9050602002810190610c2d9190615376565b610c3e9060608101906040016149e6565b6001600160a01b031614610cba5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610abc565b610dbf3383898985818110610cd157610cd16152f8565b9050602002810190610ce39190615376565b610cf49060608101906040016149e6565b8a8a86818110610d0657610d066152f8565b9050602002810190610d189190615376565b610d229080615396565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d6857610d686152f8565b9050602002810190610d7a9190615376565b610d88906020810190615396565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061281d92505050565b838281518110610dd157610dd16152f8565b602090810291909101015280610de681615324565b915050610b29565b509095945050505050565b610e023361155a565b15610e885760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610abc565b610e923384612ddd565b604080518082019091526060815260006020820152610eb43380836000612fd0565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610eed91906153df565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f30929190615431565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615460565b6001600160a01b0316336001600160a01b031614610fe55760405162461bcd60e51b8152600401610abc9061547d565b610fee81613266565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110505750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61106c5760405162461bcd60e51b8152600401610abc906154c7565b6110758361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a18185858561335d565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190615524565b6111305760405162461bcd60e51b8152600401610abc90615541565b606654818116146111a95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6111ef6133d8565b6110a184848484613432565b6001600160a01b0383166000908152609b602052604081205461122085828686611b2a565b95945050505050565b600054610100900460ff16158080156112495750600054600160ff909116105b806112635750303b158015611263575060005460ff166001145b6112c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610abc565b6000805460ff1916600117905580156112e9576000805461ff0019166101001790555b6112f38888613658565b6112fb613742565b609755611307896137d9565b6113108661382b565b61131c85858585613432565b8015611362576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113cc5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6113e85760405162461bcd60e51b8152600401610abc906154c7565b6113f18361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a181858585613925565b606654600290600490811614156114465760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156114995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c95560005b88811015611549576115398a8a838181106114be576114be6152f8565b90506020028101906114d09190615589565b8989848181106114e2576114e26152f8565b90506020028101906114f49190615396565b898986818110611506576115066152f8565b9050602002013588888781811061151f5761151f6152f8565b9050602002016020810190611534919061559f565b6139a0565b61154281615324565b90506114a1565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190615524565b6116025760405162461bcd60e51b8152600401610abc90615541565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116549190615630565b604051602081830303815290604052805190602001209050919050565b6066546002906004908116141561169a5760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156116ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c9556116ff86868686866139a0565b5050600160c95550505050565b6117146133d8565b610fee8161382b565b6001600160a01b039081166000818152609a60205260409020549091161490565b6117466133d8565b61175060006137d9565b565b42836020015110156117d65760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610abc565b6117df8561155a565b156118685760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610abc565b6118718461171d565b6118fd5760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610abc565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119398783888860200151611b2a565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611969908890839061418a565b61197587878686612fd0565b50505050505050565b6060600082516001600160401b0381111561199b5761199b614c18565b6040519080825280602002602001820160405280156119c4578160200160208202803683370190505b50905060005b83518110156109c6576001600160a01b03851660009081526098602052604081208551909190869084908110611a0257611a026152f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a3d57611a3d6152f8565b6020908102919091010152611a5181615324565b90506119ca565b611a613361171d565b611ae35760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610abc565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611b1e929190615431565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611ba0612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c779190615643565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015611ce7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d0f91908101906156b7565b9150915060008313611d2657909590945092505050565b606080835160001415611de0576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611d9b57611d9b6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611dcf57611dcf6152f8565b602002602001018181525050611f8e565b8351611ded906001615771565b6001600160401b03811115611e0457611e04614c18565b604051908082528060200260200182016040528015611e2d578160200160208202803683370190505b50915081516001600160401b03811115611e4957611e49614c18565b604051908082528060200260200182016040528015611e72578160200160208202803683370190505b50905060005b8451811015611f0c57848181518110611e9357611e936152f8565b6020026020010151838281518110611ead57611ead6152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611edf57611edf6152f8565b6020026020010151828281518110611ef957611ef96152f8565b6020908102919091010152600101611e78565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611f319190615789565b81518110611f4157611f416152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611f719190615789565b81518110611f8157611f816152f8565b6020026020010181815250505b9097909650945050505050565b60665460609060019060029081161415611fc75760405162461bcd60e51b8152600401610abc9061533f565b611fd08361155a565b6120505760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610abc565b6120598361171d565b156120cc5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610abc565b6001600160a01b0383166121485760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610abc565b6001600160a01b038084166000818152609a60205260409020549091169033148061217b5750336001600160a01b038216145b806121a257506001600160a01b038181166000908152609960205260409020600101541633145b6122145760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610abc565b60008061222086611be3565b9092509050336001600160a01b0387161461227657826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516122f8576040805160008152602081019091529450612456565b81516001600160401b0381111561231157612311614c18565b60405190808252806020026020018201604052801561233a578160200160208202803683370190505b50945060005b8251811015612454576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106123a0576123a06152f8565b6020026020010151826000815181106123bb576123bb6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106123ed576123ed6152f8565b602002602001015181600081518110612408576124086152f8565b60200260200101818152505061242189878b858561281d565b888481518110612433576124336152f8565b6020026020010181815250505050808061244c90615324565b915050612340565b505b50505050919050565b6124683361155a565b156124e65760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610abc565b6124ef8361171d565b6125705760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610abc565b6110a333848484612fd0565b6125853361171d565b6126035760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610abc565b610fee3382612ddd565b6126156133d8565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abc565b610fee816137d9565b60007f00000000000000000000000000000000000000000000000000000000000000004614156126b4575060975490565b6126bc613742565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127389190615460565b6001600160a01b0316336001600160a01b0316146127685760405162461bcd60e51b8152600401610abc9061547d565b6066541981196066541916146127e65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016111dc565b60006001600160a01b0386166128b45760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610abc565b825161293e5760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610abc565b60005b8351811015612ceb576001600160a01b03861615612997576129978688868481518110612970576129706152f8565b602002602001015186858151811061298a5761298a6152f8565b602002602001015161335d565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129c7576129c76152f8565b60200260200101516001600160a01b03161415612a90577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb8988858481518110612a2057612a206152f8565b60200260200101516040518363ffffffff1660e01b8152600401612a599291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a7357600080fd5b505af1158015612a87573d6000803e3d6000fd5b50505050612ce3565b846001600160a01b0316876001600160a01b03161480612b6257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d858381518110612aec57612aec6152f8565b60200260200101516040518263ffffffff1660e01b8152600401612b1f91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b609190615524565b155b612c2e5760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610abc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612c7057612c706152f8565b6020026020010151868581518110612c8a57612c8a6152f8565b60200260200101516040518463ffffffff1660e01b8152600401612cb0939291906157a0565b600060405180830381600087803b158015612cca57600080fd5b505af1158015612cde573d6000803e3d6000fd5b505050505b600101612941565b506001600160a01b0386166000908152609f60205260408120805491829190612d1383615324565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d7b82611641565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612dc990839085906157c4565b60405180910390a198975050505050505050565b6213c680612df160608301604084016157dd565b63ffffffff161115612ea65760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610abc565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612ee290606084019084016157dd565b63ffffffff161015612f785760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610abc565b6001600160a01b03821660009081526099602052604090208190612f9c828261581a565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611b1e9084906153df565b60665460009060019081161415612ff95760405162461bcd60e51b8152600401610abc9061533f565b6001600160a01b0380851660009081526099602052604090206001015416801580159061302f5750336001600160a01b03821614155b80156130445750336001600160a01b03861614155b156131b15742846020015110156130c35760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff161561315d5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff1916600117905585015161319e9088908890859088906109ce565b90506131af8282876000015161418a565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061321088611be3565b9150915060005b82518110156113625761325e888a858481518110613237576132376152f8565b6020026020010151858581518110613251576132516152f8565b6020026020010151613925565b600101613217565b6001600160a01b0381166132f45760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610abc565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613394908490615789565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f30939291906157a0565b6033546001600160a01b031633146117505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abc565b8281146134ba5760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610abc565b8260005b818110156136505760008686838181106134da576134da6152f8565b90506020020160208101906134ef91906149e6565b6001600160a01b038116600090815260a1602052604081205491925086868581811061351d5761351d6152f8565b90506020020135905062034bc08111156135e15760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610abc565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a15050508061364990615324565b90506134be565b505050505050565b6065546001600160a01b031615801561367957506001600160a01b03821615155b6136fb5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261373e82613266565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc08111156138e45760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610abc565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061395c908490615771565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f30939291906157a0565b60006139ae6105f38761587d565b6000818152609e602052604090205490915060ff16613a2f5760405162461bcd60e51b815260206004820152604360248201526000805160206159b583398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610abc565b609d544390613a4460a0890160808a016157dd565b63ffffffff16613a549190615771565b1115613adc5760405162461bcd60e51b815260206004820152605f60248201526000805160206159b583398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610abc565b613aec60608701604088016149e6565b6001600160a01b0316336001600160a01b031614613b795760405162461bcd60e51b815260206004820152605060248201526000805160206159b583398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610abc565b8115613bfb57613b8c60a0870187615396565b85149050613bfb5760405162461bcd60e51b815260206004820152604260248201526000805160206159b583398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610abc565b6000818152609e60205260409020805460ff191690558115613d605760005b613c2760a0880188615396565b9050811015613d5a574360a16000613c4260a08b018b615396565b85818110613c5257613c526152f8565b9050602002016020810190613c6791906149e6565b6001600160a01b03168152602081019190915260400160002054613c9160a08a0160808b016157dd565b63ffffffff16613ca19190615771565b1115613cbf5760405162461bcd60e51b8152600401610abc9061588f565b613d52613ccf60208901896149e6565b33613cdd60a08b018b615396565b85818110613ced57613ced6152f8565b9050602002016020810190613d0291906149e6565b613d0f60c08c018c615396565b86818110613d1f57613d1f6152f8565b905060200201358a8a87818110613d3857613d386152f8565b9050602002016020810190613d4d91906149e6565b614344565b600101613c1a565b5061414f565b336000908152609a60205260408120546001600160a01b0316905b613d8860a0890189615396565b905081101561414c574360a16000613da360a08c018c615396565b85818110613db357613db36152f8565b9050602002016020810190613dc891906149e6565b6001600160a01b03168152602081019190915260400160002054613df260a08b0160808c016157dd565b63ffffffff16613e029190615771565b1115613e205760405162461bcd60e51b8152600401610abc9061588f565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613e4260a08a018a615396565b83818110613e5257613e526152f8565b9050602002016020810190613e6791906149e6565b6001600160a01b03161415613fb7576000613e8560208a018a6149e6565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c83613ec660c08e018e615396565b87818110613ed657613ed66152f8565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4e9190615643565b6001600160a01b038084166000908152609a6020526040902054919250168015613faf57613faf8184613f8460a08f018f615396565b88818110613f9457613f946152f8565b9050602002016020810190613fa991906149e6565b85613925565b505050614144565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea133898985818110613ff957613ff96152f8565b905060200201602081019061400e91906149e6565b61401b60a08d018d615396565b8681811061402b5761402b6152f8565b905060200201602081019061404091906149e6565b61404d60c08e018e615396565b8781811061405d5761405d6152f8565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156140bd57600080fd5b505af11580156140d1573d6000803e3d6000fd5b505050506001600160a01b038216156141445761414482336140f660a08c018c615396565b85818110614106576141066152f8565b905060200201602081019061411b91906149e6565b61412860c08d018d615396565b86818110614138576141386152f8565b90506020020135613925565b600101613d7b565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b156142a457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906141ca9086908690600401615917565b602060405180830381865afa1580156141e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420b9190615974565b6001600160e01b031916146110a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610abc565b826001600160a01b03166142b88383614484565b6001600160a01b0316146110a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610abc565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156143ef5760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b1300906143b8908890889087906004016157a0565b600060405180830381600087803b1580156143d257600080fd5b505af11580156143e6573d6000803e3d6000fd5b5050505061447d565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b15801561446957600080fd5b505af1158015611362573d6000803e3d6000fd5b5050505050565b600080600061449385856144a0565b915091506109c681614510565b6000808251604114156144d75760208301516040840151606085015160001a6144cb878285856146cb565b94509450505050614509565b82516040141561450157602083015160408401516144f68683836147b8565b935093505050614509565b506000905060025b9250929050565b60008160048111156145245761452461599e565b141561452d5750565b60018160048111156145415761454161599e565b141561458f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610abc565b60028160048111156145a3576145a361599e565b14156145f15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610abc565b60038160048111156146055761460561599e565b141561465e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610abc565b60048160048111156146725761467261599e565b1415610fee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610abc565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561470257506000905060036147af565b8460ff16601b1415801561471a57508460ff16601c14155b1561472b57506000905060046147af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561477f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147a8576000600192509250506147af565b9150600090505b94509492505050565b6000806001600160ff1b038316816147d560ff86901c601b615771565b90506147e3878288856146cb565b935093505050935093915050565b60008083601f84011261480357600080fd5b5081356001600160401b0381111561481a57600080fd5b6020830191508360208260051b850101111561450957600080fd5b6000806020838503121561484857600080fd5b82356001600160401b0381111561485e57600080fd5b61486a858286016147f1565b90969095509350505050565b6001600160a01b0381168114610fee57600080fd5b803561489681614876565b919050565b600080600080600060a086880312156148b357600080fd5b85356148be81614876565b945060208601356148ce81614876565b935060408601356148de81614876565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b8181101561492e57835183529284019291840191600101614912565b50909695505050505050565b60006060828403121561494c57600080fd5b50919050565b60008083601f84011261496457600080fd5b5081356001600160401b0381111561497b57600080fd5b60208301915083602082850101111561450957600080fd5b6000806000608084860312156149a857600080fd5b6149b2858561493a565b925060608401356001600160401b038111156149cd57600080fd5b6149d986828701614952565b9497909650939450505050565b6000602082840312156149f857600080fd5b8135614a0381614876565b9392505050565b600080600060608486031215614a1f57600080fd5b8335614a2a81614876565b92506020840135614a3a81614876565b929592945050506040919091013590565b600060208284031215614a5d57600080fd5b5035919050565b60008060008060408587031215614a7a57600080fd5b84356001600160401b0380821115614a9157600080fd5b614a9d888389016147f1565b90965094506020870135915080821115614ab657600080fd5b50614ac3878288016147f1565b95989497509550505050565b60008060008060008060008060c0898b031215614aeb57600080fd5b8835614af681614876565b97506020890135614b0681614876565b9650604089013595506060890135945060808901356001600160401b0380821115614b3057600080fd5b614b3c8c838d016147f1565b909650945060a08b0135915080821115614b5557600080fd5b50614b628b828c016147f1565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614b9257600080fd5b88356001600160401b0380821115614ba957600080fd5b614bb58c838d016147f1565b909a50985060208b0135915080821115614bce57600080fd5b614bda8c838d016147f1565b909850965060408b0135915080821115614bf357600080fd5b614bff8c838d016147f1565b909650945060608b0135915080821115614b5557600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614c5057614c50614c18565b60405290565b604080519081016001600160401b0381118282101715614c5057614c50614c18565b604051601f8201601f191681016001600160401b0381118282101715614ca057614ca0614c18565b604052919050565b63ffffffff81168114610fee57600080fd5b803561489681614ca8565b60006001600160401b03821115614cde57614cde614c18565b5060051b60200190565b600082601f830112614cf957600080fd5b81356020614d0e614d0983614cc5565b614c78565b82815260059290921b84018101918181019086841115614d2d57600080fd5b8286015b84811015614d51578035614d4481614876565b8352918301918301614d31565b509695505050505050565b600082601f830112614d6d57600080fd5b81356020614d7d614d0983614cc5565b82815260059290921b84018101918181019086841115614d9c57600080fd5b8286015b84811015614d515780358352918301918301614da0565b600060e08284031215614dc957600080fd5b614dd1614c2e565b9050614ddc8261488b565b8152614dea6020830161488b565b6020820152614dfb6040830161488b565b604082015260608201356060820152614e1660808301614cba565b608082015260a08201356001600160401b0380821115614e3557600080fd5b614e4185838601614ce8565b60a084015260c0840135915080821115614e5a57600080fd5b50614e6784828501614d5c565b60c08301525092915050565b600060208284031215614e8557600080fd5b81356001600160401b03811115614e9b57600080fd5b614ea784828501614db7565b949350505050565b600060208284031215614ec157600080fd5b813560ff81168114614a0357600080fd5b8015158114610fee57600080fd5b600080600080600060808688031215614ef857600080fd5b85356001600160401b0380821115614f0f57600080fd5b9087019060e0828a031215614f2357600080fd5b90955060208701359080821115614f3957600080fd5b50614f46888289016147f1565b909550935050604086013591506060860135614f6181614ed2565b809150509295509295909350565b60008060408385031215614f8257600080fd5b8235614f8d81614876565b91506020830135614f9d81614876565b809150509250929050565b600060408284031215614fba57600080fd5b614fc2614c56565b905081356001600160401b0380821115614fdb57600080fd5b818401915084601f830112614fef57600080fd5b813560208282111561500357615003614c18565b615015601f8301601f19168201614c78565b9250818352868183860101111561502b57600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561506857600080fd5b853561507381614876565b9450602086013561508381614876565b935060408601356001600160401b038082111561509f57600080fd5b6150ab89838a01614fa8565b945060608801359150808211156150c157600080fd5b506150ce88828901614fa8565b95989497509295608001359392505050565b600080604083850312156150f357600080fd5b82356150fe81614876565b915060208301356001600160401b0381111561511957600080fd5b61512585828601614ce8565b9150509250929050565b600081518084526020808501945080840160005b8381101561515f57815187529582019590820190600101615143565b509495945050505050565b602081526000614a03602083018461512f565b6000806020838503121561519057600080fd5b82356001600160401b038111156151a657600080fd5b61486a85828601614952565b600080604083850312156151c557600080fd5b82356151d081614876565b946020939093013593505050565b600080600080608085870312156151f457600080fd5b84356151ff81614876565b935060208501359250604085013561521681614876565b9396929550929360600135925050565b600081518084526020808501945080840160005b8381101561515f5781516001600160a01b03168752958201959082019060010161523a565b6040815260006152726040830185615226565b8281036020840152611220818561512f565b60008060006060848603121561529957600080fd5b83356152a481614876565b925060208401356001600160401b038111156152bf57600080fd5b6152cb86828701614fa8565b925050604084013590509250925092565b6000606082840312156152ee57600080fd5b614a03838361493a565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156153385761533861530e565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e1983360301811261538c57600080fd5b9190910192915050565b6000808335601e198436030181126153ad57600080fd5b8301803591506001600160401b038211156153c757600080fd5b6020019150600581901b360382131561450957600080fd5b6060810182356153ee81614876565b6001600160a01b03908116835260208401359061540a82614876565b166020830152604083013561541e81614ca8565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561547257600080fd5b8151614a0381614876565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561553657600080fd5b8151614a0381614ed2565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de1983360301811261538c57600080fd5b6000602082840312156155b157600080fd5b8135614a0381614ed2565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261561760e0850182615226565b905060c083015184820360c0860152611220828261512f565b602081526000614a0360208301846155bc565b60006020828403121561565557600080fd5b5051919050565b600082601f83011261566d57600080fd5b8151602061567d614d0983614cc5565b82815260059290921b8401810191818101908684111561569c57600080fd5b8286015b84811015614d5157805183529183019183016156a0565b600080604083850312156156ca57600080fd5b82516001600160401b03808211156156e157600080fd5b818501915085601f8301126156f557600080fd5b81516020615705614d0983614cc5565b82815260059290921b8401810191818101908984111561572457600080fd5b948201945b8386101561574b57855161573c81614876565b82529482019490820190615729565b9188015191965090935050508082111561576457600080fd5b506151258582860161565c565b600082198211156157845761578461530e565b500190565b60008282101561579b5761579b61530e565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000614ea760408301846155bc565b6000602082840312156157ef57600080fd5b8135614a0381614ca8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561582581614876565b61582f81836157fa565b5060018101602083013561584281614876565b61584c81836157fa565b50604083013561585b81614ca8565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006158893683614db7565b92915050565b6020808252606e908201526000805160206159b583398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b8181101561594b5785810183015185820160600152820161592f565b8181111561595d576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561598657600080fd5b81516001600160e01b031981168114614a0357600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a26469706673582212204f8ba68b8a28e3effef34dcfd60594e2fbd9e919cbab8917dc02c14df97507da64736f6c634300080c0033", } // DelegationManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenPodManager/binding.go b/pkg/bindings/EigenPodManager/binding.go index 3d1d31267..0ce5fc722 100644 --- a/pkg/bindings/EigenPodManager/binding.go +++ b/pkg/bindings/EigenPodManager/binding.go @@ -32,7 +32,7 @@ var ( // 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\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620031693803806200316983398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e05161010051612f286200024160003960008181610551015281816105fb01528181610b7901528181611313015281816117bf01526118af015260006104dd015260006102cf015260008181610263015281816112920152611e64015260006103af0152612f286000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b1461053f578063f2fde38b14610573578063f6848d2414610593578063fabc1cbc146105ce57600080fd5b8063b1344271146104cb578063beffbb89146104ff578063c2c51c401461051f57600080fd5b80639b4e4634116100c65780639b4e46341461044c5780639ba062751461045f578063a38406a314610495578063a6a509be146104b557600080fd5b8063886f1195146103e65780638da5cb5b146104065780639104c3191461042457600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461035b578063715018a61461038857806374cdd7981461039d57806384d81062146103d157600080fd5b8063595c6a67146102f15780635ac86ab7146103065780635c975abb1461034657600080fd5b80631794bb3c116101955780631794bb3c14610231578063292b7b2b14610251578063387b13001461029d57806339b70e38146102bd57600080fd5b80630e81073c146101bc57806310d67a2f146101ef578063136439dd14610211575b600080fd5b3480156101c857600080fd5b506101dc6101d73660046120fc565b6105ee565b6040519081526020015b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004612128565b61085d565b005b34801561021d57600080fd5b5061020f61022c366004612145565b610910565b34801561023d57600080fd5b5061020f61024c36600461215e565b610a4f565b34801561025d57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e6565b3480156102a957600080fd5b5061020f6102b836600461215e565b610b6e565b3480156102c957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fd57600080fd5b5061020f610f82565b34801561031257600080fd5b5061033661032136600461219f565b606654600160ff9092169190911b9081161490565b60405190151581526020016101e6565b34801561035257600080fd5b506066546101dc565b34801561036757600080fd5b506101dc610376366004612128565b609b6020526000908152604090205481565b34801561039457600080fd5b5061020f611049565b3480156103a957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b5061028561105d565b3480156103f257600080fd5b50606554610285906001600160a01b031681565b34801561041257600080fd5b506033546001600160a01b0316610285565b34801561043057600080fd5b5061028573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61020f61045a36600461220b565b611147565b34801561046b57600080fd5b5061028561047a366004612128565b6098602052600090815260409020546001600160a01b031681565b3480156104a157600080fd5b506102856104b0366004612128565b611236565b3480156104c157600080fd5b506101dc60995481565b3480156104d757600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061020f61051a3660046120fc565b611308565b34801561052b57600080fd5b5061020f61053a3660046120fc565b611547565b34801561054b57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b5061020f61058e366004612128565b61197b565b34801561059f57600080fd5b506103366105ae366004612128565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105da57600080fd5b5061020f6105e9366004612145565b6119f1565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106415760405162461bcd60e51b81526004016106389061227f565b60405180910390fd5b6001600160a01b0383166106bd5760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f20616464726573730000000000006064820152608401610638565b600082121561072b5760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b6064820152608401610638565b610739633b9aca00836122f3565b156107ac5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e740000006064820152608401610638565b6001600160a01b0383166000908152609b6020526040812054906107d0848361231d565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020612eb38339815191529061080f9087815260200190565b60405180910390a2846001600160a01b03166000805160206125858339815191528260405161084091815260200190565b60405180910390a26108528282611b4d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d4919061235e565b6001600160a01b0316336001600160a01b0316146109045760405162461bcd60e51b81526004016106389061237b565b61090d81611b8f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097c91906123c5565b6109985760405162461bcd60e51b8152600401610638906123e7565b60665481811614610a115760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610638565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff1615808015610a6f5750600054600160ff909116105b80610a895750303b158015610a89575060005460ff166001145b610aec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610638565b6000805460ff191660011790558015610b0f576000805461ff0019166101001790555b610b1884611c86565b610b228383611cd8565b8015610b68576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bb65760405162461bcd60e51b81526004016106389061227f565b6001600160a01b038316610c305760405162461bcd60e51b81526020600482015260476024820152600080516020612ed383398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a401610638565b6001600160a01b038216610cad5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ed383398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a401610638565b6000811215610d1c5760405162461bcd60e51b81526020600482015260416024820152600080516020612ed383398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a401610638565b610d2a633b9aca00826122f3565b15610d9e5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ed383398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a401610638565b6001600160a01b0383166000908152609b602052604081205490811215610f07576000610dca8261242f565b905080831115610e61576001600160a01b0385166000908152609b6020526040812055610df7818461244c565b9250846001600160a01b0316600080516020612eb383398151915282604051610e2291815260200190565b60405180910390a2846001600160a01b03166000805160206125858339815191526000604051610e5491815260200190565b60405180910390a2610f05565b6001600160a01b0385166000908152609b6020526040812054610e8590859061231d565b6001600160a01b0387166000818152609b6020526040908190208390555191925090600080516020612eb383398151915290610ec49087815260200190565b60405180910390a2856001600160a01b031660008051602061258583398151915282604051610ef591815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610f6457600080fd5b505af1158015610f78573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fee91906123c5565b61100a5760405162461bcd60e51b8152600401610638906123e7565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611051611dc2565b61105b6000611c86565b565b6066546000908190600190811614156110b45760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610638565b336000908152609860205260409020546001600160a01b0316156111365760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b6064820152608401610638565b6000611140611e1c565b9250505090565b6066546000906001908116141561119c5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610638565b336000908152609860205260409020546001600160a01b0316806111c5576111c2611e1c565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906111fb908b908b908b908b908b9060040161248c565b6000604051808303818588803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061085757611301836001600160a01b031660001b60405180610940016040528061090e81526020016125a561090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f19818403018152908290526112e69291602001612501565b60405160208183030381529060405280519060200120611f81565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113505760405162461bcd60e51b81526004016106389061227f565b60008112156113c75760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e656761746976650000000000000000006064820152608401610638565b6113d5633b9aca00826122f3565b1561144a576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e746064820152608401610638565b6001600160a01b0382166000908152609b602052604081205461146e908390612516565b905060008112156114ff5760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a401610638565b6001600160a01b0383166000818152609b602052604090819020839055516000805160206125858339815191529061153a9084815260200190565b60405180910390a2505050565b6001600160a01b0380831660009081526098602052604090205483911633146115c25760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b6064820152608401610638565b600260c95414156116155760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610638565b600260c9556001600160a01b0383166116b15760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a401610638565b6116bf633b9aca0083612555565b156117585760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a401610638565b6001600160a01b0383166000908152609b60205260408120549061177c848361231d565b6001600160a01b0386166000908152609b602052604081208290559091506117a48383611b4d565b9050801561190c57600081121561186f576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118038561242f565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561185257600080fd5b505af1158015611866573d6000803e3d6000fd5b5050505061190c565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156118f357600080fd5b505af1158015611907573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020612eb38339815191528660405161193591815260200190565b60405180910390a2856001600160a01b03166000805160206125858339815191528360405161196691815260200190565b60405180910390a25050600160c95550505050565b611983611dc2565b6001600160a01b0381166119e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610638565b61090d81611c86565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a68919061235e565b6001600160a01b0316336001600160a01b031614611a985760405162461bcd60e51b81526004016106389061237b565b606654198119606654191614611b165760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610638565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610a44565b6000808313611b6d5760008213611b6657506000610857565b5080610857565b60008213611b8557611b7e8361242f565b9050610857565b611b7e8383612516565b6001600160a01b038116611c1d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610638565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b0316158015611cf957506001600160a01b03821615155b611d7b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610638565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611dbe82611b8f565b5050565b6033546001600160a01b0316331461105b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000609960008154611e2d90612569565b9091555060408051610940810190915261090e808252600091611ecc91839133916125a56020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052611eb89291602001612501565b604051602081830303815290604052611fdd565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b158015611f1057600080fd5b505af1158015611f24573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090611301565b600080844710156120305760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610638565b825161207e5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610638565b8383516020850187f590506001600160a01b0381166120df5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610638565b949350505050565b6001600160a01b038116811461090d57600080fd5b6000806040838503121561210f57600080fd5b823561211a816120e7565b946020939093013593505050565b60006020828403121561213a57600080fd5b8135611301816120e7565b60006020828403121561215757600080fd5b5035919050565b60008060006060848603121561217357600080fd5b833561217e816120e7565b9250602084013561218e816120e7565b929592945050506040919091013590565b6000602082840312156121b157600080fd5b813560ff8116811461130157600080fd5b60008083601f8401126121d457600080fd5b50813567ffffffffffffffff8111156121ec57600080fd5b60208301915083602082850101111561220457600080fd5b9250929050565b60008060008060006060868803121561222357600080fd5b853567ffffffffffffffff8082111561223b57600080fd5b61224789838a016121c2565b9097509550602088013591508082111561226057600080fd5b5061226d888289016121c2565b96999598509660400135949350505050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612302576123026122dd565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b038490038513161561233f5761233f612307565b600160ff1b839003841281161561235857612358612307565b50500190565b60006020828403121561237057600080fd5b8151611301816120e7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156123d757600080fd5b8151801515811461130157600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b82141561244557612445612307565b5060000390565b60008282101561245e5761245e612307565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006124a0606083018789612463565b82810360208401526124b3818688612463565b9150508260408301529695505050505050565b6000815160005b818110156124e757602081850181015186830152016124cd565b818111156124f6576000828601525b509290920192915050565b60006120df61251083866124c6565b846124c6565b60008083128015600160ff1b85018412161561253457612534612307565b6001600160ff1b038401831381161561254f5761254f612307565b50500390565b600082612564576125646122dd565b500790565b600060001982141561257d5761257d612307565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220ab15fe92e05748fd03441d98a7837905194deb492a89f580b320661f7cb8204164736f6c634300080c0033", + Bin: "0x6101206040523480156200001257600080fd5b50604051620034e7380380620034e783398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e051610100516132a66200024160003960008181610636015281816106e001528181610b0e015281816113e70152818161187c015261196c01526000610542015260006102e601526000818161027a01528181611366015261203a0152600061041401526132a66000f3fe6080604052600436106101ee5760003560e01c80638da5cb5b1161010d578063c052bd61116100a0578063d1c64cc91161006f578063d1c64cc914610604578063ea4d3c9b14610624578063f2fde38b14610658578063f6848d2414610678578063fabc1cbc146106b357600080fd5b8063c052bd6114610584578063c1de3aef146105a4578063c2c51c40146105c4578063cf756fdf146105e457600080fd5b8063a38406a3116100dc578063a38406a3146104fa578063a6a509be1461051a578063b134427114610530578063beffbb891461056457600080fd5b80638da5cb5b1461046b5780639104c319146104895780639b4e4634146104b15780639ba06275146104c457600080fd5b8063595c6a6711610185578063715018a611610154578063715018a6146103ed57806374cdd7981461040257806384d8106214610436578063886f11951461044b57600080fd5b8063595c6a67146103565780635ac86ab71461036b5780635c975abb146103ab57806360f4062b146103c057600080fd5b8063387b1300116101c1578063387b1300146102b457806339b70e38146102d457806344e71c8014610308578063463db0381461033657600080fd5b80630e81073c146101f357806310d67a2f14610226578063136439dd14610248578063292b7b2b14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612406565b6106d3565b6040519081526020015b60405180910390f35b34801561023257600080fd5b50610246610241366004612432565b610911565b005b34801561025457600080fd5b5061024661026336600461244f565b6109c4565b34801561027457600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161021d565b3480156102c057600080fd5b506102466102cf366004612468565b610b03565b3480156102e057600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031457600080fd5b5061031d610ea1565b60405167ffffffffffffffff909116815260200161021d565b34801561034257600080fd5b506102466103513660046124a9565b610eca565b34801561036257600080fd5b50610246611056565b34801561037757600080fd5b5061039b6103863660046124d3565b606654600160ff9092169190911b9081161490565b604051901515815260200161021d565b3480156103b757600080fd5b50606654610213565b3480156103cc57600080fd5b506102136103db366004612432565b609b6020526000908152604090205481565b3480156103f957600080fd5b5061024661111d565b34801561040e57600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044257600080fd5b5061029c611131565b34801561045757600080fd5b5060655461029c906001600160a01b031681565b34801561047757600080fd5b506033546001600160a01b031661029c565b34801561049557600080fd5b5061029c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102466104bf36600461253f565b61121b565b3480156104d057600080fd5b5061029c6104df366004612432565b6098602052600090815260409020546001600160a01b031681565b34801561050657600080fd5b5061029c610515366004612432565b61130a565b34801561052657600080fd5b5061021360995481565b34801561053c57600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561057057600080fd5b5061024661057f366004612406565b6113dc565b34801561059057600080fd5b5060975461029c906001600160a01b031681565b3480156105b057600080fd5b506102466105bf366004612432565b6115f3565b3480156105d057600080fd5b506102466105df366004612406565b611604565b3480156105f057600080fd5b506102466105ff3660046125b3565b611a07565b34801561061057600080fd5b5061021361061f3660046124a9565b611b30565b34801561063057600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066457600080fd5b50610246610673366004612432565b611c3b565b34801561068457600080fd5b5061039b610693366004612432565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106bf57600080fd5b506102466106ce36600461244f565b611cb1565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107265760405162461bcd60e51b815260040161071d90612604565b60405180910390fd5b6001600160a01b0383166107a25760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161071d565b60008212156108105760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161071d565b61081e633b9aca0083612678565b156108915760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161071d565b6001600160a01b0383166000908152609b6020526040812054906108b584836126a2565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020613231833981519152906108f49087815260200190565b60405180910390a26109068282611e0d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906126e3565b6001600160a01b0316336001600160a01b0316146109b85760405162461bcd60e51b815260040161071d90612700565b6109c181611e4f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061274a565b610a4c5760405162461bcd60e51b815260040161071d9061276c565b60665481811614610ac55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b4b5760405162461bcd60e51b815260040161071d90612604565b6001600160a01b038316610bc55760405162461bcd60e51b8152602060048201526047602482015260008051602061325183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161071d565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161071d565b6000811215610cb15760405162461bcd60e51b8152602060048201526041602482015260008051602061325183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161071d565b610cbf633b9aca0082612678565b15610d335760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161071d565b6001600160a01b0383166000908152609b602052604081205490811215610e26576000610d5f826127b4565b905080831115610dc4576001600160a01b0385166000908152609b6020526040812055610d8c81846127d1565b9250846001600160a01b031660008051602061323183398151915282604051610db791815260200190565b60405180910390a2610e24565b6001600160a01b0385166000908152609b602052604081208054859290610dec9084906126a2565b90915550506040518381526001600160a01b038616906000805160206132318339815191529060200160405180910390a25050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b5050505050505050565b609c5460009067ffffffffffffffff1680610ec55767ffffffffffffffff91505090565b919050565b610ed2611f46565b67ffffffffffffffff8116610f645760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f7420736574206e657744656e6562466f726b546960648201526b06d657374616d7020746f20360a41b608482015260a40161071d565b609c5467ffffffffffffffff16156110005760405162461bcd60e51b815260206004820152605360248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f74207365742064656e6562466f726b54696d657360648201527274616d70206d6f7265207468616e206f6e636560681b608482015260a40161071d565b609c805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527f19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db9060200160405180910390a150565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c2919061274a565b6110de5760405162461bcd60e51b815260040161071d9061276c565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611125611f46565b61112f6000611fa0565b565b6066546000908190600190811614156111885760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03161561120a5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161071d565b6000611214611ff2565b9250505090565b606654600090600190811614156112705760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03168061129957611296611ff2565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906112cf908b908b908b908b908b90600401612811565b6000604051808303818588803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061090b576113d5836001600160a01b031660001b60405180610940016040528061090e815260200161292361090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f19818403018152908290526113ba9291602001612886565b60405160208183030381529060405280519060200120612157565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114245760405162461bcd60e51b815260040161071d90612604565b600081121561149b5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161071d565b6114a9633b9aca0082612678565b1561151e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161071d565b6001600160a01b0382166000908152609b602052604081205461154290839061289b565b905060008112156115d35760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161071d565b6001600160a01b039092166000908152609b602052604090209190915550565b6115fb611f46565b6109c1816121b3565b6001600160a01b03808316600090815260986020526040902054839116331461167f5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161071d565b600260c95414156116d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b600260c9556001600160a01b03831661176e5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161071d565b61177c633b9aca00836128da565b156118155760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161071d565b6001600160a01b0383166000908152609b60205260408120549061183984836126a2565b6001600160a01b0386166000908152609b602052604081208290559091506118618383611e0d565b905080156119c957600081121561192c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118c0856127b4565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b505050506119c9565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020613231833981519152866040516119f291815260200190565b60405180910390a25050600160c95550505050565b600054610100900460ff1615808015611a275750600054600160ff909116105b80611a415750303b158015611a41575060005460ff166001145b611aa45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071d565b6000805460ff191660011790558015611ac7576000805461ff0019166101001790555b611ad0856121b3565b611ad984611fa0565b611ae383836121fd565b8015611b29576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa158015611b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bab91906128ee565b90508061090b5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a40161071d565b611c43611f46565b6001600160a01b038116611ca85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071d565b6109c181611fa0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2891906126e3565b6001600160a01b0316336001600160a01b031614611d585760405162461bcd60e51b815260040161071d90612700565b606654198119606654191614611dd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610af8565b6000808313611e2d5760008213611e265750600061090b565b508061090b565b60008213611e4557611e3e836127b4565b905061090b565b611e3e838361289b565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161071d565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461112f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060996000815461200390612907565b9091555060408051610940810190915261090e8082526000916120a291839133916129236020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f198184030181529082905261208e9291602001612886565b6040516020818303038152906040526122e7565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906113d5565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561221e57506001600160a01b03821615155b6122a05760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26122e382611e4f565b5050565b6000808447101561233a5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161071d565b82516123885760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161071d565b8383516020850187f590506001600160a01b0381166123e95760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161071d565b949350505050565b6001600160a01b03811681146109c157600080fd5b6000806040838503121561241957600080fd5b8235612424816123f1565b946020939093013593505050565b60006020828403121561244457600080fd5b81356113d5816123f1565b60006020828403121561246157600080fd5b5035919050565b60008060006060848603121561247d57600080fd5b8335612488816123f1565b92506020840135612498816123f1565b929592945050506040919091013590565b6000602082840312156124bb57600080fd5b813567ffffffffffffffff811681146113d557600080fd5b6000602082840312156124e557600080fd5b813560ff811681146113d557600080fd5b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b60208301915083602082850101111561253857600080fd5b9250929050565b60008060008060006060868803121561255757600080fd5b853567ffffffffffffffff8082111561256f57600080fd5b61257b89838a016124f6565b9097509550602088013591508082111561259457600080fd5b506125a1888289016124f6565b96999598509660400135949350505050565b600080600080608085870312156125c957600080fd5b84356125d4816123f1565b935060208501356125e4816123f1565b925060408501356125f4816123f1565b9396929550929360600135925050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261268757612687612662565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126c4576126c461268c565b600160ff1b83900384128116156126dd576126dd61268c565b50500190565b6000602082840312156126f557600080fd5b81516113d5816123f1565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561275c57600080fd5b815180151581146113d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127ca576127ca61268c565b5060000390565b6000828210156127e3576127e361268c565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006128256060830187896127e8565b82810360208401526128388186886127e8565b9150508260408301529695505050505050565b6000815160005b8181101561286c5760208185018101518683015201612852565b8181111561287b576000828601525b509290920192915050565b60006123e9612895838661284b565b8461284b565b60008083128015600160ff1b8501841216156128b9576128b961268c565b6001600160ff1b03840183138116156128d4576128d461268c565b50500390565b6000826128e9576128e9612662565b500790565b60006020828403121561290057600080fd5b5051919050565b600060001982141561291b5761291b61268c565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a264697066735822122004d8740e0cf9e5496208917d8d4cc564f420a5881e787d21f37ecebe90895cee64736f6c634300080c0033", } // EigenPodManagerABI 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 baafb9a34..3711fcb9c 100644 --- a/pkg/bindings/IAVSDirectory/binding.go +++ b/pkg/bindings/IAVSDirectory/binding.go @@ -29,12 +29,6 @@ var ( _ = abi.ConvertType ) -// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 -} - // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -44,7 +38,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry 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\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getNumOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetsOfOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"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\":\"operatorSetMemberAtIndex\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOfAtIndex\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false}]", + 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\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"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\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"isLegacyOperator\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false}]", } // IAVSDirectoryABI is the input ABI used to generate the binding from. @@ -286,37 +280,6 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorAVSRegistrati return _IAVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_IAVSDirectory.CallOpts, operator, avs, salt, expiry) } -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectorySession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _IAVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) -} - -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _IAVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) -} - // CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. // // Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -348,6 +311,7 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorSetRegistrati return _IAVSDirectory.Contract.CalculateOperatorSetRegistrationDigestHash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) } +<<<<<<< HEAD // DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. // // Solidity: function domainSeparator() view returns(bytes32) @@ -596,6 +560,8 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) IsOperatorSetAVS(avs common.Ad return _IAVSDirectory.Contract.IsOperatorSetAVS(&_IAVSDirectory.CallOpts, avs) } +======= +>>>>>>> ce94473c (feat: operator commission bips (#627)) // OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // // Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) @@ -627,6 +593,7 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSaltIsSpent(operator c return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) } +<<<<<<< HEAD // OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. // // Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) @@ -752,6 +719,8 @@ func (_IAVSDirectory *IAVSDirectoryTransactorSession) CreateOperatorSets(operato return _IAVSDirectory.Contract.CreateOperatorSets(&_IAVSDirectory.TransactOpts, operatorSetIds) } +======= +>>>>>>> ce94473c (feat: operator commission bips (#627)) // DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // // Solidity: function deregisterOperatorFromAVS(address operator) returns() @@ -794,48 +763,6 @@ func (_IAVSDirectory *IAVSDirectoryTransactorSession) DeregisterOperatorFromOper return _IAVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds) } -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectorySession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectorySession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_IAVSDirectory.TransactOpts, operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_IAVSDirectory.TransactOpts, operators, operatorSetIds) -} - // RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // // Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() @@ -859,23 +786,23 @@ func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToAVS(oper // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, operatorSignature) +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, signature) } // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() +func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, signature) } // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, signature) } // UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. @@ -1044,150 +971,6 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log type return event, nil } -// IAVSDirectoryAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the IAVSDirectory contract. -type IAVSDirectoryAVSMigratedToOperatorSetsIterator struct { - Event *IAVSDirectoryAVSMigratedToOperatorSets // 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 *IAVSDirectoryAVSMigratedToOperatorSetsIterator) 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(IAVSDirectoryAVSMigratedToOperatorSets) - 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(IAVSDirectoryAVSMigratedToOperatorSets) - 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 *IAVSDirectoryAVSMigratedToOperatorSetsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryAVSMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the IAVSDirectory contract. -type IAVSDirectoryAVSMigratedToOperatorSets struct { - Avs common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*IAVSDirectoryAVSMigratedToOperatorSetsIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) - if err != nil { - return nil, err - } - return &IAVSDirectoryAVSMigratedToOperatorSetsIterator{contract: _IAVSDirectory.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil -} - -// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", 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(IAVSDirectoryAVSMigratedToOperatorSets) - if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", 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 -} - -// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*IAVSDirectoryAVSMigratedToOperatorSets, error) { - event := new(IAVSDirectoryAVSMigratedToOperatorSets) - if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the IAVSDirectory contract. type IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { Event *IAVSDirectoryOperatorAVSRegistrationStatusUpdated // Event containing the contract specifics and raw log @@ -1257,15 +1040,15 @@ func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() err // IAVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the IAVSDirectory contract. type IAVSDirectoryOperatorAVSRegistrationStatusUpdated struct { - Operator common.Address - Avs common.Address - Status uint8 - Raw types.Log // Blockchain specific contextual infos + Operator common.Address + Avs common.Address + IsLegacyOperator bool + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { var operatorRule []interface{} @@ -1284,9 +1067,9 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAVSRegistrationStatus return &IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _IAVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil } -// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { var operatorRule []interface{} @@ -1330,9 +1113,9 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusU }), nil } -// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { event := new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { @@ -1411,39 +1194,30 @@ func (it *IAVSDirectoryOperatorAddedToOperatorSetIterator) Close() error { // IAVSDirectoryOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the IAVSDirectory contract. type IAVSDirectoryOperatorAddedToOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - Raw types.Log // Blockchain specific contextual infos + Operator common.Address + Avs common.Address + OperatorSetId uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAddedToOperatorSet is a free log retrieval operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// FilterOperatorAddedToOperatorSet is a free log retrieval operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. // -// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*IAVSDirectoryOperatorAddedToOperatorSetIterator, error) { +// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts) (*IAVSDirectoryOperatorAddedToOperatorSetIterator, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet") if err != nil { return nil, err } return &IAVSDirectoryOperatorAddedToOperatorSetIterator{contract: _IAVSDirectory.contract, event: "OperatorAddedToOperatorSet", logs: logs, sub: sub}, nil } -// WatchOperatorAddedToOperatorSet is a free log subscription operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// WatchOperatorAddedToOperatorSet is a free log subscription operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. // -// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } +// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAddedToOperatorSet) (event.Subscription, error) { - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorAddedToOperatorSet") if err != nil { return nil, err } @@ -1475,9 +1249,9 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opt }), nil } -// ParseOperatorAddedToOperatorSet is a log parse operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// ParseOperatorAddedToOperatorSet is a log parse operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. // -// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) +// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*IAVSDirectoryOperatorAddedToOperatorSet, error) { event := new(IAVSDirectoryOperatorAddedToOperatorSet) if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { @@ -1487,160 +1261,6 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log return event, nil } -// IAVSDirectoryOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorMigratedToOperatorSetsIterator struct { - Event *IAVSDirectoryOperatorMigratedToOperatorSets // 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 *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) 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(IAVSDirectoryOperatorMigratedToOperatorSets) - 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(IAVSDirectoryOperatorMigratedToOperatorSets) - 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 *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorMigratedToOperatorSets struct { - Operator common.Address - Avs common.Address - OperatorSetIds []uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*IAVSDirectoryOperatorMigratedToOperatorSetsIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) - if err != nil { - return nil, err - } - return &IAVSDirectoryOperatorMigratedToOperatorSetsIterator{contract: _IAVSDirectory.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil -} - -// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, 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(IAVSDirectoryOperatorMigratedToOperatorSets) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", 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 -} - -// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*IAVSDirectoryOperatorMigratedToOperatorSets, error) { - event := new(IAVSDirectoryOperatorMigratedToOperatorSets) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // IAVSDirectoryOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the IAVSDirectory contract. type IAVSDirectoryOperatorRemovedFromOperatorSetIterator struct { Event *IAVSDirectoryOperatorRemovedFromOperatorSet // Event containing the contract specifics and raw log @@ -1710,39 +1330,30 @@ func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Close() error { // IAVSDirectoryOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the IAVSDirectory contract. type IAVSDirectoryOperatorRemovedFromOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - Raw types.Log // Blockchain specific contextual infos + Operator common.Address + Avs common.Address + OperatorSetId uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*IAVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } +// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts) (*IAVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet") if err != nil { return nil, err } return &IAVSDirectoryOperatorRemovedFromOperatorSetIterator{contract: _IAVSDirectory.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil } -// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { +// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorRemovedFromOperatorSet) (event.Subscription, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet") if err != nil { return nil, err } @@ -1774,9 +1385,9 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet }), nil } -// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*IAVSDirectoryOperatorRemovedFromOperatorSet, error) { event := new(IAVSDirectoryOperatorRemovedFromOperatorSet) if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { @@ -1785,137 +1396,3 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet event.Raw = log return event, nil } - -// IAVSDirectoryOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorSetCreatedIterator struct { - Event *IAVSDirectoryOperatorSetCreated // 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 *IAVSDirectoryOperatorSetCreatedIterator) 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(IAVSDirectoryOperatorSetCreated) - 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(IAVSDirectoryOperatorSetCreated) - 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 *IAVSDirectoryOperatorSetCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryOperatorSetCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryOperatorSetCreated represents a OperatorSetCreated event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorSetCreated struct { - OperatorSet IAVSDirectoryOperatorSet - 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 (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*IAVSDirectoryOperatorSetCreatedIterator, error) { - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorSetCreated") - if err != nil { - return nil, err - } - return &IAVSDirectoryOperatorSetCreatedIterator{contract: _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorSetCreated) (event.Subscription, error) { - - logs, sub, err := _IAVSDirectory.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(IAVSDirectoryOperatorSetCreated) - if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorSetCreated(log types.Log) (*IAVSDirectoryOperatorSetCreated, error) { - event := new(IAVSDirectoryOperatorSetCreated) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/pkg/bindings/IRewardsCoordinator/binding.go b/pkg/bindings/IRewardsCoordinator/binding.go index f19f93005..87ae5a84e 100644 --- a/pkg/bindings/IRewardsCoordinator/binding.go +++ b/pkg/bindings/IRewardsCoordinator/binding.go @@ -31,8 +31,8 @@ var ( // IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 + Avs common.Address + Id uint32 } // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. @@ -49,17 +49,6 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } -// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. -type IRewardsCoordinatorOperatorSetRewardsSubmission struct { - RewardType uint8 - OperatorSetId uint32 - StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier - Token common.Address - Amount *big.Int - StartTimestamp uint32 - Duration uint32 -} - // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -94,7 +83,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", + 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", } // IRewardsCoordinatorABI is the input ABI used to generate the binding from. @@ -615,37 +604,6 @@ func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) CurrRewardsCalcula return _IRewardsCoordinator.Contract.CurrRewardsCalculationEndTimestamp(&_IRewardsCoordinator.CallOpts) } -// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. -// -// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) -func (_IRewardsCoordinator *IRewardsCoordinatorCaller) GetCurrentClaimableDistributionRoot(opts *bind.CallOpts) (IRewardsCoordinatorDistributionRoot, error) { - var out []interface{} - err := _IRewardsCoordinator.contract.Call(opts, &out, "getCurrentClaimableDistributionRoot") - - if err != nil { - return *new(IRewardsCoordinatorDistributionRoot), err - } - - out0 := *abi.ConvertType(out[0], new(IRewardsCoordinatorDistributionRoot)).(*IRewardsCoordinatorDistributionRoot) - - return out0, err - -} - -// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. -// -// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) -func (_IRewardsCoordinator *IRewardsCoordinatorSession) GetCurrentClaimableDistributionRoot() (IRewardsCoordinatorDistributionRoot, error) { - return _IRewardsCoordinator.Contract.GetCurrentClaimableDistributionRoot(&_IRewardsCoordinator.CallOpts) -} - -// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. -// -// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) -func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) GetCurrentClaimableDistributionRoot() (IRewardsCoordinatorDistributionRoot, error) { - return _IRewardsCoordinator.Contract.GetCurrentClaimableDistributionRoot(&_IRewardsCoordinator.CallOpts) -} - // GetCurrentDistributionRoot is a free data retrieval call binding the contract method 0x9be3d4e4. // // Solidity: function getCurrentDistributionRoot() view returns((bytes32,uint32,uint32,bool)) @@ -978,27 +936,6 @@ func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) ProcessClaim(c return _IRewardsCoordinator.Contract.ProcessClaim(&_IRewardsCoordinator.TransactOpts, claim, recipient) } -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_IRewardsCoordinator *IRewardsCoordinatorTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _IRewardsCoordinator.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_IRewardsCoordinator *IRewardsCoordinatorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _IRewardsCoordinator.Contract.RewardOperatorSetForRange(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _IRewardsCoordinator.Contract.RewardOperatorSetForRange(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) -} - // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -2204,169 +2141,6 @@ func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseOperatorCommission return event, nil } -// IRewardsCoordinatorOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the IRewardsCoordinator contract. -type IRewardsCoordinatorOperatorSetRewardCreatedIterator struct { - Event *IRewardsCoordinatorOperatorSetRewardCreated // 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 *IRewardsCoordinatorOperatorSetRewardCreatedIterator) 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(IRewardsCoordinatorOperatorSetRewardCreated) - 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(IRewardsCoordinatorOperatorSetRewardCreated) - 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 *IRewardsCoordinatorOperatorSetRewardCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IRewardsCoordinatorOperatorSetRewardCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IRewardsCoordinatorOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the IRewardsCoordinator contract. -type IRewardsCoordinatorOperatorSetRewardCreated struct { - Avs common.Address - SubmissionNonce *big.Int - RewardsSubmissionHash [32]byte - RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*IRewardsCoordinatorOperatorSetRewardCreatedIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _IRewardsCoordinator.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) - if err != nil { - return nil, err - } - return &IRewardsCoordinatorOperatorSetRewardCreatedIterator{contract: _IRewardsCoordinator.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil -} - -// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *IRewardsCoordinatorOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _IRewardsCoordinator.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) - 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(IRewardsCoordinatorOperatorSetRewardCreated) - if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", 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 -} - -// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseOperatorSetRewardCreated(log types.Log) (*IRewardsCoordinatorOperatorSetRewardCreated, error) { - event := new(IRewardsCoordinatorOperatorSetRewardCreated) - if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // IRewardsCoordinatorRewardsClaimedIterator is returned from FilterRewardsClaimed and is used to iterate over the raw logs and unpacked data for RewardsClaimed events raised by the IRewardsCoordinator contract. type IRewardsCoordinatorRewardsClaimedIterator struct { Event *IRewardsCoordinatorRewardsClaimed // Event containing the contract specifics and raw log diff --git a/pkg/bindings/RewardsCoordinator/binding.go b/pkg/bindings/RewardsCoordinator/binding.go index 2882e2bb5..05cd59c15 100644 --- a/pkg/bindings/RewardsCoordinator/binding.go +++ b/pkg/bindings/RewardsCoordinator/binding.go @@ -31,8 +31,8 @@ var ( // IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 + Avs common.Address + Id uint32 } // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. @@ -49,17 +49,6 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } -// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. -type IRewardsCoordinatorOperatorSetRewardsSubmission struct { - RewardType uint8 - OperatorSetId uint32 - StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier - Token common.Address - Amount *big.Int - StartTimestamp uint32 - Duration uint32 -} - // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -94,8 +83,8 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf struct { // RewardsCoordinatorMetaData contains all meta data concerning the RewardsCoordinator contract. var RewardsCoordinatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"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\":\"_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", - Bin: "0x6101e06040523480156200001257600080fd5b506040516200511f3803806200511f8339810160408190526200003591620003c0565b898989898989898989896200004b878462000497565b63ffffffff1615620000f05760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b620000ff620151808862000497565b63ffffffff1615620001a05760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a401620000e7565b620001ac878362000497565b63ffffffff1615620002635760405162461bcd60e51b815260206004820152606d60248201527f52657761726473436f6f7264696e61746f723a204f50455241544f525f53455460448201527f5f47454e455349535f524557415244535f54494d455354414d50206d7573742060648201527f62652061206d756c7469706c65206f662043414c43554c4154494f4e5f494e5460848201526c455256414c5f5345434f4e445360981b60a482015260c401620000e7565b6001600160a01b03998a166101605297891661018052959097166101a05263ffffffff93841660805291831660a052821661010052811660c05292831660e0528216610120521661014052620002b8620002ce565b5050466101c05250620004c99650505050505050565b600054610100900460ff1615620003385760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000e7565b60005460ff90811610156200038b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620003a357600080fd5b50565b805163ffffffff81168114620003bb57600080fd5b919050565b6000806000806000806000806000806101408b8d031215620003e157600080fd5b8a51620003ee816200038d565b60208c0151909a5062000401816200038d565b60408c015190995062000414816200038d565b97506200042460608c01620003a6565b96506200043460808c01620003a6565b95506200044460a08c01620003a6565b94506200045460c08c01620003a6565b93506200046460e08c01620003a6565b9250620004756101008c01620003a6565b9150620004866101208c01620003a6565b90509295989b9194979a5092959850565b600063ffffffff80841680620004bd57634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614b896200059660003960006124e80152600081816106970152610e1c01526000818161059d01526130d9015260006108e801526000818161053c0152610f930152600081816108750152610fb4015260008181610576015261124701526000818161048d01526112680152600081816103b90152612fd601526000818161080d0152612cda0152600081816107b301528181612d8a0152612e540152614b896000f3fe608060405234801561001057600080fd5b50600436106103775760003560e01c8063715018a6116101d3578063c46db60611610104578063f2fde38b116100a2578063f96abf2e1161007c578063f96abf2e14610938578063fabc1cbc1461094b578063fbf1e2c11461095e578063fce36c7d1461097157600080fd5b8063f2fde38b1461090a578063f698da251461091d578063f8cd84481461092557600080fd5b8063de02e503116100de578063de02e503146108aa578063e221b245146108bd578063e810ce21146108d0578063ea4d3c9b146108e357600080fd5b8063c46db60614610842578063d11e9ae514610870578063d4540a551461089757600080fd5b80639104c31911610171578063a0169ddd1161014b578063a0169ddd146107d5578063bb7e451f146107e8578063bf21a8aa14610808578063c336f19d1461082f57600080fd5b80639104c3191461078b5780639be3d4e4146107a65780639d45c281146107ae57600080fd5b8063863cb9a9116101ad578063863cb9a914610729578063865c69531461073c578063886f1195146107675780638da5cb5b1461077a57600080fd5b8063715018a6146106e75780637adace91146106ef5780637b8f8b051461072157600080fd5b806339b70e38116102ad57806358baaa3e1161024b5780635c975abb116102255780635c975abb146106775780635e9d83481461067f5780636b3aa72e146106925780636d21117e146106b957600080fd5b806358baaa3e14610639578063595c6a671461064c5780635ac86ab71461065457600080fd5b80633ccc861d116102875780633ccc861d146105e95780633efe1db6146105fc5780634d18cc351461060f5780634d7a80d41461062657600080fd5b806339b70e38146105985780633a8c0786146105bf5780633c8fcf7c146105d657600080fd5b8063136439dd1161031a5780632c9c60cf116102f45780632c9c60cf146105245780633486e32e1461053757806336af41fa1461055e57806337838ed01461057157600080fd5b8063136439dd146104af578063149bc872146104c25780632b9f64a4146104e357600080fd5b80630e9a53cf116103565780630e9a53cf146104185780630eb383451461046057806310d67a2f14610475578063131433b41461048857600080fd5b806218572c1461037c57806304a0c502146103b4578063092db007146103f0575b600080fd5b61039f61038a366004613f70565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103ab565b60cb5461040590600160e01b900461ffff1681565b60405161ffff90911681526020016103ab565b610420610984565b604080518251815260208084015163ffffffff908116918301919091528383015116918101919091526060918201511515918101919091526080016103ab565b61047361046e366004613f9b565b610a63565b005b610473610483366004613f70565b610ae5565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736104bd366004613fd4565b610ba1565b6104d56104d0366004614005565b610ce0565b6040519081526020016103ab565b61050c6104f1366004613f70565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103ab565b61047361053236600461406d565b610d56565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61047361056c36600461406d565b61109e565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b60cb546103db90600160a01b900463ffffffff1681565b6103db6105e43660046140d5565b611336565b6104736105f736600461412c565b6115c4565b61047361060a366004614187565b611986565b60cb546103db90600160c01b900463ffffffff1681565b6104056106343660046141b3565b611c57565b6104736106473660046141f0565b611e06565b610473611e17565b61039f61066236600461420b565b606654600160ff9092169190911b9081161490565b6066546104d5565b61039f61068d36600461422e565b611ede565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b61039f6106c7366004614263565b60cf60209081526000928352604080842090915290825290205460ff1681565b610473611f6b565b6107026106fd36600461428f565b611f7f565b6040805161ffff909316835263ffffffff9091166020830152016103ab565b60ca546104d5565b610473610737366004613f70565b611fe7565b6104d561074a3660046142ef565b60cd60209081526000928352604080842090915290825290205481565b60655461050c906001600160a01b031681565b6033546001600160a01b031661050c565b61050c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610420611ff8565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736107e3366004613f70565b612096565b6104d56107f6366004613f70565b60ce6020526000908152604090205481565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104d561083d3660046141b3565b6120f5565b61039f610850366004614263565b60d060209081526000928352604080842090915290825290205460ff1681565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736108a536600461431d565b6121a8565b6104206108b8366004613fd4565b6122f0565b6104736108cb366004614390565b612382565b6103db6108de366004613fd4565b612393565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b610473610918366004613f70565b61246e565b6104d56124e4565b6104d5610933366004614005565b612522565b6104736109463660046141f0565b612533565b610473610959366004613fd4565b612769565b60cb5461050c906001600160a01b031681565b61047361097f36600461406d565b6128c5565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b8015610a5f57600060ca6109c16001846143c1565b815481106109d1576109d16143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610a415750806040015163ffffffff164210155b15610a4c5792915050565b5080610a57816143ee565b9150506109ac565b5090565b610a6b612a42565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5c9190614405565b6001600160a01b0316336001600160a01b031614610b955760405162461bcd60e51b8152600401610b8c90614422565b60405180910390fd5b610b9e81612a9c565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d919061446c565b610c295760405162461bcd60e51b8152600401610b8c90614489565b60665481811614610ca25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610cf06020840184613f70565b8360200135604051602001610d399392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460049060109081161415610d7f5760405162461bcd60e51b8152600401610b8c906144d1565b60026097541415610da25760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110610dc557610dc56143d8565b9050602002810190610dd7919061453f565b33600081815260ce60209081526040808320549051949550939192610e0292909185918791016146fc565b6040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166384d76f7b33856020016020810190610e5d91906141f0565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff166024820152604401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed0919061446c565b610f4c5760405162461bcd60e51b815260206004820152604160248201527f52657761726473436f6f7264696e61746f722e7265776172644f70657261746f60448201527f72536574466f7252616e67653a20696e76616c6964206f70657261746f7253656064820152601d60fa1b608482015260a401610b8c565b610fd8610f5c604085018561472c565b610f6c6080870160608801613f70565b6080870135610f8160c0890160a08a016141f0565b610f9160e08a0160c08b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260cf602090815260408083208484529091529020805460ff1916600190811790915561100b908390614776565b33600081815260ce602052604090819020929092559051829184917f29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b29061105390889061478e565b60405180910390a46110853330608086018035906110749060608901613f70565b6001600160a01b03169291906132ab565b836001019350505050610daa565b505060016097555050565b606654600190600290811614156110c75760405162461bcd60e51b8152600401610b8c906144d1565b33600090815260d1602052604090205460ff166111665760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a401610b8c565b600260975414156111895760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b8281101561109357368484838181106111ac576111ac6143d8565b90506020028101906111be91906147a1565b33600081815260ce602090815260408083205490519495509391926111e99290918591879101614836565b60408051601f198184030181529190528051602090910120905061128c611210848061472c565b6112206040870160208801613f70565b60408701356112356080890160608a016141f0565b61124560a08a0160808b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260d0602090815260408083208484529091529020805460ff191660019081179091556112bf908390614776565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf2704829061130790889061485d565b60405180910390a46113283330604086018035906110749060208901613f70565b836001019350505050611191565b600061271061ffff831611156113c25760405162461bcd60e51b815260206004820152604560248201527f52657761726473436f6f7264696e61746f722e7365744f70657261746f72436f60448201527f6d6d697373696f6e426970733a20636f6d6d697373696f6e4269707320746f6f606482015264040d0d2ced60db1b608482015260a401610b8c565b6113cf62093a8042614776565b33600090815260d360209081526040822092935090919082906113f490880188613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600086602001602081019061142991906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008560008111156114575761145761455f565b80156114655761146561455f565b8152602081019190915260400160002080549091508015806114c0575063ffffffff8316826114956001846143c1565b815481106114a5576114a56143d8565b60009182526020909120015462010000900463ffffffff1614155b15611523576040805180820190915261ffff808616825263ffffffff808616602080850191825286546001810188556000888152919091209451940180549151909216620100000265ffffffffffff199091169390921692909217179055611560565b83826115306001846143c1565b81548110611540576115406143d8565b6000918252602090912001805461ffff191661ffff929092169190911790555b8560405161156e9190614870565b6040518091039020336001600160a01b03167f811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba8787876040516115b3939291906148a8565b60405180910390a350509392505050565b606654600290600490811614156115ed5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156116105760405162461bcd60e51b8152600401610b8c90614508565b6002609755600060ca61162660208601866141f0565b63ffffffff168154811061163c5761163c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152905061169d848261331c565b60006116af6080860160608701613f70565b6001600160a01b03808216600090815260cc602052604090205491925016806116d55750805b336001600160a01b038216146117535760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d6572000000006064820152608401610b8c565b60005b61176360a08801886148d4565b9050811015611978573661177a60e089018961472c565b8381811061178a5761178a6143d8565b6001600160a01b038716600090815260cd6020908152604080832093029490940194509290915082906117bf90850185613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050808260200135116118795760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a401610b8c565b60006118898260208501356143c1565b6001600160a01b038716600090815260cd602090815260408220929350850180359291906118b79087613f70565b6001600160a01b03168152602080820192909252604001600020919091556118f9908a9083906118e990870187613f70565b6001600160a01b031691906135ed565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061193d6020890189613f70565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050806119719061491e565b9050611756565b505060016097555050505050565b606654600390600890811614156119af5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146119d95760405162461bcd60e51b8152600401610b8c90614939565b60cb5463ffffffff600160c01b909104811690831611611a755760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a401610b8c565b428263ffffffff1610611b0e5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a401610b8c565b60ca5460cb54600090611b2e90600160a01b900463ffffffff164261498d565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60cb546001600160a01b038416600090815260d36020908152604082209192600160e01b900461ffff169183918290611c9290880188613f70565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866020016020810190611cc791906141f0565b63ffffffff1663ffffffff1681526020019081526020016000206000856000811115611cf557611cf561455f565b8015611d0357611d0361455f565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611d77576000848152602090819020604080518082019091529084015461ffff8116825262010000900463ffffffff1681830152825260019092019101611d31565b5050825192935050505b8015611df95763ffffffff421682611d9a6001846143c1565b81518110611daa57611daa6143d8565b60200260200101516020015163ffffffff1611611df05781611dcd6001836143c1565b81518110611ddd57611ddd6143d8565b6020026020010151600001519250611df9565b60001901611d81565b50909150505b9392505050565b611e0e612a42565b610b9e8161361d565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e83919061446c565b611e9f5760405162461bcd60e51b8152600401610b8c90614489565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000611f638260ca611ef360208301836141f0565b63ffffffff1681548110611f0957611f096143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015261331c565b506001919050565b611f73612a42565b611f7d600061368e565b565b60d36020528460005260406000206020528360005260406000206020528260005260406000206020528160005260406000208181548110611fbf57600080fd5b60009182526020909120015461ffff8116955062010000900463ffffffff1693508592505050565b611fef612a42565b610b9e816136e0565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461202c906001906143c1565b8154811061203c5761203c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b6001600160a01b038316600090815260d360209081526040822090829061211e90860186613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600084602001602081019061215391906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008360008111156121815761218161455f565b801561218f5761218f61455f565b8152602081019190915260400160002054949350505050565b600054610100900460ff16158080156121c85750600054600160ff909116105b806121e25750303b1580156121e2575060005460ff166001145b6122455760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b8c565b6000805460ff191660011790558015612268576000805461ff0019166101001790555b61227061373c565b60c95561227d86866137d3565b6122868761368e565b61228f846136e0565b6122988361361d565b6122a1826138bd565b80156122e7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca8281548110612327576123276143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b61238a612a42565b610b9e816138bd565b60ca546000905b63ffffffff8116156123ff578260ca6123b46001846149b5565b63ffffffff16815481106123ca576123ca6143d8565b90600052602060002090600202016000015414156123ed57611dff6001826149b5565b806123f7816149da565b91505061239a565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e640000000000000000006064820152608401610b8c565b612476612a42565b6001600160a01b0381166124db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8c565b610b9e8161368e565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612515575060c95490565b61251d61373c565b905090565b60006001610cf06020840184613f70565b6066546003906008908116141561255c5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146125865760405162461bcd60e51b8152600401610b8c90614939565b60ca5463ffffffff8316106125f75760405162461bcd60e51b815260206004820152603160248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152700d2dcecc2d8d2c840e4dedee892dcc8caf607b1b6064820152608401610b8c565b600060ca8363ffffffff1681548110612612576126126143d8565b906000526020600020906002020190508060010160089054906101000a900460ff161561269f5760405162461bcd60e51b815260206004820152603560248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152741c9bdbdd08185b1c9958591e48191a5cd8589b1959605a1b6064820152608401610b8c565b6001810154600160201b900463ffffffff16421061271e5760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152751c9bdbdd08185b1c9958591e481858dd1a5d985d195960521b6064820152608401610b8c565b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190614405565b6001600160a01b0316336001600160a01b0316146128105760405162461bcd60e51b8152600401610b8c90614422565b60665419811960665419161461288e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610cd5565b606654600090600190811614156128ee5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156129115760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110612934576129346143d8565b905060200281019061294691906147a1565b33600081815260ce602090815260408083205490519495509391926129719290918591879101614836565b60408051601f1981840301815291905280516020909101209050612998611210848061472c565b33600090815260cf602090815260408083208484529091529020805460ff191660019081179091556129cb908390614776565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190612a1390889061485d565b60405180910390a4612a343330604086018035906110749060208901613f70565b836001019350505050612919565b6033546001600160a01b03163314611f7d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b8c565b6001600160a01b038116612b2a5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b8c565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b86612bf6576040805162461bcd60e51b8152602060048201526024810191909152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206e6f2073747261746567696573207365746064820152608401610b8c565b60008511612c645760405162461bcd60e51b81526020600482015260416024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a401610b8c565b6f4b3b4ca85a86c47a098a223fffffffff851115612cd85760405162461bcd60e51b815260206004820152603f6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c61726765006064820152608401610b8c565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168363ffffffff161115612d855760405162461bcd60e51b81526020600482015260546024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a401610b8c565b612daf7f000000000000000000000000000000000000000000000000000000000000000084614a10565b63ffffffff1615612e4f5760405162461bcd60e51b815260206004820152606a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c401610b8c565b612e797f000000000000000000000000000000000000000000000000000000000000000085614a10565b63ffffffff1615612f1f5760405162461bcd60e51b81526020600482015260706024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c401610b8c565b8363ffffffff168263ffffffff1642612f3891906143c1565b11158015612f5257508363ffffffff168163ffffffff1611155b612fcc5760405162461bcd60e51b81526020600482015260516024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a401610b8c565b612ffc63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001642614776565b8463ffffffff1611156130815760405162461bcd60e51b81526020600482015260536024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a401610b8c565b6000805b8881101561329f5760008a8a838181106130a1576130a16143d8565b6130b79260206040909202019081019150613f70565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015613122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613146919061446c565b8061316d57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b6131e05760405162461bcd60e51b815260206004820152604a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a401610b8c565b806001600160a01b0316836001600160a01b03161061328d5760405162461bcd60e51b81526020600482015260696024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c401610b8c565b91506132988161491e565b9050613085565b50505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526133169085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613928565b50505050565b8060600151156133755760405162461bcd60e51b81526020600482015260306024820152600080516020614b1483398151915260448201526f1c9bdbdd081a5cc8191a5cd8589b195960821b6064820152608401610b8c565b806040015163ffffffff164210156133dc5760405162461bcd60e51b81526020600482015260366024820152600080516020614b148339815191526044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b6064820152608401610b8c565b6133e960c08301836148d4565b90506133f860a08401846148d4565b9050146134705760405162461bcd60e51b815260206004820152604c6024820152600080516020614b1483398151915260448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a401610b8c565b61347d60e083018361472c565b905061348c60c08401846148d4565b9050146135025760405162461bcd60e51b815260206004820152604a6024820152600080516020614b1483398151915260448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610b8c565b805161352e9061351860408501602086016141f0565b6135256040860186614a33565b866060016139fa565b60005b61353e60a08401846148d4565b90508110156135e8576135d8608084013561355c60a08601866148d4565b8481811061356c5761356c6143d8565b905060200201602081019061358191906141f0565b61358e60c08701876148d4565b8581811061359e5761359e6143d8565b90506020028101906135b09190614a33565b6135bd60e089018961472c565b878181106135cd576135cd6143d8565b905060400201613b6e565b6135e18161491e565b9050613531565b505050565b6040516001600160a01b0383166024820152604481018290526135e890849063a9059cbb60e01b906064016132df565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156137f457506001600160a01b03821615155b6138765760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26138b982612a9c565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061397d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613cbf9092919063ffffffff16565b8051909150156135e8578080602001905181019061399b919061446c565b6135e85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b8c565b613a05602083614a7a565b6001901b8463ffffffff1610613a8f5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a401610b8c565b6000613a9a82610ce0565b9050613ae584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a401610b8c565b505050505050565b613b79602083614a7a565b6001901b8463ffffffff1610613bf75760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e646578000000006064820152608401610b8c565b6000613c0282612522565b9050613c4d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f66006064820152608401610b8c565b6060613cce8484600085613cee565b949350505050565b600083613ce4868585613e1f565b1495945050505050565b606082471015613d4f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b8c565b6001600160a01b0385163b613da65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b8c565b600080866001600160a01b03168587604051613dc29190614aba565b60006040518083038185875af1925050503d8060008114613dff576040519150601f19603f3d011682016040523d82523d6000602084013e613e04565b606091505b5091509150613e14828286613f22565b979650505050505050565b600060208451613e2f9190614acc565b15613eb65760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610b8c565b8260205b85518111613f1957613ecd600285614acc565b613eee57816000528086015160205260406000209150600284049350613f07565b8086015160005281602052604060002091506002840493505b613f12602082614776565b9050613eba565b50949350505050565b60608315613f31575081611dff565b825115613f415782518084602001fd5b8160405162461bcd60e51b8152600401610b8c9190614ae0565b6001600160a01b0381168114610b9e57600080fd5b600060208284031215613f8257600080fd5b8135611dff81613f5b565b8015158114610b9e57600080fd5b60008060408385031215613fae57600080fd5b8235613fb981613f5b565b91506020830135613fc981613f8d565b809150509250929050565b600060208284031215613fe657600080fd5b5035919050565b600060408284031215613fff57600080fd5b50919050565b60006040828403121561401757600080fd5b611dff8383613fed565b60008083601f84011261403357600080fd5b50813567ffffffffffffffff81111561404b57600080fd5b6020830191508360208260051b850101111561406657600080fd5b9250929050565b6000806020838503121561408057600080fd5b823567ffffffffffffffff81111561409757600080fd5b6140a385828601614021565b90969095509350505050565b8035600181106140be57600080fd5b919050565b803561ffff811681146140be57600080fd5b6000806000608084860312156140ea57600080fd5b6140f48585613fed565b9250614102604085016140af565b9150614110606085016140c3565b90509250925092565b60006101008284031215613fff57600080fd5b6000806040838503121561413f57600080fd5b823567ffffffffffffffff81111561415657600080fd5b61416285828601614119565b9250506020830135613fc981613f5b565b803563ffffffff811681146140be57600080fd5b6000806040838503121561419a57600080fd5b823591506141aa60208401614173565b90509250929050565b6000806000608084860312156141c857600080fd5b83356141d381613f5b565b92506141e28560208601613fed565b9150614110606085016140af565b60006020828403121561420257600080fd5b611dff82614173565b60006020828403121561421d57600080fd5b813560ff81168114611dff57600080fd5b60006020828403121561424057600080fd5b813567ffffffffffffffff81111561425757600080fd5b613cce84828501614119565b6000806040838503121561427657600080fd5b823561428181613f5b565b946020939093013593505050565b600080600080600060a086880312156142a757600080fd5b85356142b281613f5b565b945060208601356142c281613f5b565b93506142d060408701614173565b92506142de606087016140af565b949793965091946080013592915050565b6000806040838503121561430257600080fd5b823561430d81613f5b565b91506020830135613fc981613f5b565b60008060008060008060c0878903121561433657600080fd5b863561434181613f5b565b9550602087013561435181613f5b565b945060408701359350606087013561436881613f5b565b925061437660808801614173565b915061438460a088016140c3565b90509295509295509295565b6000602082840312156143a257600080fd5b611dff826140c3565b634e487b7160e01b600052601160045260246000fd5b6000828210156143d3576143d36143ab565b500390565b634e487b7160e01b600052603260045260246000fd5b6000816143fd576143fd6143ab565b506000190190565b60006020828403121561441757600080fd5b8151611dff81613f5b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561447e57600080fd5b8151611dff81613f8d565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000823560de1983360301811261455557600080fd5b9190910192915050565b634e487b7160e01b600052602160045260246000fd5b6001811061459357634e487b7160e01b600052602160045260246000fd5b9052565b6000808335601e198436030181126145ae57600080fd5b830160208101925035905067ffffffffffffffff8111156145ce57600080fd5b8060061b360383131561406657600080fd5b818352600060208085019450826000805b8681101561464557823561460481613f5b565b6001600160a01b03168852828401356bffffffffffffffffffffffff811680821461462d578384fd5b898601525060409788019792909201916001016145f1565b50959695505050505050565b6146638261465e836140af565b614575565b600061467160208301614173565b63ffffffff808216602086015261468b6040850185614597565b925060e060408701526146a260e0870184836145e0565b92505060608401356146b381613f5b565b6001600160a01b0316606086015260808481013590860152806146d860a08601614173565b1660a0860152806146eb60c08601614173565b1660c0860152508091505092915050565b60018060a01b03841681528260208201526060604082015260006147236060830184614651565b95945050505050565b6000808335601e1984360301811261474357600080fd5b83018035915067ffffffffffffffff82111561475e57600080fd5b6020019150600681901b360382131561406657600080fd5b60008219821115614789576147896143ab565b500190565b602081526000611dff6020830184614651565b60008235609e1983360301811261455557600080fd5b60006147c38283614597565b60a085526147d560a0860182846145e0565b91505060208301356147e681613f5b565b6001600160a01b031660208501526040838101359085015261480a60608401614173565b63ffffffff80821660608701528061482460808701614173565b16608087015250508091505092915050565b60018060a01b038416815282602082015260606040820152600061472360608301846147b7565b602081526000611dff60208301846147b7565b6000823561487d81613f5b565b6001600160a01b0316825263ffffffff61489960208501614173565b16602083015250604001919050565b606081016148b68286614575565b61ffff8416602083015263ffffffff83166040830152949350505050565b6000808335601e198436030181126148eb57600080fd5b83018035915067ffffffffffffffff82111561490657600080fd5b6020019150600581901b360382131561406657600080fd5b6000600019821415614932576149326143ab565b5060010190565b60208082526034908201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6040820152733a103a3432903932bbb0b93239aab83230ba32b960611b606082015260800190565b600063ffffffff8083168185168083038211156149ac576149ac6143ab565b01949350505050565b600063ffffffff838116908316818110156149d2576149d26143ab565b039392505050565b600063ffffffff8216806149f0576149f06143ab565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680614a2757614a276149fa565b92169190910692915050565b6000808335601e19843603018112614a4a57600080fd5b83018035915067ffffffffffffffff821115614a6557600080fd5b60200191503681900382131561406657600080fd5b600082614a8957614a896149fa565b500490565b60005b83811015614aa9578181015183820152602001614a91565b838111156133165750506000910152565b60008251614555818460208701614a8e565b600082614adb57614adb6149fa565b500690565b6020815260008251806020840152614aff816040850160208701614a8e565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2052657761726473436f6f7264696e61746f722e5f76616c696461746552657761a26469706673582212202479700bc3c550c6876cd1f99c7bb4199e695b1614b01756e7bfe7285d74b78864736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"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\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", + Bin: "0x6101806040523480156200001257600080fd5b5060405162004ac838038062004ac88339810160408190526200003591620002e4565b868686868686866200004885826200037e565b63ffffffff1615620000ed5760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b620000fc62015180866200037e565b63ffffffff16156200019d5760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a401620000e4565b6001600160a01b0396871661012052949095166101405263ffffffff92831660805290821660a052811660c05291821660e0521661010052620001df620001f2565b5050466101605250620003b09350505050565b600054610100900460ff16156200025c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000e4565b60005460ff9081161015620002af576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002c757600080fd5b50565b805163ffffffff81168114620002df57600080fd5b919050565b600080600080600080600060e0888a0312156200030057600080fd5b87516200030d81620002b1565b60208901519097506200032081620002b1565b95506200033060408901620002ca565b94506200034060608901620002ca565b93506200035060808901620002ca565b92506200036060a08901620002ca565b91506200037060c08901620002ca565b905092959891949750929550565b600063ffffffff80841680620003a457634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b60805160a05160c05160e0516101005161012051610140516101605161468162000447600039600061204f0152600081816104f70152612d01015260006107f40152600081816104210152612b3001526000818161034d0152612bdc0152600081816104d00152612adf01526000818161074001526128560152600081816106e60152818161290d01526129e801526146816000f3fe608060405234801561001057600080fd5b506004361061030b5760003560e01c80637adace911161019d578063c46db606116100e9578063f2fde38b116100a2578063f96abf2e1161007c578063f96abf2e14610844578063fabc1cbc14610857578063fbf1e2c11461086a578063fce36c7d1461087d57600080fd5b8063f2fde38b14610816578063f698da2514610829578063f8cd84481461083157600080fd5b8063c46db60614610775578063d4540a55146107a3578063de02e503146107b6578063e221b245146107c9578063e810ce21146107dc578063ea4d3c9b146107ef57600080fd5b80639104c31911610156578063a0169ddd11610130578063a0169ddd14610708578063bb7e451f1461071b578063bf21a8aa1461073b578063c336f19d1461076257600080fd5b80639104c319146106be5780639be3d4e4146106d95780639d45c281146106e157600080fd5b80637adace91146106225780637b8f8b0514610654578063863cb9a91461065c578063865c69531461066f578063886f11951461069a5780638da5cb5b146106ad57600080fd5b80633a8c07861161025c57806358baaa3e116102155780635c975abb116101ef5780635c975abb146105d15780635e9d8348146105d95780636d21117e146105ec578063715018a61461061a57600080fd5b806358baaa3e14610593578063595c6a67146105a65780635ac86ab7146105ae57600080fd5b80633a8c0786146105195780633c8fcf7c146105305780633ccc861d146105435780633efe1db6146105565780634d18cc35146105695780634d7a80d41461058057600080fd5b8063131433b4116102c95780632b9f64a4116102a35780632b9f64a41461047757806336af41fa146104b857806337838ed0146104cb57806339b70e38146104f257600080fd5b8063131433b41461041c578063136439dd14610443578063149bc8721461045657600080fd5b806218572c1461031057806304a0c50214610348578063092db007146103845780630e9a53cf146103ac5780630eb38345146103f457806310d67a2f14610409575b600080fd5b61033361031e366004613b8c565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61036f7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161033f565b60cb5461039990600160e01b900461ffff1681565b60405161ffff909116815260200161033f565b6103b4610890565b604080518251815260208084015163ffffffff9081169183019190915283830151169181019190915260609182015115159181019190915260800161033f565b610407610402366004613bb7565b61096f565b005b610407610417366004613b8c565b6109f1565b61036f7f000000000000000000000000000000000000000000000000000000000000000081565b610407610451366004613bf0565b610aad565b610469610464366004613c21565b610bec565b60405190815260200161033f565b6104a0610485366004613b8c565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161033f565b6104076104c6366004613c3d565b610c62565b61036f7f000000000000000000000000000000000000000000000000000000000000000081565b6104a07f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461036f90600160a01b900463ffffffff1681565b61036f61053e366004613cd8565b610e94565b610407610551366004613d2f565b611125565b610407610564366004613d8a565b6114e7565b60cb5461036f90600160c01b900463ffffffff1681565b61039961058e366004613db6565b6117b8565b6104076105a1366004613df3565b61196a565b61040761197b565b6103336105bc366004613e0e565b606654600160ff9092169190911b9081161490565b606654610469565b6103336105e7366004613e31565b611a42565b6103336105fa366004613e66565b60cf60209081526000928352604080842090915290825290205460ff1681565b610407611acf565b610635610630366004613e92565b611ae3565b6040805161ffff909316835263ffffffff90911660208301520161033f565b60ca54610469565b61040761066a366004613b8c565b611b4b565b61046961067d366004613efd565b60cd60209081526000928352604080842090915290825290205481565b6065546104a0906001600160a01b031681565b6033546001600160a01b03166104a0565b6104a073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103b4611b5c565b61036f7f000000000000000000000000000000000000000000000000000000000000000081565b610407610716366004613b8c565b611bfa565b610469610729366004613b8c565b60ce6020526000908152604090205481565b61036f7f000000000000000000000000000000000000000000000000000000000000000081565b610469610770366004613db6565b611c59565b610333610783366004613e66565b60d060209081526000928352604080842090915290825290205460ff1681565b6104076107b1366004613f2b565b611d0f565b6103b46107c4366004613bf0565b611e57565b6104076107d7366004613f9e565b611ee9565b61036f6107ea366004613bf0565b611efa565b6104a07f000000000000000000000000000000000000000000000000000000000000000081565b610407610824366004613b8c565b611fd5565b61046961204b565b61046961083f366004613c21565b612089565b610407610852366004613df3565b61209a565b610407610865366004613bf0565b6122d0565b60cb546104a0906001600160a01b031681565b61040761088b366004613c3d565b61242c565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b801561096b57600060ca6108cd600184613fcf565b815481106108dd576108dd613fe6565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16158015606083018190529192509061094d5750806040015163ffffffff164210155b156109585792915050565b508061096381613ffc565b9150506108b8565b5090565b6109776125a3565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614013565b6001600160a01b0316336001600160a01b031614610aa15760405162461bcd60e51b8152600401610a9890614030565b60405180910390fd5b610aaa816125fd565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b19919061407a565b610b355760405162461bcd60e51b8152600401610a9890614097565b60665481811614610bae5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610a98565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610bfc6020840184613b8c565b8360200135604051602001610c459392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460019060029081161415610c8b5760405162461bcd60e51b8152600401610a98906140df565b33600090815260d1602052604090205460ff16610d2a5760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a401610a98565b60026097541415610d4d5760405162461bcd60e51b8152600401610a9890614116565b600260975560005b82811015610e895736848483818110610d7057610d70613fe6565b9050602002810190610d82919061414d565b33600081815260ce60209081526040808320549051949550939192610dad9290918591879101614292565b604051602081830303815290604052805190602001209050610dce836126f4565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610e019083906142c2565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610e499088906142da565b60405180910390a4610e7b333060408601803590610e6a9060208901613b8c565b6001600160a01b0316929190612ecc565b836001019350505050610d55565b505060016097555050565b600061271061ffff83161115610f205760405162461bcd60e51b815260206004820152604560248201527f52657761726473436f6f7264696e61746f722e7365744f70657261746f72436f60448201527f6d6d697373696f6e426970733a20636f6d6d697373696f6e4269707320746f6f606482015264040d0d2ced60db1b608482015260a401610a98565b610f2d62093a80426142c2565b33600090815260d26020908152604082209293509091908290610f5290880188613b8c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866020016020810190610f879190613df3565b63ffffffff1663ffffffff1681526020019081526020016000206000856001811115610fb557610fb56142ed565b6001811115610fc657610fc66142ed565b815260208101919091526040016000208054909150801580611021575063ffffffff831682610ff6600184613fcf565b8154811061100657611006613fe6565b60009182526020909120015462010000900463ffffffff1614155b15611084576040805180820190915261ffff808616825263ffffffff808616602080850191825286546001810188556000888152919091209451940180549151909216620100000265ffffffffffff1990911693909216929092171790556110c1565b8382611091600184613fcf565b815481106110a1576110a1613fe6565b6000918252602090912001805461ffff191661ffff929092169190911790555b856040516110cf9190614303565b6040518091039020336001600160a01b03167f811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba8787876040516111149392919061433b565b60405180910390a350509392505050565b6066546002906004908116141561114e5760405162461bcd60e51b8152600401610a98906140df565b600260975414156111715760405162461bcd60e51b8152600401610a9890614116565b6002609755600060ca6111876020860186613df3565b63ffffffff168154811061119d5761119d613fe6565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015290506111fe8482612f3d565b60006112106080860160608701613b8c565b6001600160a01b03808216600090815260cc602052604090205491925016806112365750805b336001600160a01b038216146112b45760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d6572000000006064820152608401610a98565b60005b6112c460a088018861437b565b90508110156114d957366112db60e08901896143cc565b838181106112eb576112eb613fe6565b6001600160a01b038716600090815260cd60209081526040808320930294909401945092909150829061132090850185613b8c565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050808260200135116113da5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a401610a98565b60006113ea826020850135613fcf565b6001600160a01b038716600090815260cd602090815260408220929350850180359291906114189087613b8c565b6001600160a01b031681526020808201929092526040016000209190915561145a908a90839061144a90870187613b8c565b6001600160a01b03169190613209565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061149e6020890189613b8c565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050806114d290614416565b90506112b7565b505060016097555050505050565b606654600390600890811614156115105760405162461bcd60e51b8152600401610a98906140df565b60cb546001600160a01b0316331461153a5760405162461bcd60e51b8152600401610a9890614431565b60cb5463ffffffff600160c01b9091048116908316116115d65760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a401610a98565b428263ffffffff161061166f5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a401610a98565b60ca5460cb5460009061168f90600160a01b900463ffffffff1642614485565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60cb546001600160a01b038416600090815260d26020908152604082209192600160e01b900461ffff1691839182906117f390880188613b8c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008660200160208101906118289190613df3565b63ffffffff1663ffffffff1681526020019081526020016000206000856001811115611856576118566142ed565b6001811115611867576118676142ed565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156118db576000848152602090819020604080518082019091529084015461ffff8116825262010000900463ffffffff1681830152825260019092019101611895565b5050825192935050505b801561195d5763ffffffff4216826118fe600184613fcf565b8151811061190e5761190e613fe6565b60200260200101516020015163ffffffff16116119545781611931600183613fcf565b8151811061194157611941613fe6565b602002602001015160000151925061195d565b600019016118e5565b50909150505b9392505050565b6119726125a3565b610aaa81613239565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e7919061407a565b611a035760405162461bcd60e51b8152600401610a9890614097565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000611ac78260ca611a576020830183613df3565b63ffffffff1681548110611a6d57611a6d613fe6565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612f3d565b506001919050565b611ad76125a3565b611ae160006132aa565b565b60d26020528460005260406000206020528360005260406000206020528260005260406000206020528160005260406000208181548110611b2357600080fd5b60009182526020909120015461ffff8116955062010000900463ffffffff1693508592505050565b611b536125a3565b610aaa816132fc565b60408051608081018252600080825260208201819052918101829052606081019190915260ca8054611b9090600190613fcf565b81548110611ba057611ba0613fe6565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b6001600160a01b038316600090815260d2602090815260408220908290611c8290860186613b8c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000846020016020810190611cb79190613df3565b63ffffffff1663ffffffff1681526020019081526020016000206000836001811115611ce557611ce56142ed565b6001811115611cf657611cf66142ed565b8152602081019190915260400160002054949350505050565b600054610100900460ff1615808015611d2f5750600054600160ff909116105b80611d495750303b158015611d49575060005460ff166001145b611dac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a98565b6000805460ff191660011790558015611dcf576000805461ff0019166101001790555b611dd7613358565b60c955611de486866133ef565b611ded876132aa565b611df6846132fc565b611dff83613239565b611e08826134d9565b8015611e4e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca8281548110611e8e57611e8e613fe6565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b611ef16125a3565b610aaa816134d9565b60ca546000905b63ffffffff811615611f66578260ca611f1b6001846144ad565b63ffffffff1681548110611f3157611f31613fe6565b9060005260206000209060020201600001541415611f54576119636001826144ad565b80611f5e816144d2565b915050611f01565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e640000000000000000006064820152608401610a98565b611fdd6125a3565b6001600160a01b0381166120425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a98565b610aaa816132aa565b60007f000000000000000000000000000000000000000000000000000000000000000046141561207c575060c95490565b612084613358565b905090565b60006001610bfc6020840184613b8c565b606654600390600890811614156120c35760405162461bcd60e51b8152600401610a98906140df565b60cb546001600160a01b031633146120ed5760405162461bcd60e51b8152600401610a9890614431565b60ca5463ffffffff83161061215e5760405162461bcd60e51b815260206004820152603160248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152700d2dcecc2d8d2c840e4dedee892dcc8caf607b1b6064820152608401610a98565b600060ca8363ffffffff168154811061217957612179613fe6565b906000526020600020906002020190508060010160089054906101000a900460ff16156122065760405162461bcd60e51b815260206004820152603560248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152741c9bdbdd08185b1c9958591e48191a5cd8589b1959605a1b6064820152608401610a98565b6001810154600160201b900463ffffffff1642106122855760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152751c9bdbdd08185b1c9958591e481858dd1a5d985d195960521b6064820152608401610a98565b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123479190614013565b6001600160a01b0316336001600160a01b0316146123775760405162461bcd60e51b8152600401610a9890614030565b6066541981196066541916146123f55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610a98565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610be1565b606654600090600190811614156124555760405162461bcd60e51b8152600401610a98906140df565b600260975414156124785760405162461bcd60e51b8152600401610a9890614116565b600260975560005b82811015610e89573684848381811061249b5761249b613fe6565b90506020028101906124ad919061414d565b33600081815260ce602090815260408083205490519495509391926124d89290918591879101614292565b6040516020818303038152906040528051906020012090506124f9836126f4565b33600090815260cf602090815260408083208484529091529020805460ff1916600190811790915561252c9083906142c2565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906125749088906142da565b60405180910390a4612595333060408601803590610e6a9060208901613b8c565b836001019350505050612480565b6033546001600160a01b03163314611ae15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a98565b6001600160a01b03811661268b5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610a98565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b600061270082806143cc565b905011612765576040805162461bcd60e51b815260206004820152602481019190915260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a206e6f2073747261746567696573207365746064820152608401610a98565b60008160400135116127d75760405162461bcd60e51b8152602060048201526041602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a401610a98565b6f4b3b4ca85a86c47a098a223fffffffff8160400135111561284f5760405162461bcd60e51b815260206004820152603f602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c61726765006064820152608401610a98565b63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001661288660a0830160808401613df3565b63ffffffff16111561290b5760405162461bcd60e51b8152602060048201526054602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a401610a98565b7f000000000000000000000000000000000000000000000000000000000000000061293c60a0830160808401613df3565b6129469190614508565b63ffffffff16156129e65760405162461bcd60e51b815260206004820152606a602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c401610a98565b7f0000000000000000000000000000000000000000000000000000000000000000612a176080830160608401613df3565b612a219190614508565b63ffffffff1615612ac75760405162461bcd60e51b8152602060048201526070602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c401610a98565b612ad76080820160608301613df3565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1642612b0f9190613fcf565b11158015612b585750612b286080820160608301613df3565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b612bd25760405162461bcd60e51b8152602060048201526051602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a401610a98565b612c0263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016426142c2565b612c126080830160608401613df3565b63ffffffff161115612c965760405162461bcd60e51b8152602060048201526053602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a401610a98565b6000805b612ca483806143cc565b9050811015612ec7576000612cb984806143cc565b83818110612cc957612cc9613fe6565b612cdf9260206040909202019081019150613b8c565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015612d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6e919061407a565b80612d9557506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b612e085760405162461bcd60e51b815260206004820152604a602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a401610a98565b806001600160a01b0316836001600160a01b031610612eb55760405162461bcd60e51b8152602060048201526069602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c401610a98565b9150612ec081614416565b9050612c9a565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052612f379085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613544565b50505050565b806060015115612f965760405162461bcd60e51b8152602060048201526030602482015260008051602061460c83398151915260448201526f1c9bdbdd081a5cc8191a5cd8589b195960821b6064820152608401610a98565b806040015163ffffffff16421015612ffd5760405162461bcd60e51b8152602060048201526036602482015260008051602061460c8339815191526044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b6064820152608401610a98565b61300a60c083018361437b565b905061301960a084018461437b565b9050146130915760405162461bcd60e51b815260206004820152604c602482015260008051602061460c83398151915260448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a401610a98565b61309e60e08301836143cc565b90506130ad60c084018461437b565b9050146131235760405162461bcd60e51b815260206004820152604a602482015260008051602061460c83398151915260448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610a98565b805161314f906131396040850160208601613df3565b613146604086018661452b565b86606001613616565b60005b61315f60a084018461437b565b9050811015612ec7576131f9608084013561317d60a086018661437b565b8481811061318d5761318d613fe6565b90506020020160208101906131a29190613df3565b6131af60c087018761437b565b858181106131bf576131bf613fe6565b90506020028101906131d1919061452b565b6131de60e08901896143cc565b878181106131ee576131ee613fe6565b90506040020161378a565b61320281614416565b9050613152565b6040516001600160a01b038316602482015260448101829052612ec790849063a9059cbb60e01b90606401612f00565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b031615801561341057506001600160a01b03821615155b6134925760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610a98565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26134d5826125fd565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b6000613599826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138db9092919063ffffffff16565b805190915015612ec757808060200190518101906135b7919061407a565b612ec75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a98565b613621602083614572565b6001901b8463ffffffff16106136ab5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a401610a98565b60006136b682610bec565b905061370184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff89166138f2565b6137825760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a401610a98565b505050505050565b613795602083614572565b6001901b8463ffffffff16106138135760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e646578000000006064820152608401610a98565b600061381e82612089565b905061386984848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff89166138f2565b6137825760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f66006064820152608401610a98565b60606138ea848460008561390a565b949350505050565b600083613900868585613a3b565b1495945050505050565b60608247101561396b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a98565b6001600160a01b0385163b6139c25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a98565b600080866001600160a01b031685876040516139de91906145b2565b60006040518083038185875af1925050503d8060008114613a1b576040519150601f19603f3d011682016040523d82523d6000602084013e613a20565b606091505b5091509150613a30828286613b3e565b979650505050505050565b600060208451613a4b91906145c4565b15613ad25760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610a98565b8260205b85518111613b3557613ae96002856145c4565b613b0a57816000528086015160205260406000209150600284049350613b23565b8086015160005281602052604060002091506002840493505b613b2e6020826142c2565b9050613ad6565b50949350505050565b60608315613b4d575081611963565b825115613b5d5782518084602001fd5b8160405162461bcd60e51b8152600401610a9891906145d8565b6001600160a01b0381168114610aaa57600080fd5b600060208284031215613b9e57600080fd5b813561196381613b77565b8015158114610aaa57600080fd5b60008060408385031215613bca57600080fd5b8235613bd581613b77565b91506020830135613be581613ba9565b809150509250929050565b600060208284031215613c0257600080fd5b5035919050565b600060408284031215613c1b57600080fd5b50919050565b600060408284031215613c3357600080fd5b6119638383613c09565b60008060208385031215613c5057600080fd5b823567ffffffffffffffff80821115613c6857600080fd5b818501915085601f830112613c7c57600080fd5b813581811115613c8b57600080fd5b8660208260051b8501011115613ca057600080fd5b60209290920196919550909350505050565b803560028110613cc157600080fd5b919050565b803561ffff81168114613cc157600080fd5b600080600060808486031215613ced57600080fd5b613cf78585613c09565b9250613d0560408501613cb2565b9150613d1360608501613cc6565b90509250925092565b60006101008284031215613c1b57600080fd5b60008060408385031215613d4257600080fd5b823567ffffffffffffffff811115613d5957600080fd5b613d6585828601613d1c565b9250506020830135613be581613b77565b803563ffffffff81168114613cc157600080fd5b60008060408385031215613d9d57600080fd5b82359150613dad60208401613d76565b90509250929050565b600080600060808486031215613dcb57600080fd5b8335613dd681613b77565b9250613de58560208601613c09565b9150613d1360608501613cb2565b600060208284031215613e0557600080fd5b61196382613d76565b600060208284031215613e2057600080fd5b813560ff8116811461196357600080fd5b600060208284031215613e4357600080fd5b813567ffffffffffffffff811115613e5a57600080fd5b6138ea84828501613d1c565b60008060408385031215613e7957600080fd5b8235613e8481613b77565b946020939093013593505050565b600080600080600060a08688031215613eaa57600080fd5b8535613eb581613b77565b94506020860135613ec581613b77565b9350613ed360408701613d76565b9250613ee160608701613cb2565b949793965091946080013592915050565b8035613cc181613b77565b60008060408385031215613f1057600080fd5b8235613f1b81613b77565b91506020830135613be581613b77565b60008060008060008060c08789031215613f4457600080fd5b8635613f4f81613b77565b95506020870135613f5f81613b77565b9450604087013593506060870135613f7681613b77565b9250613f8460808801613d76565b9150613f9260a08801613cc6565b90509295509295509295565b600060208284031215613fb057600080fd5b61196382613cc6565b634e487b7160e01b600052601160045260246000fd5b600082821015613fe157613fe1613fb9565b500390565b634e487b7160e01b600052603260045260246000fd5b60008161400b5761400b613fb9565b506000190190565b60006020828403121561402557600080fd5b815161196381613b77565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561408c57600080fd5b815161196381613ba9565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008235609e1983360301811261416357600080fd5b9190910192915050565b818352600060208085019450826000805b868110156141d257823561419181613b77565b6001600160a01b03168852828401356bffffffffffffffffffffffff81168082146141ba578384fd5b8986015250604097880197929092019160010161417e565b50959695505050505050565b60008135601e198336030181126141f457600080fd5b8201803567ffffffffffffffff81111561420d57600080fd5b8060061b360384131561421f57600080fd5b60a0855261423460a08601826020850161416d565b91505061424360208401613ef2565b6001600160a01b031660208501526040838101359085015261426760608401613d76565b63ffffffff16606085015261427e60808401613d76565b63ffffffff81166080860152509392505050565b60018060a01b03841681528260208201526060604082015260006142b960608301846141de565b95945050505050565b600082198211156142d5576142d5613fb9565b500190565b60208152600061196360208301846141de565b634e487b7160e01b600052602160045260246000fd5b6000823561431081613b77565b6001600160a01b0316825263ffffffff61432c60208501613d76565b16602083015250604001919050565b606081016002851061435d57634e487b7160e01b600052602160045260246000fd5b93815261ffff92909216602083015263ffffffff1660409091015290565b6000808335601e1984360301811261439257600080fd5b83018035915067ffffffffffffffff8211156143ad57600080fd5b6020019150600581901b36038213156143c557600080fd5b9250929050565b6000808335601e198436030181126143e357600080fd5b83018035915067ffffffffffffffff8211156143fe57600080fd5b6020019150600681901b36038213156143c557600080fd5b600060001982141561442a5761442a613fb9565b5060010190565b60208082526034908201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6040820152733a103a3432903932bbb0b93239aab83230ba32b960611b606082015260800190565b600063ffffffff8083168185168083038211156144a4576144a4613fb9565b01949350505050565b600063ffffffff838116908316818110156144ca576144ca613fb9565b039392505050565b600063ffffffff8216806144e8576144e8613fb9565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff8084168061451f5761451f6144f2565b92169190910692915050565b6000808335601e1984360301811261454257600080fd5b83018035915067ffffffffffffffff82111561455d57600080fd5b6020019150368190038213156143c557600080fd5b600082614581576145816144f2565b500490565b60005b838110156145a1578181015183820152602001614589565b83811115612f375750506000910152565b60008251614163818460208701614586565b6000826145d3576145d36144f2565b500690565b60208152600082518060208401526145f7816040850160208701614586565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2052657761726473436f6f7264696e61746f722e5f76616c696461746552657761a2646970667358221220d7afccc0db13e91ca036bb96c0a4c5201c43a88dd680365dbaef13011707d7b064736f6c634300080c0033", } // RewardsCoordinatorABI is the input ABI used to generate the binding from. @@ -107,7 +96,7 @@ var RewardsCoordinatorABI = RewardsCoordinatorMetaData.ABI var RewardsCoordinatorBin = RewardsCoordinatorMetaData.Bin // DeployRewardsCoordinator deploys a new Ethereum contract, binding an instance of RewardsCoordinator to it. -func DeployRewardsCoordinator(auth *bind.TransactOpts, backend bind.ContractBackend, _delegationManager common.Address, _strategyManager common.Address, _avsDirectory common.Address, _CALCULATION_INTERVAL_SECONDS uint32, _MAX_REWARDS_DURATION uint32, _MAX_RETROACTIVE_LENGTH uint32, _MAX_FUTURE_LENGTH uint32, _GENESIS_REWARDS_TIMESTAMP uint32, _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP uint32, _OPERATOR_SET_MAX_RETROACTIVE_LENGTH uint32) (common.Address, *types.Transaction, *RewardsCoordinator, error) { +func DeployRewardsCoordinator(auth *bind.TransactOpts, backend bind.ContractBackend, _delegationManager common.Address, _strategyManager common.Address, _CALCULATION_INTERVAL_SECONDS uint32, _MAX_REWARDS_DURATION uint32, _MAX_RETROACTIVE_LENGTH uint32, _MAX_FUTURE_LENGTH uint32, __GENESIS_REWARDS_TIMESTAMP uint32) (common.Address, *types.Transaction, *RewardsCoordinator, error) { parsed, err := RewardsCoordinatorMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -116,7 +105,7 @@ func DeployRewardsCoordinator(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(RewardsCoordinatorBin), backend, _delegationManager, _strategyManager, _avsDirectory, _CALCULATION_INTERVAL_SECONDS, _MAX_REWARDS_DURATION, _MAX_RETROACTIVE_LENGTH, _MAX_FUTURE_LENGTH, _GENESIS_REWARDS_TIMESTAMP, _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, _OPERATOR_SET_MAX_RETROACTIVE_LENGTH) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RewardsCoordinatorBin), backend, _delegationManager, _strategyManager, _CALCULATION_INTERVAL_SECONDS, _MAX_REWARDS_DURATION, _MAX_RETROACTIVE_LENGTH, _MAX_FUTURE_LENGTH, __GENESIS_REWARDS_TIMESTAMP) if err != nil { return common.Address{}, nil, nil, err } @@ -420,68 +409,6 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) MAXREWARDSDURATION() return _RewardsCoordinator.Contract.MAXREWARDSDURATION(&_RewardsCoordinator.CallOpts) } -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorCaller) OPERATORSETGENESISREWARDSTIMESTAMP(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { - return _RewardsCoordinator.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinator.CallOpts) -} - -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { - return _RewardsCoordinator.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinator.CallOpts) -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorCaller) OPERATORSETMAXRETROACTIVELENGTH(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "OPERATOR_SET_MAX_RETROACTIVE_LENGTH") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { - return _RewardsCoordinator.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinator.CallOpts) -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { - return _RewardsCoordinator.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinator.CallOpts) -} - // ActivationDelay is a free data retrieval call binding the contract method 0x3a8c0786. // // Solidity: function activationDelay() view returns(uint32) @@ -513,37 +440,6 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) ActivationDelay() (u return _RewardsCoordinator.Contract.ActivationDelay(&_RewardsCoordinator.CallOpts) } -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinator *RewardsCoordinatorCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "avsDirectory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinator *RewardsCoordinatorSession) AvsDirectory() (common.Address, error) { - return _RewardsCoordinator.Contract.AvsDirectory(&_RewardsCoordinator.CallOpts) -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) AvsDirectory() (common.Address, error) { - return _RewardsCoordinator.Contract.AvsDirectory(&_RewardsCoordinator.CallOpts) -} - // BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. // // Solidity: function beaconChainETHStrategy() view returns(address) @@ -1594,27 +1490,6 @@ func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) RenounceOwnershi return _RewardsCoordinator.Contract.RenounceOwnership(&_RewardsCoordinator.TransactOpts) } -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinator *RewardsCoordinatorTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinator.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinator *RewardsCoordinatorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinator.Contract.RewardOperatorSetForRange(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinator.Contract.RewardOperatorSetForRange(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) -} - // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -3017,169 +2892,6 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOperatorCommissionUp return event, nil } -// RewardsCoordinatorOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the RewardsCoordinator contract. -type RewardsCoordinatorOperatorSetRewardCreatedIterator struct { - Event *RewardsCoordinatorOperatorSetRewardCreated // 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 *RewardsCoordinatorOperatorSetRewardCreatedIterator) 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(RewardsCoordinatorOperatorSetRewardCreated) - 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(RewardsCoordinatorOperatorSetRewardCreated) - 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 *RewardsCoordinatorOperatorSetRewardCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RewardsCoordinatorOperatorSetRewardCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RewardsCoordinatorOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the RewardsCoordinator contract. -type RewardsCoordinatorOperatorSetRewardCreated struct { - Avs common.Address - SubmissionNonce *big.Int - RewardsSubmissionHash [32]byte - RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorOperatorSetRewardCreatedIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) - if err != nil { - return nil, err - } - return &RewardsCoordinatorOperatorSetRewardCreatedIterator{contract: _RewardsCoordinator.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil -} - -// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) - 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(RewardsCoordinatorOperatorSetRewardCreated) - if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", 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 -} - -// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOperatorSetRewardCreated(log types.Log) (*RewardsCoordinatorOperatorSetRewardCreated, error) { - event := new(RewardsCoordinatorOperatorSetRewardCreated) - if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // RewardsCoordinatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the RewardsCoordinator contract. type RewardsCoordinatorOwnershipTransferredIterator struct { Event *RewardsCoordinatorOwnershipTransferred // Event containing the contract specifics and raw log diff --git a/pkg/bindings/RewardsCoordinatorStorage/binding.go b/pkg/bindings/RewardsCoordinatorStorage/binding.go index 8df917060..2e5ed3f4c 100644 --- a/pkg/bindings/RewardsCoordinatorStorage/binding.go +++ b/pkg/bindings/RewardsCoordinatorStorage/binding.go @@ -31,8 +31,8 @@ var ( // IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 + Avs common.Address + Id uint32 } // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. @@ -49,17 +49,6 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } -// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. -type IRewardsCoordinatorOperatorSetRewardsSubmission struct { - RewardType uint8 - OperatorSetId uint32 - StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier - Token common.Address - Amount *big.Int - StartTimestamp uint32 - Duration uint32 -} - // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -94,7 +83,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf 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\":\"OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", + 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"getCurrentDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", } // RewardsCoordinatorStorageABI is the input ABI used to generate the binding from. @@ -398,68 +387,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) MAXREW return _RewardsCoordinatorStorage.Contract.MAXREWARDSDURATION(&_RewardsCoordinatorStorage.CallOpts) } -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OPERATORSETGENESISREWARDSTIMESTAMP(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { - return _RewardsCoordinatorStorage.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinatorStorage.CallOpts) -} - -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { - return _RewardsCoordinatorStorage.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinatorStorage.CallOpts) -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OPERATORSETMAXRETROACTIVELENGTH(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "OPERATOR_SET_MAX_RETROACTIVE_LENGTH") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { - return _RewardsCoordinatorStorage.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinatorStorage.CallOpts) -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { - return _RewardsCoordinatorStorage.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinatorStorage.CallOpts) -} - // ActivationDelay is a free data retrieval call binding the contract method 0x3a8c0786. // // Solidity: function activationDelay() view returns(uint32) @@ -491,37 +418,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) Activa return _RewardsCoordinatorStorage.Contract.ActivationDelay(&_RewardsCoordinatorStorage.CallOpts) } -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "avsDirectory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) AvsDirectory() (common.Address, error) { - return _RewardsCoordinatorStorage.Contract.AvsDirectory(&_RewardsCoordinatorStorage.CallOpts) -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) AvsDirectory() (common.Address, error) { - return _RewardsCoordinatorStorage.Contract.AvsDirectory(&_RewardsCoordinatorStorage.CallOpts) -} - // CalculateEarnerLeafHash is a free data retrieval call binding the contract method 0x149bc872. // // Solidity: function calculateEarnerLeafHash((address,bytes32) leaf) pure returns(bytes32) @@ -739,37 +635,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) Delega return _RewardsCoordinatorStorage.Contract.DelegationManager(&_RewardsCoordinatorStorage.CallOpts) } -// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. -// -// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) GetCurrentClaimableDistributionRoot(opts *bind.CallOpts) (IRewardsCoordinatorDistributionRoot, error) { - var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "getCurrentClaimableDistributionRoot") - - if err != nil { - return *new(IRewardsCoordinatorDistributionRoot), err - } - - out0 := *abi.ConvertType(out[0], new(IRewardsCoordinatorDistributionRoot)).(*IRewardsCoordinatorDistributionRoot) - - return out0, err - -} - -// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. -// -// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) GetCurrentClaimableDistributionRoot() (IRewardsCoordinatorDistributionRoot, error) { - return _RewardsCoordinatorStorage.Contract.GetCurrentClaimableDistributionRoot(&_RewardsCoordinatorStorage.CallOpts) -} - -// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. -// -// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) GetCurrentClaimableDistributionRoot() (IRewardsCoordinatorDistributionRoot, error) { - return _RewardsCoordinatorStorage.Contract.GetCurrentClaimableDistributionRoot(&_RewardsCoordinatorStorage.CallOpts) -} - // GetCurrentDistributionRoot is a free data retrieval call binding the contract method 0x9be3d4e4. // // Solidity: function getCurrentDistributionRoot() view returns((bytes32,uint32,uint32,bool)) @@ -1302,27 +1167,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) Pr return _RewardsCoordinatorStorage.Contract.ProcessClaim(&_RewardsCoordinatorStorage.TransactOpts, claim, recipient) } -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.Contract.RewardOperatorSetForRange(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.Contract.RewardOperatorSetForRange(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) -} - // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -2528,169 +2372,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseOperat return event, nil } -// RewardsCoordinatorStorageOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageOperatorSetRewardCreatedIterator struct { - Event *RewardsCoordinatorStorageOperatorSetRewardCreated // 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 *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) 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(RewardsCoordinatorStorageOperatorSetRewardCreated) - 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(RewardsCoordinatorStorageOperatorSetRewardCreated) - 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 *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RewardsCoordinatorStorageOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageOperatorSetRewardCreated struct { - Avs common.Address - SubmissionNonce *big.Int - RewardsSubmissionHash [32]byte - RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorStorageOperatorSetRewardCreatedIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) - if err != nil { - return nil, err - } - return &RewardsCoordinatorStorageOperatorSetRewardCreatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil -} - -// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) - 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(RewardsCoordinatorStorageOperatorSetRewardCreated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorSetRewardCreated", 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 -} - -// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseOperatorSetRewardCreated(log types.Log) (*RewardsCoordinatorStorageOperatorSetRewardCreated, error) { - event := new(RewardsCoordinatorStorageOperatorSetRewardCreated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // RewardsCoordinatorStorageRewardsClaimedIterator is returned from FilterRewardsClaimed and is used to iterate over the raw logs and unpacked data for RewardsClaimed events raised by the RewardsCoordinatorStorage contract. type RewardsCoordinatorStorageRewardsClaimedIterator struct { Event *RewardsCoordinatorStorageRewardsClaimed // Event containing the contract specifics and raw log diff --git a/src/contracts/core/RewardsCoordinatorStorage.sol b/src/contracts/core/RewardsCoordinatorStorage.sol index 5a8a677b1..db7b6f66b 100644 --- a/src/contracts/core/RewardsCoordinatorStorage.sol +++ b/src/contracts/core/RewardsCoordinatorStorage.sol @@ -97,6 +97,9 @@ abstract contract RewardsCoordinatorStorage is IRewardsCoordinator { /// @notice Mapping: address => bool to check if the address is permissioned to call createRewardsForAllSubmission mapping(address => bool) public isRewardsForAllSubmitter; + /// @notice Mapping: operator => avs => operatorSetId => OperatorCommissionUpdate history + mapping(address => mapping(address => mapping(uint32 => mapping(RewardType => OperatorCommissionUpdate[])))) public + operatorCommissionUpdates; /// @notice Mapping: avs => rewardsSubmissionForAllEarnersHash => bool to check /// if rewards submission hash for all stakers and operators has been submitted diff --git a/src/contracts/interfaces/IRewardsCoordinator.sol b/src/contracts/interfaces/IRewardsCoordinator.sol index 5efe08888..75dcff01e 100644 --- a/src/contracts/interfaces/IRewardsCoordinator.sol +++ b/src/contracts/interfaces/IRewardsCoordinator.sol @@ -148,6 +148,16 @@ interface IRewardsCoordinator { uint32 duration; } + struct OperatorSetRewardsSubmission { + RewardType rewardType; + uint32 operatorSetId; + StrategyAndMultiplier[] strategiesAndMultipliers; + IERC20 token; + uint256 amount; + uint32 startTimestamp; + uint32 duration; + } + /** * @notice A distribution root is a merkle root of the distribution of earnings for a given period. * The RewardsCoordinator stores all historical distribution roots so that earners can claim their earnings against older roots @@ -263,7 +273,6 @@ interface IRewardsCoordinator { event ActivationDelaySet(uint32 oldActivationDelay, uint32 newActivationDelay); event GlobalCommissionBipsSet(uint16 oldGlobalCommissionBips, uint16 newGlobalCommissionBips); - /// @notice emitted when an operator commission is set for a specific OperatorSet and RewardType event OperatorCommissionUpdated( address indexed operator, @@ -272,7 +281,6 @@ interface IRewardsCoordinator { uint16 newCommissionBips, uint32 effectTimestamp ); - event ClaimerForSet(address indexed earner, address indexed oldClaimer, address indexed claimer); /// @notice rootIndex is the specific array index of the newly created root in the storage array diff --git a/src/test/unit/RewardsCoordinatorUnit.t.sol b/src/test/unit/RewardsCoordinatorUnit.t.sol index d88ad1cd3..eeccce9ae 100644 --- a/src/test/unit/RewardsCoordinatorUnit.t.sol +++ b/src/test/unit/RewardsCoordinatorUnit.t.sol @@ -2972,4 +2972,4 @@ contract RewardsCoordinatorUnitTests_rewardOperatorSetForRange is RewardsCoordin ); } } -} \ No newline at end of file +} From 04e1a473b7a6cf69f0dfec4c022d17a04655d421 Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Mon, 12 Aug 2024 14:57:45 -0400 Subject: [PATCH 07/47] feat: slashing and magnitude allocations feat: encoded operatorSet mapping keys and duplicate check (#704) * feat: operatorSet encoded mapping keys * chore: natspec * refactor: add allocationDelay require chore: add back legacy functions chore: update interfaces and nits feat: update to max 1 alloc/dealloc (#703) * feat: update to max 1 alloc/dealloc * fix: naming * fix: compile build: bindings feat: getAllocatableMagnitude feat: set allocations (#691) * feat: set allocations * cleanup * fixes * fix perms on modifyAllocations * fix initialization issues * feat: operatorSignature and remove allocator * build: bindings * fix: max allocation updates check --------- feat: allocator signatures allocate/deallocate (#690) * feat: operator commission bips (#627) * feat: operator commission bips configured with a delay * build: bindings * fix: interfaces and comments * fix: storage gap and comments * chore: tests cleanup * build: bindings * chore: `forge fmt src/contracts` * feat: `operatorCommissionUpdates` length getter * fix: remove unused imports * fix: optimizations * chore: uncheckeds and remove dup view * build: bindings * chore: format --------- * feat: refactor to free all opsets on allo/deallo * refactor: pendingFreeMagnitude and index pointers * feat: numToComplete and rebase cleanup * feat: allocator signature * feat: allocator function in DM fixed checkpoints typo as well * build: bindings --------- Co-authored-by: clandestine.eth <96172957+0xClandestine@users.noreply.github.com> feat: refactor to free all opsets on allo/deallo (#680) * feat: operator commission bips (#627) * feat: operator commission bips configured with a delay * build: bindings * fix: interfaces and comments * fix: storage gap and comments * chore: tests cleanup * build: bindings * chore: `forge fmt src/contracts` * feat: `operatorCommissionUpdates` length getter * fix: remove unused imports * fix: optimizations * chore: uncheckeds and remove dup view * build: bindings * chore: format --------- * feat: refactor to free all opsets on allo/deallo * refactor: pendingFreeMagnitude and index pointers * chore: nits * chore: reorder storage * feat: numToComplete and rebase cleanup --------- Co-authored-by: clandestine.eth <96172957+0xClandestine@users.noreply.github.com> chore: add check for pending deallocations build: bindings chore: rename back to checkpoints Co-Authored-By: gpsanant Co-Authored-By: clandestine.eth <96172957+0xClandestine@users.noreply.github.com> --- .gitignore | 4 + pkg/bindings/AVSDirectory/binding.go | 2336 ++++++++++++++--- pkg/bindings/AVSDirectoryStorage/binding.go | 2025 ++++++++++++-- pkg/bindings/Checkpoints/binding.go | 203 ++ pkg/bindings/DelegationManager/binding.go | 2 +- pkg/bindings/EigenPodManager/binding.go | 2 +- pkg/bindings/IAVSDirectory/binding.go | 1765 +++++++++++-- pkg/bindings/IRewardsCoordinator/binding.go | 232 +- pkg/bindings/MagnitudeCheckpoints/binding.go | 203 ++ pkg/bindings/RewardsCoordinator/binding.go | 300 ++- .../RewardsCoordinatorStorage/binding.go | 325 ++- src/contracts/core/AVSDirectory.sol | 612 ++++- src/contracts/core/AVSDirectoryStorage.sol | 36 +- .../core/RewardsCoordinatorStorage.sol | 3 - src/contracts/interfaces/IAVSDirectory.sol | 204 +- .../interfaces/IRewardsCoordinator.sol | 11 - src/contracts/libraries/Checkpoints.sol | 287 ++ src/test/mocks/AVSDirectoryMock.sol | 56 +- 18 files changed, 7847 insertions(+), 759 deletions(-) create mode 100644 pkg/bindings/Checkpoints/binding.go create mode 100644 pkg/bindings/MagnitudeCheckpoints/binding.go create mode 100644 src/contracts/libraries/Checkpoints.sol diff --git a/.gitignore b/.gitignore index cb82d385c..3213174f1 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,7 @@ InheritanceGraph.png surya_report.md .idea + +*state.json +deployed_strategies.json +populate_src* \ No newline at end of file diff --git a/pkg/bindings/AVSDirectory/binding.go b/pkg/bindings/AVSDirectory/binding.go index 86422e510..69917ce38 100644 --- a/pkg/bindings/AVSDirectory/binding.go +++ b/pkg/bindings/AVSDirectory/binding.go @@ -29,6 +29,19 @@ var ( _ = abi.ConvertType ) +// IAVSDirectoryMagnitudeAdjustment is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryMagnitudeAdjustment struct { + Strategy common.Address + OperatorSets []IAVSDirectoryOperatorSet + MagnitudeDiffs []uint64 +} + +// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryOperatorSet struct { + Avs common.Address + OperatorSetId uint32 +} + // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -38,8 +51,8 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryMetaData contains all meta data concerning the AVSDirectory contract. var AVSDirectoryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"deregisterFromAVSOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"memberInfo\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"inTotalSets\",\"type\":\"uint248\",\"internalType\":\"uint248\"},{\"name\":\"isLegacyOperator\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"isLegacyOperator\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", - Bin: "0x60c06040523480156200001157600080fd5b5060405162002b9838038062002b98833981016040819052620000349162000118565b6001600160a01b0381166080526200004b62000056565b504660a0526200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a051612a1a6200017e600039600061181c0152600081816104120152818161096501526110c10152612a1a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80639926ee7d116100f9578063d79aceab11610097578063f2fde38b11610071578063f2fde38b14610468578063f37c521c1461047b578063f698da25146104da578063fabc1cbc146104e257600080fd5b8063d79aceab146103e6578063df5cf7231461040d578063ec76f4421461043457600080fd5b8063a364f4da116100d3578063a364f4da14610386578063a98fb35514610399578063c1a8e2c5146103ac578063c825fe68146103bf57600080fd5b80639926ee7d1461034d5780639c6c518414610360578063a1060c881461037357600080fd5b8063595c6a6711610166578063715018a611610140578063715018a6146102f6578063886f1195146102fe5780638da5cb5b14610329578063955e66961461033a57600080fd5b8063595c6a67146102c35780635ac86ab7146102cb5780635c975abb146102ee57600080fd5b80631e2199e2116101a25780631e2199e21461020457806320606b7014610217578063374823b5146102515780633c4385d01461028f57600080fd5b806310d67a2f146101c9578063136439dd146101de5780631794bb3c146101f1575b600080fd5b6101dc6101d73660046121b8565b6104f5565b005b6101dc6101ec3660046121dc565b6105b1565b6101dc6101ff3660046121f5565b6106f0565b6101dc61021236600461239e565b61081a565b61023e7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61027f61025f36600461241a565b609860209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610248565b61027f61029d36600461245f565b609a60209081526000938452604080852082529284528284209052825290205460ff1681565b6101dc610d21565b61027f6102d93660046124a6565b606654600160ff9092169190911b9081161490565b60665461023e565b6101dc610de8565b606554610311906001600160a01b031681565b6040516001600160a01b039091168152602001610248565b6033546001600160a01b0316610311565b61023e6103483660046124c9565b610dfc565b6101dc61035b366004612530565b610e61565b6101dc61036e366004612580565b611230565b61023e6103813660046125d5565b611265565b6101dc6103943660046121b8565b6112cf565b6101dc6103a736600461261b565b6113da565b6101dc6103ba366004612580565b611421565b61023e7f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61023e7fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6103117f000000000000000000000000000000000000000000000000000000000000000081565b6101dc6104423660046121dc565b33600090815260986020908152604080832093835292905220805460ff19166001179055565b6101dc6104763660046121b8565b611456565b6104bb61048936600461268d565b60996020908152600092835260408084209091529082529020546001600160f81b03811690600160f81b900460ff1682565b604080516001600160f81b039093168352901515602083015201610248565b61023e6114cc565b6101dc6104f03660046121dc565b6114db565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056c91906126c6565b6001600160a01b0316336001600160a01b0316146105a55760405162461bcd60e51b815260040161059c906126e3565b60405180910390fd5b6105ae81611637565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156105f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061d919061272d565b6106395760405162461bcd60e51b815260040161059c9061274f565b606654818116146106b25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161059c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156107105750600054600160ff909116105b8061072a5750303b15801561072a575060005460ff166001145b61078d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161059c565b6000805460ff1916600117905580156107b0576000805461ff0019166101001790555b6107ba838361172e565b6107c2611818565b6097556107ce846118e1565b8015610814576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b606654600090600190811614156108435760405162461bcd60e51b815260040161059c90612797565b42826040015110156108bb5760405162461bcd60e51b8152602060048201526047602482015260008051602061298583398151915260448201527f70657261746f72536574733a206f70657261746f72207369676e617475726520606482015266195e1c1a5c995960ca1b608482015260a40161059c565b6001600160a01b038516600090815260986020908152604080832085830151845290915290205460ff16156109465760405162461bcd60e51b815260206004820152603f602482015260008051602061298583398151915260448201527f70657261746f72536574733a2073616c7420616c7265616479207370656e7400606482015260840161059c565b6040516336b87bd760e11b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156109ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d0919061272d565b610a4f5760405162461bcd60e51b8152602060048201526056602482015260008051602061298583398151915260448201527f70657261746f72536574733a206f70657261746f72206e6f7420726567697374606482015275195c9959081d1bc8115a59d95b93185e595c881e595d60521b608482015260a40161059c565b610a6f85610a6833878787602001518860400151610dfc565b8451611933565b6001600160a01b03851660008181526098602090815260408083208683015184528252808320805460ff1916600117905533835260998252808320938352929052208054600160f81b900460ff16610b045780546001600160f81b0316600160f81b1781556040516001815233906001600160a01b038816906000805160206129a58339815191529060200160405180910390a35b60005b84811015610cf657336000908152609a602090815260408083206001600160a01b038b168452909152812090878784818110610b4557610b456127ce565b9050602002016020810190610b5a91906127e4565b63ffffffff16815260208101919091526040016000205460ff1615610bfb5760405162461bcd60e51b8152602060048201526058602482015260008051602061298583398151915260448201527f70657261746f72536574733a206f70657261746f7220616c726561647920726560648201527f676973746572656420746f206f70657261746f72207365740000000000000000608482015260a40161059c565b336000908152609a602090815260408083206001600160a01b038b1684529091528120600191888885818110610c3357610c336127ce565b9050602002016020810190610c4891906127e4565b63ffffffff1681526020810191909152604001600020805460ff19169115159190911790557f0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba3098733888885818110610ca257610ca26127ce565b9050602002016020810190610cb791906127e4565b604080516001600160a01b03948516815293909216602084015263ffffffff169082015260600160405180910390a1610cef81612815565b9050610b07565b5080546001600160f81b031981166001600160f81b0391821695909501169390931790925550505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d919061272d565b610da95760405162461bcd60e51b815260040161059c9061274f565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610df0611af2565b610dfa60006118e1565b565b6000610e577f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f9298787878787604051602001610e3c96959493929190612830565b60405160208183030381529060405280519060200120611b4c565b9695505050505050565b60665460009060019081161415610e8a5760405162461bcd60e51b815260040161059c90612797565b4282604001511015610ef25760405162461bcd60e51b815260206004820152603e60248201526000805160206129c583398151915260448201527f56533a206f70657261746f72207369676e617475726520657870697265640000606482015260840161059c565b3360009081526099602090815260408083206001600160a01b038716845290915290208054600160f81b900460ff1615610f825760405162461bcd60e51b815260206004820152603f60248201526000805160206129c583398151915260448201527f56533a206f70657261746f7220616c7265616479207265676973746572656400606482015260840161059c565b80546001600160f81b03161561101e5760405162461bcd60e51b815260206004820152606160248201526000805160206129c583398151915260448201527f56533a206f70657261746f7220736574204156532063616e6e6f74207265676960648201527f73746572206f70657261746f72732077697468206c6567616379206d6574686f6084820152601960fa1b60a482015260c40161059c565b6001600160a01b038416600090815260986020908152604080832086830151845290915290205460ff16156110a25760405162461bcd60e51b815260206004820152603660248201526000805160206129c58339815191526044820152751594ce881cd85b1d08185b1c9958591e481cdc195b9d60521b606482015260840161059c565b6040516336b87bd760e11b81526001600160a01b0385811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112c919061272d565b6111a25760405162461bcd60e51b815260206004820152604d60248201526000805160206129c583398151915260448201527f56533a206f70657261746f72206e6f74207265676973746572656420746f204560648201526c1a59d95b93185e595c881e595d609a1b608482015260a40161059c565b6111c1846111ba863387602001518860400151611265565b8551611933565b6001600160a01b0384166000818152609860209081526040808320878301518452825291829020805460ff1916600190811790915584546001600160f81b0316600160f81b17855591519182523392916000805160206129a5833981519152910160405180910390a350505050565b606654600090600190811614156112595760405162461bcd60e51b815260040161059c90612797565b61081484338585611b93565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290526000906112c69060c001610e3c565b95945050505050565b606654600090600190811614156112f85760405162461bcd60e51b815260040161059c90612797565b3360009081526099602090815260408083206001600160a01b038616845290915290208054600160f81b900460ff166113995760405162461bcd60e51b815260206004820152603f60248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4156533a206f70657261746f72206e6f74207265676973746572656400606482015260840161059c565b80546001600160f81b031681556040516000815233906001600160a01b038516906000805160206129a58339815191529060200160405180910390a3505050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371383836040516114159291906128a0565b60405180910390a25050565b6066546000906001908116141561144a5760405162461bcd60e51b815260040161059c90612797565b61081433858585611b93565b61145e611af2565b6001600160a01b0381166114c35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161059c565b6105ae816118e1565b60006114d6611818565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155291906126c6565b6001600160a01b0316336001600160a01b0316146115825760405162461bcd60e51b815260040161059c906126e3565b6066541981196066541916146116005760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161059c565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106e5565b6001600160a01b0381166116c55760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161059c565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561174f57506001600160a01b03821615155b6117d15760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161059c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261181482611637565b5050565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611849575060975490565b50604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383163b15611a5257604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e9061197390869086906004016128cf565b602060405180830381865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b4919061292c565b6001600160e01b03191614611a4d5760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a40161059c565b505050565b826001600160a01b0316611a668383611e2e565b6001600160a01b031614611a4d5760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a40161059c565b6033546001600160a01b03163314610dfa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161059c565b6000611b56611818565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60005b81811015611d9c576001600160a01b038086166000908152609a60209081526040808320938816835292905290812090848484818110611bd857611bd86127ce565b9050602002016020810190611bed91906127e4565b63ffffffff16815260208101919091526040016000205460ff16611c9f5760405162461bcd60e51b815260206004820152605860248201527f4156534469726563746f72792e646572656769737465724f70657261746f724660448201527f726f6d4f70657261746f725365743a206f70657261746f72206e6f742072656760648201527f6973746572656420666f72206f70657261746f72207365740000000000000000608482015260a40161059c565b6001600160a01b038086166000908152609a60209081526040808320938816835292905290812081858585818110611cd957611cd96127ce565b9050602002016020810190611cee91906127e4565b63ffffffff1681526020810191909152604001600020805460ff19169115159190911790557f9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df828486858585818110611d4857611d486127ce565b9050602002016020810190611d5d91906127e4565b604080516001600160a01b03948516815293909216602084015263ffffffff169082015260600160405180910390a1611d9581612815565b9050611b96565b506001600160a01b03808516600090815260996020908152604080832093871683529290522080546001600160f81b03808216849003166001600160f81b031990911681178255611e275780546001600160f81b03168155604051600081526001600160a01b0386811691908616906000805160206129a58339815191529060200160405180910390a35b5050505050565b6000806000611e3d8585611e52565b91509150611e4a81611ec2565b509392505050565b600080825160411415611e895760208301516040840151606085015160001a611e7d8782858561207d565b94509450505050611ebb565b825160401415611eb35760208301516040840151611ea886838361216a565b935093505050611ebb565b506000905060025b9250929050565b6000816004811115611ed657611ed6612956565b1415611edf5750565b6001816004811115611ef357611ef3612956565b1415611f415760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161059c565b6002816004811115611f5557611f55612956565b1415611fa35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161059c565b6003816004811115611fb757611fb7612956565b14156120105760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161059c565b600481600481111561202457612024612956565b14156105ae5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161059c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156120b45750600090506003612161565b8460ff16601b141580156120cc57508460ff16601c14155b156120dd5750600090506004612161565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612131573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661215a57600060019250925050612161565b9150600090505b94509492505050565b6000806001600160ff1b0383168161218760ff86901c601b61296c565b90506121958782888561207d565b935093505050935093915050565b6001600160a01b03811681146105ae57600080fd5b6000602082840312156121ca57600080fd5b81356121d5816121a3565b9392505050565b6000602082840312156121ee57600080fd5b5035919050565b60008060006060848603121561220a57600080fd5b8335612215816121a3565b92506020840135612225816121a3565b929592945050506040919091013590565b60008083601f84011261224857600080fd5b50813567ffffffffffffffff81111561226057600080fd5b6020830191508360208260051b8501011115611ebb57600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156122b4576122b461227b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156122e3576122e361227b565b604052919050565b6000606082840312156122fd57600080fd5b612305612291565b9050813567ffffffffffffffff8082111561231f57600080fd5b818401915084601f83011261233357600080fd5b81356020828211156123475761234761227b565b612359601f8301601f191682016122ba565b9250818352868183860101111561236f57600080fd5b818185018285013760008183850101528285528086013581860152505050506040820135604082015292915050565b600080600080606085870312156123b457600080fd5b84356123bf816121a3565b9350602085013567ffffffffffffffff808211156123dc57600080fd5b6123e888838901612236565b9095509350604087013591508082111561240157600080fd5b5061240e878288016122eb565b91505092959194509250565b6000806040838503121561242d57600080fd5b8235612438816121a3565b946020939093013593505050565b803563ffffffff8116811461245a57600080fd5b919050565b60008060006060848603121561247457600080fd5b833561247f816121a3565b9250602084013561248f816121a3565b915061249d60408501612446565b90509250925092565b6000602082840312156124b857600080fd5b813560ff811681146121d557600080fd5b6000806000806000608086880312156124e157600080fd5b85356124ec816121a3565b9450602086013567ffffffffffffffff81111561250857600080fd5b61251488828901612236565b9699909850959660408101359660609091013595509350505050565b6000806040838503121561254357600080fd5b823561254e816121a3565b9150602083013567ffffffffffffffff81111561256a57600080fd5b612576858286016122eb565b9150509250929050565b60008060006040848603121561259557600080fd5b83356125a0816121a3565b9250602084013567ffffffffffffffff8111156125bc57600080fd5b6125c886828701612236565b9497909650939450505050565b600080600080608085870312156125eb57600080fd5b84356125f6816121a3565b93506020850135612606816121a3565b93969395505050506040820135916060013590565b6000806020838503121561262e57600080fd5b823567ffffffffffffffff8082111561264657600080fd5b818501915085601f83011261265a57600080fd5b81358181111561266957600080fd5b86602082850101111561267b57600080fd5b60209290920196919550909350505050565b600080604083850312156126a057600080fd5b82356126ab816121a3565b915060208301356126bb816121a3565b809150509250929050565b6000602082840312156126d857600080fd5b81516121d5816121a3565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561273f57600080fd5b815180151581146121d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156127f657600080fd5b6121d582612446565b634e487b7160e01b600052601160045260246000fd5b6000600019821415612829576128296127ff565b5060010190565b8681526001600160a01b03861660208083019190915260a0604083018190528201859052600090869060c08401835b888110156128885763ffffffff61287585612446565b168252928201929082019060010161285f565b50606085019690965250505060800152949350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b82815260006020604081840152835180604085015260005b81811015612903578581018301518582016060015282016128e7565b81811115612915576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561293e57600080fd5b81516001600160e01b0319811681146121d557600080fd5b634e487b7160e01b600052602160045260246000fd5b6000821982111561297f5761297f6127ff565b50019056fe4156534469726563746f72792e72656769737465724f70657261746f72546f4f1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f4156534469726563746f72792e72656769737465724f70657261746f72546f41a2646970667358221220abc08f435dccd66e9e342b55c33d48f0b14953f563bc7cf580c802cd03e5343764736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ALLOCATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAGNITUDE_ADJUSTMENT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_PENDING_UPDATES\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"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\":\"allocate\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAdjustment[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeDiffs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"allocatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"allocatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateMagnitudeAdjustmentDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"adjustments\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAdjustment[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeDiffs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deallocate\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deallocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAdjustment[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeDiffs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"allocatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"freeMagnitude\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetMemberCount\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"registered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"lastDeregisteredTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOf\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOf\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"bipsToSlash\",\"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\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateFreeMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToComplete\",\"type\":\"uint8[]\",\"internalType\":\"uint8[]\"}],\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeAllocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToAllocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeDeallocationCompleted\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"freeMagnitudeAdded\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeQueueDeallocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToDeallocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"completableTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"bipsToSlash\",\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", + Bin: "0x60c06040523480156200001157600080fd5b50604051620062d8380380620062d8833981016040819052620000349162000118565b6001600160a01b0381166080526200004b62000056565b504660a0526200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a05161615362000185600039600061295f0152600081816107fd01528181610e4e015281816111d8015261163701526161536000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80638522fcb111610182578063c1a8e2c5116100e9578063dce974b9116100a2578063ef2dfa8d1161007c578063ef2dfa8d14610853578063f2fde38b14610866578063f698da2514610879578063fabc1cbc1461088157600080fd5b8063dce974b9146107d1578063df5cf723146107f8578063ec76f4421461081f57600080fd5b8063c1a8e2c51461071f578063c825fe6814610732578063cbdf0e4214610759578063d79aceab1461076c578063da2ff05d14610793578063dae226b6146107a657600080fd5b8063a98fb3551161013b578063a98fb355146106c3578063aec205c5146106d6578063afe02ed5146106de578063b2841d48146106f1578063b3e52eaa14610704578063bd74a06c1461070c57600080fd5b80638522fcb11461062e578063886f1195146106415780638da5cb5b1461066c5780638de549441461067d578063955e66961461069d578063a1060c88146106b057600080fd5b806346fb3a00116102415780636fbb031c116101fa5780637673e93a116101d45780637673e93a146105a35780637b205de3146105c657806384b78fc2146105ed57806384d76f7b1461060057600080fd5b80636fbb031c146105695780637019670814610588578063715018a61461059b57600080fd5b806346fb3a001461048157806349075da3146104af578063595c6a67146104ea5780635ac86ab7146104f25780635c975abb146105155780635fd6abfd1461051d57600080fd5b80631e68134e116102935780631e68134e1461037557806320606b70146103d257806333429a6a146104075780633367a33c1461042d578063374823b5146104405780633fee332d1461046e57600080fd5b80630d5387c5146102db57806310d67a2f146103045780631352c3e614610319578063136439dd1461033c5780631794bb3c1461034f5780631e2199e214610362575b600080fd5b6102ee6102e9366004614fe1565b610894565b6040516102fb9190615016565b60405180910390f35b61031761031236600461507c565b6109d9565b005b61032c610327366004615120565b610a95565b60405190151581526020016102fb565b61031761034a3660046151a5565b610b25565b61031761035d3660046151be565b610c64565b6103176103703660046152f5565b610d8e565b6103b6610383366004615370565b609e60209081526000938452604080852082529284528284209052825290205460ff811690610100900463ffffffff1682565b60408051921515835263ffffffff9091166020830152016102fb565b6103f97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020016102fb565b61041a6104153660046153b7565b6110ae565b60405161ffff90911681526020016102fb565b61031761043b36600461541b565b6111b6565b61032c61044e36600461549b565b609960209081526000928352604080842090915290825290205460ff1681565b61031761047c3660046154c7565b611304565b61032c61048f36600461549b565b60a560209081526000928352604080842090915290825290205460ff1681565b6104dd6104bd366004615555565b609860209081526000928352604080842090915290825290205460ff1681565b6040516102fb91906155a4565b61031761154e565b61032c6105003660046155cc565b606654600160ff9092169190911b9081161490565b6066546103f9565b61055161052b366004615555565b60a16020908152600092835260408084209091529082529020546001600160401b031681565b6040516001600160401b0390911681526020016102fb565b610573621baf8081565b60405163ffffffff90911681526020016102fb565b61031761059636600461541b565b611615565b610317611733565b61032c6105b136600461507c565b609a6020526000908152604090205460ff1681565b6103f97fb3cc2868468e0461dcbecef0a4fcb7a8ef26c2e1f3e59c9d0de6afcc74448a2481565b6103176105fb3660046155ef565b611747565b61032c61060e366004615671565b609b60209081526000928352604080842090915290825290205460ff1681565b6103f961063c3660046156a6565b6117b9565b606554610654906001600160a01b031681565b6040516001600160a01b0390911681526020016102fb565b6033546001600160a01b0316610654565b61069061068b36600461549b565b61181e565b6040516102fb919061570c565b6103f96106ab3660046156a6565b61185f565b6103f96106be366004615732565b61189f565b6103176106d1366004615778565b611909565b610317611950565b6103176106ec3660046157e9565b611a18565b6103f96106ff3660046156a6565b611be5565b6103f9600181565b61031761071a36600461582a565b611c25565b61031761072d3660046158ab565b612158565b6103f97f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b6103f961076736600461507c565b61218d565b6103f97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b61032c6107a1366004615120565b6121ae565b6103f96107b4366004615671565b609c60209081526000928352604080842090915290825290205481565b6103f97f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b6106547f000000000000000000000000000000000000000000000000000000000000000081565b61031761082d3660046151a5565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b6103176108613660046158ff565b6121da565b61031761087436600461507c565b612583565b6103f96125f9565b61031761088f3660046151a5565b612608565b6001600160a01b0383166000908152609d602052604081206060919084906108bb90612764565b6108c59190615980565b9050808311156108d3578092505b826001600160401b038111156108eb576108eb615099565b60405190808252806020026020018201604052801561093057816020015b60408051808201909152600080825260208201528152602001906001900390816109095790505b50915060005b838110156109d0576109a261096c61094e8388615997565b6001600160a01b0389166000908152609d602052604090209061276e565b60408051808201909152600080825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b8382815181106109b4576109b46159af565b6020026020010181905250806109c9906159c5565b9050610936565b50509392505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5091906159e0565b6001600160a01b0316336001600160a01b031614610a895760405162461bcd60e51b8152600401610a80906159fd565b60405180910390fd5b610a928161277a565b50565b80516001600160a01b039081166000908152609e6020908152604080832093861683529281528282208185015163ffffffff908116845290825283832084518086019095525460ff8116151585526101009004169083015290610af884846121ae565b80610b1b575042621baf808260200151610b129190615a47565b63ffffffff1610155b9150505b92915050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b919190615a6f565b610bad5760405162461bcd60e51b8152600401610a8090615a91565b60665481811614610c265760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610a80565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff1615808015610c845750600054600160ff909116105b80610c9e5750303b158015610c9e575060005460ff166001145b610d015760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a80565b6000805460ff191660011790558015610d24576000805461ff0019166101001790555b610d2e8383612871565b610d3661295b565b609755610d4284612a24565b8015610d88576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60665460019060029081161415610db75760405162461bcd60e51b8152600401610a8090615ad9565b4282604001511015610e2f5760405162461bcd60e51b815260206004820152604760248201526000805160206160fe83398151915260448201527f70657261746f72536574733a206f70657261746f72207369676e617475726520606482015266195e1c1a5c995960ca1b608482015260a401610a80565b6040516336b87bd760e11b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190615a6f565b610f385760405162461bcd60e51b815260206004820152605660248201526000805160206160fe83398151915260448201527f70657261746f72536574733a206f70657261746f72206e6f7420726567697374606482015275195c9959081d1bc8115a59d95b93185e595c881e595d60521b608482015260a401610a80565b336000908152609a602052604090205460ff16610fbf5760405162461bcd60e51b815260206004820152604b60248201526000805160206160fe83398151915260448201527f70657261746f72536574733a20415653206973206e6f7420616e206f7065726160648201526a746f72207365742041565360a81b608482015260a401610a80565b6001600160a01b038516600090815260996020908152604080832085830151845290915290205460ff161561104a5760405162461bcd60e51b815260206004820152603f60248201526000805160206160fe83398151915260448201527f70657261746f72536574733a2073616c7420616c7265616479207370656e74006064820152608401610a80565b61106a856110633387878760200151886040015161185f565b8451612a76565b6001600160a01b03851660009081526099602090815260408083208583015184529091529020805460ff191660011790556110a785338686612c30565b5050505050565b6001600160a01b038085166000908152609f60209081526040808320938616835292905290812081906110e19084612fff565b6001600160a01b03808816600090815260a06020908152604080832093891683529281529181209293509161117e918691908490611121908b018b61507c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008960200160208101906111569190615b10565b63ffffffff1663ffffffff168152602001908152602001600020612fff90919063ffffffff16565b9050816001600160401b0316612710826001600160401b03166111a19190615b2b565b6111ab9190615b60565b979650505050505050565b6040516369066d9160e01b81526001600160a01b0385811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906369066d9190602401602060405180830381865afa158015611221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124591906159e0565b9050336001600160a01b03821614611264576112648186868686613057565b6000611273621baf8042615a47565b905060005b848110156112fb576112bd87878784818110611296576112966159af565b90506020028101906112a89190615b82565b6112b690602081019061507c565b600061320b565b6112eb878787848181106112d3576112d36159af565b90506020028101906112e59190615b82565b846133b2565b6112f4816159c5565b9050611278565b50505050505050565b6066546001906002908116141561132d5760405162461bcd60e51b8152600401610a8090615ad9565b8151516113c557336001600160a01b038716146113c05760405162461bcd60e51b815260206004820152604560248201527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a2063616c6c6572206d757374206265206f70656064820152643930ba37b960d91b608482015260a401610a80565b61153a565b42826040015110156114505760405162461bcd60e51b815260206004820152604860248201527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a206f70657261746f72207369676e617475726560648201526708195e1c1a5c995960c21b608482015260a401610a80565b6001600160a01b038616600090815260996020908152604080832085830151845290915290205460ff16156114ef576040805162461bcd60e51b81526020600482015260248101919091527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a2073616c7420616c7265616479207370656e746064820152608401610a80565b6115088661106387878787602001518860400151611be5565b6001600160a01b03861660009081526099602090815260408083208583015184529091529020805460ff191660011790555b61154685878686613983565b505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ba9190615a6f565b6115d65760405162461bcd60e51b8152600401610a8090615a91565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6040516369066d9160e01b81526001600160a01b0385811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906369066d9190602401602060405180830381865afa158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a491906159e0565b9050336001600160a01b038216146116c3576116c38186868686613057565b60006116d2621baf8042615a47565b905060005b848110156112fb576116f587878784818110611296576112966159af565b6117238787878481811061170b5761170b6159af565b905060200281019061171d9190615b82565b84613b65565b61172c816159c5565b90506116d7565b61173b614157565b6117456000612a24565b565b60005b83811015611546576117a986868684818110611768576117686159af565b905060200201602081019061177d919061507c565b85858581811061178f5761178f6159af565b90506020020160208101906117a491906155cc565b61320b565b6117b2816159c5565b905061174a565b60006118147fb3cc2868468e0461dcbecef0a4fcb7a8ef26c2e1f3e59c9d0de6afcc74448a2487878787876040516020016117f996959493929190615c9e565b604051602081830303815290604052805190602001206141b1565b9695505050505050565b60408051808201909152600080825260208201526001600160a01b0383166000908152609d602052604090206118589061096c908461276e565b9392505050565b60006118147f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92987878787876040516020016117f996959493929190615df8565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290526000906119009060c0016117f9565b95945050505050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051611944929190615e38565b60405180910390a25050565b336000908152609a602052604090205460ff16156119d65760405162461bcd60e51b815260206004820152603e60248201527f4156534469726563746f72792e6265636f6d654f70657261746f72536574415660448201527f533a20616c726561647920616e206f70657261746f72207365742041565300006064820152608401610a80565b336000818152609a6020526040808220805460ff19166001179055517f702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf9190a2565b60005b81811015611be057336000908152609b6020526040812090848484818110611a4557611a456159af565b9050602002016020810190611a5a9190615b10565b63ffffffff16815260208101919091526040016000205460ff1615611ae75760405162461bcd60e51b815260206004820152603b60248201527f4156534469726563746f72792e6372656174654f70657261746f725365743a2060448201527f6f70657261746f722073657420616c72656164792065786973747300000000006064820152608401610a80565b336000908152609b60205260408120600191858585818110611b0b57611b0b6159af565b9050602002016020810190611b209190615b10565b63ffffffff1663ffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c6040518060400160405280336001600160a01b03168152602001858585818110611b9e57611b9e6159af565b9050602002016020810190611bb39190615b10565b63ffffffff169052604051611bc8919061570c565b60405180910390a1611bd9816159c5565b9050611a1b565b505050565b60006118147f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49587878787876040516020016117f996959493929190615df8565b611c52856040518060400160405280336001600160a01b031681526020018763ffffffff16815250610a95565b611ccf5760405162461bcd60e51b815260206004820152604260248201527f4156534469726563746f72792e736c6173684f70657261746f723a206f70657260448201527f61746f72206e6f7420736c61736861626c6520666f72206f70657261746f7253606482015261195d60f21b608482015260a401610a80565b60005b82811015611546576001600160a01b038616600090815260a0602052604081208190611d5d90429083898988818110611d0d57611d0d6159af565b9050602002016020810190611d22919061507c565b6001600160a01b0316815260208082019290925260409081016000908120338252835281812063ffffffff808e16835293522091906141f816565b9050612710611d796001600160401b03831661ffff8716615b2b565b611d839190615b60565b6001600160a01b038916600090815260a060205260408120919350611e139142916001600160401b03861691908a8a89818110611dc257611dc26159af565b9050602002016020810190611dd7919061507c565b6001600160a01b0316815260208082019290925260409081016000908120338252835281812063ffffffff808f16835293522092919061429d16565b506001600160a01b038716600090815260a46020526040812081878786818110611e3f57611e3f6159af565b9050602002016020810190611e54919061507c565b6001600160a01b0316815260208082019290925260409081016000908120338252835281812063ffffffff8b1682529092529020549050805b801561205e576001600160a01b038916600090815260a46020526040812081898988818110611ebe57611ebe6159af565b9050602002016020810190611ed3919061507c565b6001600160a01b0316815260208082019290925260409081016000908120338252835281812063ffffffff8d1682529092529020611f12600184615980565b81548110611f2257611f226159af565b60009182526020808320909101546001600160a01b038d16835260a290915260408220909250818a8a89818110611f5b57611f5b6159af565b9050602002016020810190611f70919061507c565b6001600160a01b03166001600160a01b031681526020019081526020016000208281548110611fa157611fa16159af565b6000918252602090912001805490915063ffffffff428116600160401b9092041610611fce57505061205e565b805460009061271090611fee906001600160401b031661ffff8b16615b2b565b611ff89190615b60565b8254909150819083906000906120189084906001600160401b0316615e67565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555080866120489190615e8f565b95505050508061205790615eb1565b9050611e8d565b50506001600160a01b0387166000908152609f602052604081206121449142916001600160401b038516916120da91908a8a898181106120a0576120a06159af565b90506020020160208101906120b5919061507c565b6001600160a01b03166001600160a01b03168152602001908152602001600020614339565b6120e49190615ec8565b6001600160a01b038a166000908152609f602052604081209089898881811061210f5761210f6159af565b9050602002016020810190612124919061507c565b6001600160a01b0316815260208101919091526040016000209190614372565b50505080612151906159c5565b9050611cd2565b606654600190600290811614156121815760405162461bcd60e51b8152600401610a8090615ad9565b610d8833858585613983565b6001600160a01b0381166000908152609d60205260408120610b1f90612764565b60006118586121bc8361438d565b6001600160a01b0385166000908152609d60205260409020906143f2565b606654600190600290811614156122035760405162461bcd60e51b8152600401610a8090615ad9565b336000908152609a602052604090205460ff1661229c5760405162461bcd60e51b815260206004820152604b60248201527f4156534469726563746f72792e6d6967726174654f70657261746f7273546f4f60448201527f70657261746f72536574733a20415653206973206e6f7420616e206f7065726160648201526a746f72207365742041565360a81b608482015260a401610a80565b60005b84811015611546576001336000908152609860205260408120908888858181106122cb576122cb6159af565b90506020020160208101906122e0919061507c565b6001600160a01b0316815260208101919091526040016000205460ff16600181111561230e5761230e61558e565b146123ba5760405162461bcd60e51b815260206004820152606a60248201527f4156534469726563746f72792e6d6967726174654f70657261746f7273546f4f60448201527f70657261746f72536574733a206f70657261746f7220616c7265616479206d6960648201527f677261746564206f72206e6f742061206c656761637920726567697374657265608482015269321037b832b930ba37b960b11b60a482015260c401610a80565b61240e8686838181106123cf576123cf6159af565b90506020020160208101906123e4919061507c565b338686858181106123f7576123f76159af565b90506020028101906124099190615ee8565b612c30565b33600090815260986020526040812081888885818110612430576124306159af565b9050602002016020810190612445919061507c565b6001600160a01b031681526020810191909152604001600020805460ff1916600183818111156124775761247761558e565b02179055503386868381811061248f5761248f6159af565b90506020020160208101906124a4919061507c565b6001600160a01b03167ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4160006040516124dd91906155a4565b60405180910390a3338686838181106124f8576124f86159af565b905060200201602081019061250d919061507c565b6001600160a01b03167f54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01868685818110612549576125496159af565b905060200281019061255b9190615ee8565b604051612569929190615f31565b60405180910390a38061257b816159c5565b91505061229f565b61258b614157565b6001600160a01b0381166125f05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a80565b610a9281612a24565b600061260361295b565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561265b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267f91906159e0565b6001600160a01b0316336001600160a01b0316146126af5760405162461bcd60e51b8152600401610a80906159fd565b60665419811960665419161461272d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610a80565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c59565b6000610b1f825490565b6000611858838361440a565b6001600160a01b0381166128085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610a80565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561289257506001600160a01b03821615155b6129145760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610a80565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26129578261277a565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000046141561298c575060975490565b50604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383163b15612b9057604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90612ab69086908690600401615f4d565b602060405180830381865afa158015612ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af79190615faa565b6001600160e01b03191614611be05760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610a80565b826001600160a01b0316612ba48383614434565b6001600160a01b031614611be05760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610a80565b60005b818110156110a75760006040518060400160405280866001600160a01b03168152602001858585818110612c6957612c696159af565b9050602002016020810190612c7e9190615b10565b63ffffffff1690526001600160a01b0386166000908152609b60205260408120919250858585818110612cb357612cb36159af565b9050602002016020810190612cc89190615b10565b63ffffffff16815260208101919091526040016000205460ff16612d5f5760405162461bcd60e51b815260206004820152604260248201527f4156534469726563746f72792e5f72656769737465724f70657261746f72546f60448201527f4f70657261746f72536574733a20696e76616c6964206f70657261746f722073606482015261195d60f21b608482015260a401610a80565b612d6986826121ae565b15612e025760405162461bcd60e51b815260206004820152605960248201527f4156534469726563746f72792e5f72656769737465724f70657261746f72546f60448201527f4f70657261746f72536574733a206f70657261746f7220616c7265616479207260648201527f65676973746572656420746f206f70657261746f722073657400000000000000608482015260a401610a80565b6001600160a01b0385166000908152609c6020526040812090858585818110612e2d57612e2d6159af565b9050602002016020810190612e429190615b10565b63ffffffff1663ffffffff16815260200190815260200160002060008154612e69906159c5565b90915550612e97612e798261438d565b6001600160a01b0388166000908152609d6020526040902090614458565b506001600160a01b038086166000908152609e60209081526040808320938a16835292905290812081868686818110612ed257612ed26159af565b9050602002016020810190612ee79190615b10565b63ffffffff1681526020810191909152604001600020805490915060ff1615612f9e5760405162461bcd60e51b815260206004820152605a60248201527f4156534469726563746f72792e5f72656769737465724f70657261746f72546f60448201527f4f70657261746f72536574733a206f70657261746f7220616c7265616479207260648201527f65676973746572656420666f72206f70657261746f7220736574000000000000608482015260a401610a80565b805460ff191660011781556040516001600160a01b038816907f43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e90612fe490859061570c565b60405180910390a2505080612ff8906159c5565b9050612c33565b81546000908161301185858385614464565b9050801561304c5761303685613028600184615980565b600091825260209091200190565b54600160201b90046001600160e01b0316611900565b600095945050505050565b42816040013510156130dd5760405162461bcd60e51b815260206004820152604360248201527f4156534469726563746f72792e5f766572696679416c6c6f6361746f7253696760448201527f6e61747572653a20616c6c6f6361746f72207369676e617475726520657870696064820152621c995960ea1b608482015260a401610a80565b6001600160a01b038516600090815260a56020908152604080832084830135845290915290205460ff161561316f5760405162461bcd60e51b815260206004820152603260248201527f4156534469726563746f72792e5f766572696679416c6c6f6361746f725369676044820152711b985d1d5c994e881cd85b1d081cdc195b9d60721b6064820152608401610a80565b6000613186858585856020013586604001356117b9565b90506131d186826131978580615fd4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a7692505050565b506001600160a01b03909416600090815260a56020908152604080832096820135835295905293909320805460ff19166001179055505050565b6001600160a01b03808416600081815260a3602090815260408083209487168084529482528083205493835260a2825280832094835293905291822054909160ff84161561325a57600061325d565b60ff5b90505b818310801561327457508360ff168160ff16105b1561337f576001600160a01b03808716600090815260a26020908152604080832093891683529290529081208054859081106132b2576132b26159af565b6000918252602091829020604080518082019091529101546001600160401b038116825263ffffffff600160401b9091048116928201839052909250421611156132fc575061337f565b80516001600160a01b03808916600090815260a160209081526040808320938b168352929052908120805490919061333e9084906001600160401b0316615e8f565b92506101000a8154816001600160401b0302191690836001600160401b031602179055508361336c906159c5565b93506133778261601a565b915050613260565b50506001600160a01b03938416600090815260a36020908152604080832095909616825293909352929091209190915550565b60006133c1602084018461507c565b90506133d06040840184615ee8565b90506133df602085018561603a565b9050146134665760405162461bcd60e51b815260206004820152604960248201527f4156534469726563746f72792e5f6465616c6c6f636174653a206f706572617460448201527f6f725365747320616e64206d61676e69747564654469666673206c656e677468606482015268040dad2e6dac2e8c6d60bb1b608482015260a401610a80565b366000613476602086018661603a565b9150915060005b818110156112fb576001600160a01b03808816600090815260a060209081526040808320938816835292905290812061354f904290838787878181106134c5576134c56159af565b6134db926020604090920201908101915061507c565b6001600160a01b03166001600160a01b03168152602001908152602001600020600087878781811061350f5761350f6159af565b90506040020160200160208101906135279190615b10565b63ffffffff1663ffffffff1681526020019081526020016000206141f890919063ffffffff16565b905060006135606040890189615ee8565b84818110613570576135706159af565b90506020020160208101906135859190616083565b6001600160401b0316116136015760405162461bcd60e51b815260206004820152603e60248201527f4156534469726563746f72792e5f6465616c6c6f636174653a206d61676e697460448201527f75646544696666206d7573742062652067726561746572207468616e203000006064820152608401610a80565b6001600160401b0381166136186040890189615ee8565b84818110613628576136286159af565b905060200201602081019061363d9190616083565b6001600160401b031611156136ca5760405162461bcd60e51b815260206004820152604760248201527f4156534469726563746f72792e5f6465616c6c6f636174653a2063616e6e6f7460448201527f206465616c6c6f63617465206d6f7265207468616e207768617420697320616c6064820152661b1bd8d85d195960ca1b608482015260a401610a80565b6137d2426136db60408a018a615ee8565b858181106136eb576136eb6159af565b90506020020160208101906137009190616083565b6001600160a01b03808c16600090815260a060209081526040808320938c1683529290529081206001600160401b03929092169190888888818110613747576137476159af565b61375d926020604090920201908101915061507c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888888818110613791576137916159af565b90506040020160200160208101906137a99190615b10565b63ffffffff1663ffffffff16815260200190815260200160002061429d9092919063ffffffff16565b6137f488868686868181106137e9576137e96159af565b9050604002016144ba565b6001600160a01b03888116600090815260a260209081526040808320938916835292905281902080548251808401845290928190613834908c018c615ee8565b87818110613844576138446159af565b90506020020160208101906138599190616083565b6001600160401b03908116825263ffffffff808c166020938401528454600181018655600095865283862085519101805495850151909216600160401b026bffffffffffffffffffffffff19909516921691909117929092179091556001600160a01b03808c16835260a482526040808420918a16845291528120908686868181106138e7576138e76159af565b6138fd926020604090920201908101915061507c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000868686818110613931576139316159af565b90506040020160200160208101906139499190615b10565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902001555061397c816159c5565b905061347d565b60005b818110156110a75760006040518060400160405280876001600160a01b031681526020018585858181106139bc576139bc6159af565b90506020020160208101906139d19190615b10565b63ffffffff16905290506139e585826121ae565b613a7d5760405162461bcd60e51b815260206004820152605960248201527f4156534469726563746f72792e5f646572656769737465724f70657261746f7260448201527f46726f6d4f70657261746f725365743a206f70657261746f72206e6f7420726560648201527f676973746572656420666f72206f70657261746f722073657400000000000000608482015260a401610a80565b6001600160a01b0386166000908152609c6020526040812090858585818110613aa857613aa86159af565b9050602002016020810190613abd9190615b10565b63ffffffff1663ffffffff16815260200190815260200160002060008154613ae490615eb1565b90915550613b12613af48261438d565b6001600160a01b0387166000908152609d6020526040902090614727565b50846001600160a01b03167fad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe82604051613b4c919061570c565b60405180910390a250613b5e816159c5565b9050613986565b6000613b74602084018461507c565b9050366000613b86602086018661603a565b6001600160a01b03808916600090815260a1602090815260408083209389168352929052908120549294509092506001600160401b03909116905b82811015614107576000613bd86040890189615ee8565b83818110613be857613be86159af565b9050602002016020810190613bfd9190616083565b6001600160401b031611613c855760405162461bcd60e51b815260206004820152604360248201527f4156534469726563746f72792e7175657565416c6c6f636174696f6e733a206d60448201527f61676e697475646544696666206d75737420626520677265617465722074686160648201526206e20360ec1b608482015260a401610a80565b613c926040880188615ee8565b82818110613ca257613ca26159af565b9050602002016020810190613cb79190616083565b6001600160401b0316826001600160401b03161015613d575760405162461bcd60e51b815260206004820152605060248201527f4156534469726563746f72792e7175657565416c6c6f636174696f6e733a206960448201527f6e73756666696369656e7420617661696c61626c652066726565206d61676e6960648201526f7475646520746f20616c6c6f6361746560801b608482015260a401610a80565b6001600160a01b03808916600090815260a06020908152604080832093891683529290529081208190613e2390429083898988818110613d9957613d996159af565b613daf926020604090920201908101915061507c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000898988818110613de357613de36159af565b9050604002016020016020810190613dfb9190615b10565b63ffffffff1663ffffffff16815260200190815260200160002061473390919063ffffffff16565b91509150816001600160e01b03166000141580613e3f57508015155b15613fa5576001600160a01b03808b16600090815260a060209081526040808320938b168352929052908120613f0191888887818110613e8157613e816159af565b613e97926020604090920201908101915061507c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888887818110613ecb57613ecb6159af565b9050604002016020016020810190613ee39190615b10565b63ffffffff1663ffffffff1681526020019081526020016000205490565b613f0c600183615997565b14613fa55760405162461bcd60e51b815260206004820152605d60248201527f4156534469726563746f72792e7175657565416c6c6f636174696f6e733a206560448201527f7863656564206d61782070656e64696e6720616c6c6f636174696f6e7320616c60648201527f6c6f77656420666f72206f702c206f705365742c207374726174656779000000608482015260a401610a80565b6140b388613fb660408c018c615ee8565b86818110613fc657613fc66159af565b9050602002016020810190613fdb9190616083565b613fee906001600160401b03168561609e565b6001600160a01b03808e16600090815260a060209081526040808320938e168352929052908120908a8a89818110614028576140286159af565b61403e926020604090920201908101915061507c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a89818110614072576140726159af565b905060400201602001602081019061408a9190615b10565b63ffffffff1663ffffffff1681526020019081526020016000206143729092919063ffffffff16565b506140c3905060408a018a615ee8565b848181106140d3576140d36159af565b90506020020160208101906140e89190616083565b6140f29085615e67565b9350505080614100906159c5565b9050613bc1565b506001600160a01b03968716600090815260a1602090815260408083209690991682529490945295909220805467ffffffffffffffff19166001600160401b039096169590951790945550505050565b6033546001600160a01b031633146117455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a80565b60006141bb61295b565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b815460009081816005811115614255576000614213846147ec565b61421d9085615980565b60008881526020902090915081015463ffffffff908116908716101561424557809150614253565b614250816001615997565b92505b505b600061426387878585614464565b905080156142905761427a87613028600184615980565b54600160201b90046001600160e01b03166111ab565b6000979650505050505050565b6000806142aa8585614733565b91509150816001600160e01b031660001480156142c5575080155b156142cf57506000195b84545b80821015611546576000868152602090208201805485908290600490614309908490600160201b90046001600160e01b0316615ec8565b92506101000a8154816001600160e01b0302191690836001600160e01b03160217905550826001019250506142d2565b805460009080156143695761435383613028600184615980565b54600160201b90046001600160e01b0316611858565b60009392505050565b6000806143808585856148d1565b915091505b935093915050565b60008160000151826020015163ffffffff166040516020016143da92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610b1f906160c0565b60008181526001830160205260408120541515611858565b6000826000018281548110614421576144216159af565b9060005260206000200154905092915050565b60008060006144438585614a77565b9150915061445081614ae4565b509392505050565b60006118588383614c9f565b60005b8183101561445057600061447b8484614cee565b60008781526020902090915063ffffffff86169082015463ffffffff1611156144a6578092506144b4565b6144b1816001615997565b93505b50614467565b6001600160a01b03808416600090815260a4602090815260408083209386168352928152918120909182906144f19085018561507c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008360200160208101906145269190615b10565b63ffffffff1681526020810191909152604001600020549050805b80156110a7576001600160a01b03808616600090815260a46020908152604080832093881683529281529181209091829061457e9087018761507c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906145b39190615b10565b63ffffffff16815260208101919091526040016000206145d4600184615980565b815481106145e4576145e46159af565b60009182526020808320909101546001600160a01b03808a16845260a283526040808520918a168552925290822080549193509083908110614628576146286159af565b6000918252602091829020604080518082019091529101546001600160401b038116825263ffffffff600160401b90910481169282018390529092504216111561470d5760016146788486615980565b614683906001615997565b106147085760405162461bcd60e51b815260206004820152604960248201527f4156534469726563746f72792e5f636865636b5175657565644465616c6c6f6360448201527f6174696f6e733a2065786365656473206d61782070656e64696e67206465616c6064820152686c6f636174696f6e7360b81b608482015260a401610a80565b614714565b50506110a7565b50508061472090615eb1565b9050614541565b60006118588383614d09565b8154600090819081816005811115614792576000614750846147ec565b61475a9085615980565b60008981526020902090915081015463ffffffff908116908816101561478257809150614790565b61478d816001615997565b92505b505b60006147a088888585614464565b905080156147d8576147b788613028600184615980565b54600160201b90046001600160e01b03166147d3600183615980565b6147dc565b6000805b95509550505050505b9250929050565b6000816147fb57506000919050565b6000600161480884614dfc565b901c6001901b9050600181848161482157614821615b4a565b048201901c9050600181848161483957614839615b4a565b048201901c9050600181848161485157614851615b4a565b048201901c9050600181848161486957614869615b4a565b048201901c9050600181848161488157614881615b4a565b048201901c9050600181848161489957614899615b4a565b048201901c905060018184816148b1576148b1615b4a565b048201901c9050611858818285816148cb576148cb615b4a565b04614e90565b825460009081908015614a1e5760006148ef87613028600185615980565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b0316602084015291925090871610156149705760405162461bcd60e51b815260206004820152601b60248201527f436865636b706f696e743a2064656372656173696e67206b65797300000000006044820152606401610a80565b8563ffffffff16816000015163ffffffff1614156149bf578461499888613028600186615980565b80546001600160e01b0392909216600160201b0263ffffffff909216919091179055614a0e565b6040805180820190915263ffffffff80881682526001600160e01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160201b029216919091179101555b6020015192508391506143859050565b50506040805180820190915263ffffffff80851682526001600160e01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160201b029190931617920191909155905081614385565b600080825160411415614aae5760208301516040840151606085015160001a614aa287828585614ea6565b945094505050506147e5565b825160401415614ad85760208301516040840151614acd868383614f93565b9350935050506147e5565b506000905060026147e5565b6000816004811115614af857614af861558e565b1415614b015750565b6001816004811115614b1557614b1561558e565b1415614b635760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610a80565b6002816004811115614b7757614b7761558e565b1415614bc55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a80565b6003816004811115614bd957614bd961558e565b1415614c325760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a80565b6004816004811115614c4657614c4661558e565b1415610a925760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610a80565b6000818152600183016020526040812054614ce657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b1f565b506000610b1f565b6000614cfd6002848418615b60565b61185890848416615997565b60008181526001830160205260408120548015614df2576000614d2d600183615980565b8554909150600090614d4190600190615980565b9050818114614da6576000866000018281548110614d6157614d616159af565b9060005260206000200154905080876000018481548110614d8457614d846159af565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614db757614db76160e7565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b1f565b6000915050610b1f565b600080608083901c15614e1157608092831c92015b604083901c15614e2357604092831c92015b602083901c15614e3557602092831c92015b601083901c15614e4757601092831c92015b600883901c15614e5957600892831c92015b600483901c15614e6b57600492831c92015b600283901c15614e7d57600292831c92015b600183901c15610b1f5760010192915050565b6000818310614e9f5781611858565b5090919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115614edd5750600090506003614f8a565b8460ff16601b14158015614ef557508460ff16601c14155b15614f065750600090506004614f8a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614f5a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614f8357600060019250925050614f8a565b9150600090505b94509492505050565b6000806001600160ff1b03831681614fb060ff86901c601b615997565b9050614fbe87828885614ea6565b935093505050935093915050565b6001600160a01b0381168114610a9257600080fd5b600080600060608486031215614ff657600080fd5b833561500181614fcc565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b8281101561506f5761505f84835180516001600160a01b0316825260209081015163ffffffff16910152565b9284019290850190600101615033565b5091979650505050505050565b60006020828403121561508e57600080fd5b813561185881614fcc565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156150d1576150d1615099565b60405290565b604051601f8201601f191681016001600160401b03811182821017156150ff576150ff615099565b604052919050565b803563ffffffff8116811461511b57600080fd5b919050565b600080828403606081121561513457600080fd5b833561513f81614fcc565b92506040601f198201121561515357600080fd5b50604051604081018181106001600160401b038211171561517657615176615099565b604052602084013561518781614fcc565b815261519560408501615107565b6020820152809150509250929050565b6000602082840312156151b757600080fd5b5035919050565b6000806000606084860312156151d357600080fd5b83356151de81614fcc565b925060208401356151ee81614fcc565b929592945050506040919091013590565b60008083601f84011261521157600080fd5b5081356001600160401b0381111561522857600080fd5b6020830191508360208260051b85010111156147e557600080fd5b60006060828403121561525557600080fd5b61525d6150af565b905081356001600160401b038082111561527657600080fd5b818401915084601f83011261528a57600080fd5b813560208282111561529e5761529e615099565b6152b0601f8301601f191682016150d7565b925081835286818386010111156152c657600080fd5b818185018285013760008183850101528285528086013581860152505050506040820135604082015292915050565b6000806000806060858703121561530b57600080fd5b843561531681614fcc565b935060208501356001600160401b038082111561533257600080fd5b61533e888389016151ff565b9095509350604087013591508082111561535757600080fd5b5061536487828801615243565b91505092959194509250565b60008060006060848603121561538557600080fd5b833561539081614fcc565b925060208401356153a081614fcc565b91506153ae60408501615107565b90509250925092565b60008060008084860360a08112156153ce57600080fd5b85356153d981614fcc565b94506040601f19820112156153ed57600080fd5b50602085019250606085013561540281614fcc565b915061541060808601615107565b905092959194509250565b6000806000806060858703121561543157600080fd5b843561543c81614fcc565b935060208501356001600160401b038082111561545857600080fd5b615464888389016151ff565b9095509350604087013591508082111561547d57600080fd5b5085016060818803121561549057600080fd5b939692955090935050565b600080604083850312156154ae57600080fd5b82356154b981614fcc565b946020939093013593505050565b6000806000806000608086880312156154df57600080fd5b85356154ea81614fcc565b945060208601356154fa81614fcc565b935060408601356001600160401b038082111561551657600080fd5b61552289838a016151ff565b9095509350606088013591508082111561553b57600080fd5b5061554888828901615243565b9150509295509295909350565b6000806040838503121561556857600080fd5b823561557381614fcc565b9150602083013561558381614fcc565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106155c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156155de57600080fd5b813560ff8116811461185857600080fd5b60008060008060006060868803121561560757600080fd5b853561561281614fcc565b945060208601356001600160401b038082111561562e57600080fd5b61563a89838a016151ff565b9096509450604088013591508082111561565357600080fd5b50615660888289016151ff565b969995985093965092949392505050565b6000806040838503121561568457600080fd5b823561568f81614fcc565b915061569d60208401615107565b90509250929050565b6000806000806000608086880312156156be57600080fd5b85356156c981614fcc565b945060208601356001600160401b038111156156e457600080fd5b6156f0888289016151ff565b9699909850959660408101359660609091013595509350505050565b81516001600160a01b0316815260208083015163ffffffff169082015260408101610b1f565b6000806000806080858703121561574857600080fd5b843561575381614fcc565b9350602085013561576381614fcc565b93969395505050506040820135916060013590565b6000806020838503121561578b57600080fd5b82356001600160401b03808211156157a257600080fd5b818501915085601f8301126157b657600080fd5b8135818111156157c557600080fd5b8660208285010111156157d757600080fd5b60209290920196919550909350505050565b600080602083850312156157fc57600080fd5b82356001600160401b0381111561581257600080fd5b61581e858286016151ff565b90969095509350505050565b60008060008060006080868803121561584257600080fd5b853561584d81614fcc565b945061585b60208701615107565b935060408601356001600160401b0381111561587657600080fd5b615882888289016151ff565b909450925050606086013561ffff8116811461589d57600080fd5b809150509295509295909350565b6000806000604084860312156158c057600080fd5b83356158cb81614fcc565b925060208401356001600160401b038111156158e657600080fd5b6158f2868287016151ff565b9497909650939450505050565b6000806000806040858703121561591557600080fd5b84356001600160401b038082111561592c57600080fd5b615938888389016151ff565b9096509450602087013591508082111561595157600080fd5b5061595e878288016151ff565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156159925761599261596a565b500390565b600082198211156159aa576159aa61596a565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156159d9576159d961596a565b5060010190565b6000602082840312156159f257600080fd5b815161185881614fcc565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600063ffffffff808316818516808303821115615a6657615a6661596a565b01949350505050565b600060208284031215615a8157600080fd5b8151801515811461185857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b600060208284031215615b2257600080fd5b61185882615107565b6000816000190483118215151615615b4557615b4561596a565b500290565b634e487b7160e01b600052601260045260246000fd5b600082615b7d57634e487b7160e01b600052601260045260246000fd5b500490565b60008235605e19833603018112615b9857600080fd5b9190910192915050565b8183526000602080850194508260005b85811015615bf8578135615bc581614fcc565b6001600160a01b0316875263ffffffff615be0838501615107565b16878401526040968701969190910190600101615bb2565b509495945050505050565b6000808335601e19843603018112615c1a57600080fd5b83016020810192503590506001600160401b03811115615c3957600080fd5b8060051b36038313156147e557600080fd5b80356001600160401b038116811461511b57600080fd5b8183526000602080850194508260005b85811015615bf8576001600160401b03615c8b83615c4b565b1687529582019590820190600101615c72565b600060a08201888352602060018060a01b03808a1682860152604060a0818701528389855260c08701905060c08a60051b88010194508a60005b8b811015615d9f5788870360bf190183528135368e9003605e19018112615cfe57600080fd5b8d0160608135615d0d81614fcc565b871689528188013536839003601e19018112615d2857600080fd5b820180356001600160401b03811115615d4057600080fd5b8060061b3603841315615d5257600080fd5b828a8c0152615d66838c01828c8501615ba2565b92505050615d7686830183615c03565b9250898203878b0152615d8a828483615c62565b99505050928601925090850190600101615cd8565b505050505060608401959095526080909201929092529695505050505050565b8183526000602080850194508260005b85811015615bf85763ffffffff615de583615107565b1687529582019590820190600101615dcf565b8681526001600160a01b038616602082015260a060408201819052600090615e239083018688615dbf565b60608301949094525060800152949350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006001600160401b0383811690831681811015615e8757615e8761596a565b039392505050565b60006001600160401b03808316818516808303821115615a6657615a6661596a565b600081615ec057615ec061596a565b506000190190565b60006001600160e01b0383811690831681811015615e8757615e8761596a565b6000808335601e19843603018112615eff57600080fd5b8301803591506001600160401b03821115615f1957600080fd5b6020019150600581901b36038213156147e557600080fd5b602081526000615f45602083018486615dbf565b949350505050565b82815260006020604081840152835180604085015260005b81811015615f8157858101830151858201606001528201615f65565b81811115615f93576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215615fbc57600080fd5b81516001600160e01b03198116811461185857600080fd5b6000808335601e19843603018112615feb57600080fd5b8301803591506001600160401b0382111561600557600080fd5b6020019150368190038213156147e557600080fd5b600060ff821660ff8114156160315761603161596a565b60010192915050565b6000808335601e1984360301811261605157600080fd5b8301803591506001600160401b0382111561606b57600080fd5b6020019150600681901b36038213156147e557600080fd5b60006020828403121561609557600080fd5b61185882615c4b565b60006001600160e01b03828116848216808303821115615a6657615a6661596a565b805160208083015191908110156160e1576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052603160045260246000fdfe4156534469726563746f72792e72656769737465724f70657261746f72546f4fa264697066735822122057615600b1b8ed2c594c0ca166b1ad1650f361bd0a718ba6d96322a3c846a50d64736f6c634300080c0033", } // AVSDirectoryABI is the input ABI used to generate the binding from. @@ -209,6 +222,37 @@ func (_AVSDirectory *AVSDirectoryTransactorRaw) Transact(opts *bind.TransactOpts return _AVSDirectory.Contract.contract.Transact(opts, method, params...) } +// ALLOCATIONDELAY is a free data retrieval call binding the contract method 0x6fbb031c. +// +// Solidity: function ALLOCATION_DELAY() view returns(uint32) +func (_AVSDirectory *AVSDirectoryCaller) ALLOCATIONDELAY(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "ALLOCATION_DELAY") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// ALLOCATIONDELAY is a free data retrieval call binding the contract method 0x6fbb031c. +// +// Solidity: function ALLOCATION_DELAY() view returns(uint32) +func (_AVSDirectory *AVSDirectorySession) ALLOCATIONDELAY() (uint32, error) { + return _AVSDirectory.Contract.ALLOCATIONDELAY(&_AVSDirectory.CallOpts) +} + +// ALLOCATIONDELAY is a free data retrieval call binding the contract method 0x6fbb031c. +// +// Solidity: function ALLOCATION_DELAY() view returns(uint32) +func (_AVSDirectory *AVSDirectoryCallerSession) ALLOCATIONDELAY() (uint32, error) { + return _AVSDirectory.Contract.ALLOCATIONDELAY(&_AVSDirectory.CallOpts) +} + // DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. // // Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) @@ -240,6 +284,68 @@ func (_AVSDirectory *AVSDirectoryCallerSession) DOMAINTYPEHASH() ([32]byte, erro return _AVSDirectory.Contract.DOMAINTYPEHASH(&_AVSDirectory.CallOpts) } +// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. +// +// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCaller) MAGNITUDEADJUSTMENTTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "MAGNITUDE_ADJUSTMENT_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. +// +// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectorySession) MAGNITUDEADJUSTMENTTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.MAGNITUDEADJUSTMENTTYPEHASH(&_AVSDirectory.CallOpts) +} + +// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. +// +// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCallerSession) MAGNITUDEADJUSTMENTTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.MAGNITUDEADJUSTMENTTYPEHASH(&_AVSDirectory.CallOpts) +} + +// MAXPENDINGUPDATES is a free data retrieval call binding the contract method 0xb3e52eaa. +// +// Solidity: function MAX_PENDING_UPDATES() view returns(uint256) +func (_AVSDirectory *AVSDirectoryCaller) MAXPENDINGUPDATES(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "MAX_PENDING_UPDATES") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXPENDINGUPDATES is a free data retrieval call binding the contract method 0xb3e52eaa. +// +// Solidity: function MAX_PENDING_UPDATES() view returns(uint256) +func (_AVSDirectory *AVSDirectorySession) MAXPENDINGUPDATES() (*big.Int, error) { + return _AVSDirectory.Contract.MAXPENDINGUPDATES(&_AVSDirectory.CallOpts) +} + +// MAXPENDINGUPDATES is a free data retrieval call binding the contract method 0xb3e52eaa. +// +// Solidity: function MAX_PENDING_UPDATES() view returns(uint256) +func (_AVSDirectory *AVSDirectoryCallerSession) MAXPENDINGUPDATES() (*big.Int, error) { + return _AVSDirectory.Contract.MAXPENDINGUPDATES(&_AVSDirectory.CallOpts) +} + // OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. // // Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) @@ -271,6 +377,37 @@ func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORAVSREGISTRATIONTYPEHASH( return _AVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) } +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCaller) OPERATORSETFORCEDEREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectorySession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) +} + +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectory.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) +} + // OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. // // Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) @@ -302,6 +439,99 @@ func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORSETREGISTRATIONTYPEHASH( return _AVSDirectory.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) } +// AllocatorSaltIsSpent is a free data retrieval call binding the contract method 0x46fb3a00. +// +// Solidity: function allocatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) AllocatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "allocatorSaltIsSpent", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AllocatorSaltIsSpent is a free data retrieval call binding the contract method 0x46fb3a00. +// +// Solidity: function allocatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) AllocatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectory.Contract.AllocatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) +} + +// AllocatorSaltIsSpent is a free data retrieval call binding the contract method 0x46fb3a00. +// +// Solidity: function allocatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) AllocatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectory.Contract.AllocatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) +} + +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_AVSDirectory *AVSDirectoryCaller) AvsOperatorStatus(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint8, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "avsOperatorStatus", arg0, arg1) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_AVSDirectory *AVSDirectorySession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { + return _AVSDirectory.Contract.AvsOperatorStatus(&_AVSDirectory.CallOpts, arg0, arg1) +} + +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_AVSDirectory *AVSDirectoryCallerSession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { + return _AVSDirectory.Contract.AvsOperatorStatus(&_AVSDirectory.CallOpts, arg0, arg1) +} + +// CalculateMagnitudeAdjustmentDigestHash is a free data retrieval call binding the contract method 0x8522fcb1. +// +// Solidity: function calculateMagnitudeAdjustmentDigestHash(address operator, (address,(address,uint32)[],uint64[])[] adjustments, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCaller) CalculateMagnitudeAdjustmentDigestHash(opts *bind.CallOpts, operator common.Address, adjustments []IAVSDirectoryMagnitudeAdjustment, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "calculateMagnitudeAdjustmentDigestHash", operator, adjustments, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateMagnitudeAdjustmentDigestHash is a free data retrieval call binding the contract method 0x8522fcb1. +// +// Solidity: function calculateMagnitudeAdjustmentDigestHash(address operator, (address,(address,uint32)[],uint64[])[] adjustments, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectorySession) CalculateMagnitudeAdjustmentDigestHash(operator common.Address, adjustments []IAVSDirectoryMagnitudeAdjustment, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectory.Contract.CalculateMagnitudeAdjustmentDigestHash(&_AVSDirectory.CallOpts, operator, adjustments, salt, expiry) +} + +// CalculateMagnitudeAdjustmentDigestHash is a free data retrieval call binding the contract method 0x8522fcb1. +// +// Solidity: function calculateMagnitudeAdjustmentDigestHash(address operator, (address,(address,uint32)[],uint64[])[] adjustments, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCallerSession) CalculateMagnitudeAdjustmentDigestHash(operator common.Address, adjustments []IAVSDirectoryMagnitudeAdjustment, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectory.Contract.CalculateMagnitudeAdjustmentDigestHash(&_AVSDirectory.CallOpts, operator, adjustments, salt, expiry) +} + // CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. // // Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -333,6 +563,37 @@ func (_AVSDirectory *AVSDirectoryCallerSession) CalculateOperatorAVSRegistration return _AVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectory.CallOpts, operator, avs, salt, expiry) } +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectorySession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +} + +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectory *AVSDirectoryCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +} + // CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. // // Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -426,6 +687,7 @@ func (_AVSDirectory *AVSDirectoryCallerSession) DomainSeparator() ([32]byte, err return _AVSDirectory.Contract.DomainSeparator(&_AVSDirectory.CallOpts) } +<<<<<<< HEAD <<<<<<< HEAD // GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // @@ -524,214 +786,200 @@ func (_AVSDirectory *AVSDirectoryCallerSession) GetOperatorsInOperatorSet(operat ======= // IsMember is a free data retrieval call binding the contract method 0x3c4385d0. >>>>>>> ce94473c (feat: operator commission bips (#627)) +======= +// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. +>>>>>>> 6b2ab7ed (build: bindings) // -// Solidity: function isMember(address , address , uint32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) IsMember(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { +// Solidity: function freeMagnitude(address , address ) view returns(uint64) +func (_AVSDirectory *AVSDirectoryCaller) FreeMagnitude(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint64, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "isMember", arg0, arg1, arg2) + err := _AVSDirectory.contract.Call(opts, &out, "freeMagnitude", arg0, arg1) if err != nil { - return *new(bool), err + return *new(uint64), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) return out0, err } -// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. +// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. // -// Solidity: function isMember(address , address , uint32 ) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) IsMember(arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { - return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, arg0, arg1, arg2) +// Solidity: function freeMagnitude(address , address ) view returns(uint64) +func (_AVSDirectory *AVSDirectorySession) FreeMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { + return _AVSDirectory.Contract.FreeMagnitude(&_AVSDirectory.CallOpts, arg0, arg1) } -// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. +// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. // -// Solidity: function isMember(address , address , uint32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) IsMember(arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { - return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, arg0, arg1, arg2) +// Solidity: function freeMagnitude(address , address ) view returns(uint64) +func (_AVSDirectory *AVSDirectoryCallerSession) FreeMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { + return _AVSDirectory.Contract.FreeMagnitude(&_AVSDirectory.CallOpts, arg0, arg1) } -// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. +// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. // -// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) -func (_AVSDirectory *AVSDirectoryCaller) MemberInfo(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (struct { - InTotalSets *big.Int - IsLegacyOperator bool -}, error) { +// Solidity: function getSlashableBips(address operator, (address,uint32) operatorSet, address strategy, uint32 timestamp) view returns(uint16) +func (_AVSDirectory *AVSDirectoryCaller) GetSlashableBips(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategy common.Address, timestamp uint32) (uint16, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "memberInfo", arg0, arg1) + err := _AVSDirectory.contract.Call(opts, &out, "getSlashableBips", operator, operatorSet, strategy, timestamp) - outstruct := new(struct { - InTotalSets *big.Int - IsLegacyOperator bool - }) if err != nil { - return *outstruct, err + return *new(uint16), err } - outstruct.InTotalSets = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.IsLegacyOperator = *abi.ConvertType(out[1], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - return *outstruct, err + return out0, err } -// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. +// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. // -// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) -func (_AVSDirectory *AVSDirectorySession) MemberInfo(arg0 common.Address, arg1 common.Address) (struct { - InTotalSets *big.Int - IsLegacyOperator bool -}, error) { - return _AVSDirectory.Contract.MemberInfo(&_AVSDirectory.CallOpts, arg0, arg1) +// Solidity: function getSlashableBips(address operator, (address,uint32) operatorSet, address strategy, uint32 timestamp) view returns(uint16) +func (_AVSDirectory *AVSDirectorySession) GetSlashableBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategy common.Address, timestamp uint32) (uint16, error) { + return _AVSDirectory.Contract.GetSlashableBips(&_AVSDirectory.CallOpts, operator, operatorSet, strategy, timestamp) } -// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. +// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. // -// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) -func (_AVSDirectory *AVSDirectoryCallerSession) MemberInfo(arg0 common.Address, arg1 common.Address) (struct { - InTotalSets *big.Int - IsLegacyOperator bool -}, error) { - return _AVSDirectory.Contract.MemberInfo(&_AVSDirectory.CallOpts, arg0, arg1) +// Solidity: function getSlashableBips(address operator, (address,uint32) operatorSet, address strategy, uint32 timestamp) view returns(uint16) +func (_AVSDirectory *AVSDirectoryCallerSession) GetSlashableBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategy common.Address, timestamp uint32) (uint16, error) { + return _AVSDirectory.Contract.GetSlashableBips(&_AVSDirectory.CallOpts, operator, operatorSet, strategy, timestamp) } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. // -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectory *AVSDirectoryCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) + err := _AVSDirectory.contract.Call(opts, &out, "inTotalOperatorSets", operator) if err != nil { - return *new(bool), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. // -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectory.Contract.OperatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectory *AVSDirectorySession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _AVSDirectory.Contract.InTotalOperatorSets(&_AVSDirectory.CallOpts, operator) } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. // -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectory.Contract.OperatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectory *AVSDirectoryCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _AVSDirectory.Contract.InTotalOperatorSets(&_AVSDirectory.CallOpts, operator) } -<<<<<<< HEAD -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. // -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectory *AVSDirectoryCaller) OperatorSetMemberAtIndex(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) IsMember(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "operatorSetMemberAtIndex", operatorSet, index) + err := _AVSDirectory.contract.Call(opts, &out, "isMember", operator, operatorSet) if err != nil { - return *new(common.Address), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. // -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectory *AVSDirectorySession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - return _AVSDirectory.Contract.OperatorSetMemberAtIndex(&_AVSDirectory.CallOpts, operatorSet, index) +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, operator, operatorSet) } -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. // -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - return _AVSDirectory.Contract.OperatorSetMemberAtIndex(&_AVSDirectory.CallOpts, operatorSet, index) +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, operator, operatorSet) } -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. // -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectory *AVSDirectoryCaller) OperatorSetsMemberOfAtIndex(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) IsOperatorSet(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (bool, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "operatorSetsMemberOfAtIndex", operator, index) + err := _AVSDirectory.contract.Call(opts, &out, "isOperatorSet", arg0, arg1) if err != nil { - return *new(IAVSDirectoryOperatorSet), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new(IAVSDirectoryOperatorSet)).(*IAVSDirectoryOperatorSet) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. // -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectory *AVSDirectorySession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _AVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectory.CallOpts, operator, index) +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { + return _AVSDirectory.Contract.IsOperatorSet(&_AVSDirectory.CallOpts, arg0, arg1) } -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. // -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _AVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectory.CallOpts, operator, index) +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { + return _AVSDirectory.Contract.IsOperatorSet(&_AVSDirectory.CallOpts, arg0, arg1) } -======= ->>>>>>> ce94473c (feat: operator commission bips (#627)) -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. // -// Solidity: function owner() view returns(address) -func (_AVSDirectory *AVSDirectoryCaller) Owner(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) IsOperatorSetAVS(opts *bind.CallOpts, arg0 common.Address) (bool, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "owner") + err := _AVSDirectory.contract.Call(opts, &out, "isOperatorSetAVS", arg0) if err != nil { - return *new(common.Address), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. // -// Solidity: function owner() view returns(address) -func (_AVSDirectory *AVSDirectorySession) Owner() (common.Address, error) { - return _AVSDirectory.Contract.Owner(&_AVSDirectory.CallOpts) +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { + return _AVSDirectory.Contract.IsOperatorSetAVS(&_AVSDirectory.CallOpts, arg0) } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. // -// Solidity: function owner() view returns(address) -func (_AVSDirectory *AVSDirectoryCallerSession) Owner() (common.Address, error) { - return _AVSDirectory.Contract.Owner(&_AVSDirectory.CallOpts) +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { + return _AVSDirectory.Contract.IsOperatorSetAVS(&_AVSDirectory.CallOpts, arg0) } -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. // -// Solidity: function paused(uint8 index) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { +// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) IsOperatorSlashable(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "paused", index) + err := _AVSDirectory.contract.Call(opts, &out, "isOperatorSlashable", operator, operatorSet) if err != nil { return *new(bool), err @@ -743,24 +991,313 @@ func (_AVSDirectory *AVSDirectoryCaller) Paused(opts *bind.CallOpts, index uint8 } -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. // -// Solidity: function paused(uint8 index) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) Paused(index uint8) (bool, error) { - return _AVSDirectory.Contract.Paused(&_AVSDirectory.CallOpts, index) +// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectory.Contract.IsOperatorSlashable(&_AVSDirectory.CallOpts, operator, operatorSet) } -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. // -// Solidity: function paused(uint8 index) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) Paused(index uint8) (bool, error) { - return _AVSDirectory.Contract.Paused(&_AVSDirectory.CallOpts, index) +// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectory.Contract.IsOperatorSlashable(&_AVSDirectory.CallOpts, operator, operatorSet) } -// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // -// Solidity: function paused() view returns(uint256) -func (_AVSDirectory *AVSDirectoryCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectory.Contract.OperatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectory.Contract.OperatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) +} + +<<<<<<< HEAD +<<<<<<< HEAD +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectory *AVSDirectoryCaller) OperatorSetMemberAtIndex(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "operatorSetMemberAtIndex", operatorSet, index) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) +======= +// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. +// +// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) +func (_AVSDirectory *AVSDirectoryCaller) OperatorSetMemberCount(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (*big.Int, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "operatorSetMemberCount", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) +>>>>>>> 6b2ab7ed (build: bindings) + + return out0, err + +} + +<<<<<<< HEAD +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectory *AVSDirectorySession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + return _AVSDirectory.Contract.OperatorSetMemberAtIndex(&_AVSDirectory.CallOpts, operatorSet, index) +} + +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + return _AVSDirectory.Contract.OperatorSetMemberAtIndex(&_AVSDirectory.CallOpts, operatorSet, index) +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectory *AVSDirectoryCaller) OperatorSetsMemberOfAtIndex(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "operatorSetsMemberOfAtIndex", operator, index) +======= +// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. +// +// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) +func (_AVSDirectory *AVSDirectorySession) OperatorSetMemberCount(arg0 common.Address, arg1 uint32) (*big.Int, error) { + return _AVSDirectory.Contract.OperatorSetMemberCount(&_AVSDirectory.CallOpts, arg0, arg1) +} + +// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. +// +// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) +func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetMemberCount(arg0 common.Address, arg1 uint32) (*big.Int, error) { + return _AVSDirectory.Contract.OperatorSetMemberCount(&_AVSDirectory.CallOpts, arg0, arg1) +} + +// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. +// +// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) +func (_AVSDirectory *AVSDirectoryCaller) OperatorSetStatus(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { + Registered bool + LastDeregisteredTimestamp uint32 +}, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "operatorSetStatus", arg0, arg1, arg2) + + outstruct := new(struct { + Registered bool + LastDeregisteredTimestamp uint32 + }) + if err != nil { + return *outstruct, err + } + + outstruct.Registered = *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.LastDeregisteredTimestamp = *abi.ConvertType(out[1], new(uint32)).(*uint32) + + return *outstruct, err + +} + +// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. +// +// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) +func (_AVSDirectory *AVSDirectorySession) OperatorSetStatus(arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { + Registered bool + LastDeregisteredTimestamp uint32 +}, error) { + return _AVSDirectory.Contract.OperatorSetStatus(&_AVSDirectory.CallOpts, arg0, arg1, arg2) +} + +// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. +// +// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) +func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetStatus(arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { + Registered bool + LastDeregisteredTimestamp uint32 +}, error) { + return _AVSDirectory.Contract.OperatorSetStatus(&_AVSDirectory.CallOpts, arg0, arg1, arg2) +} + +// OperatorSetsMemberOf is a free data retrieval call binding the contract method 0x0d5387c5. +// +// Solidity: function operatorSetsMemberOf(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_AVSDirectory *AVSDirectoryCaller) OperatorSetsMemberOf(opts *bind.CallOpts, operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "operatorSetsMemberOf", operator, start, length) + + if err != nil { + return *new([]IAVSDirectoryOperatorSet), err + } + + out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) + + return out0, err + +} + +// OperatorSetsMemberOf is a free data retrieval call binding the contract method 0x0d5387c5. +// +// Solidity: function operatorSetsMemberOf(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_AVSDirectory *AVSDirectorySession) OperatorSetsMemberOf(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + return _AVSDirectory.Contract.OperatorSetsMemberOf(&_AVSDirectory.CallOpts, operator, start, length) +} + +// OperatorSetsMemberOf is a free data retrieval call binding the contract method 0x0d5387c5. +// +// Solidity: function operatorSetsMemberOf(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetsMemberOf(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { + return _AVSDirectory.Contract.OperatorSetsMemberOf(&_AVSDirectory.CallOpts, operator, start, length) +} + +// OperatorSetsMemberOf0 is a free data retrieval call binding the contract method 0x8de54944. +// +// Solidity: function operatorSetsMemberOf(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectory *AVSDirectoryCaller) OperatorSetsMemberOf0(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "operatorSetsMemberOf0", operator, index) +>>>>>>> 6b2ab7ed (build: bindings) + + if err != nil { + return *new(IAVSDirectoryOperatorSet), err + } + + out0 := *abi.ConvertType(out[0], new(IAVSDirectoryOperatorSet)).(*IAVSDirectoryOperatorSet) + + return out0, err + +} + +<<<<<<< HEAD +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectory *AVSDirectorySession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _AVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectory.CallOpts, operator, index) +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _AVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectory.CallOpts, operator, index) +} + +======= +>>>>>>> ce94473c (feat: operator commission bips (#627)) +======= +// OperatorSetsMemberOf0 is a free data retrieval call binding the contract method 0x8de54944. +// +// Solidity: function operatorSetsMemberOf(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectory *AVSDirectorySession) OperatorSetsMemberOf0(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _AVSDirectory.Contract.OperatorSetsMemberOf0(&_AVSDirectory.CallOpts, operator, index) +} + +// OperatorSetsMemberOf0 is a free data retrieval call binding the contract method 0x8de54944. +// +// Solidity: function operatorSetsMemberOf(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetsMemberOf0(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _AVSDirectory.Contract.OperatorSetsMemberOf0(&_AVSDirectory.CallOpts, operator, index) +} + +>>>>>>> 6b2ab7ed (build: bindings) +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_AVSDirectory *AVSDirectoryCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AVSDirectory.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_AVSDirectory *AVSDirectorySession) Owner() (common.Address, error) { + return _AVSDirectory.Contract.Owner(&_AVSDirectory.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_AVSDirectory *AVSDirectoryCallerSession) Owner() (common.Address, error) { + return _AVSDirectory.Contract.Owner(&_AVSDirectory.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _AVSDirectory.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 (_AVSDirectory *AVSDirectorySession) Paused(index uint8) (bool, error) { + return _AVSDirectory.Contract.Paused(&_AVSDirectory.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) Paused(index uint8) (bool, error) { + return _AVSDirectory.Contract.Paused(&_AVSDirectory.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_AVSDirectory *AVSDirectoryCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} err := _AVSDirectory.contract.Call(opts, &out, "paused0") @@ -819,6 +1356,48 @@ func (_AVSDirectory *AVSDirectoryCallerSession) PauserRegistry() (common.Address return _AVSDirectory.Contract.PauserRegistry(&_AVSDirectory.CallOpts) } +// Allocate is a paid mutator transaction binding the contract method 0x70196708. +// +// Solidity: function allocate(address operator, (address,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) allocatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactor) Allocate(opts *bind.TransactOpts, operator common.Address, allocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "allocate", operator, allocations, allocatorSignature) +} + +// Allocate is a paid mutator transaction binding the contract method 0x70196708. +// +// Solidity: function allocate(address operator, (address,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) allocatorSignature) returns() +func (_AVSDirectory *AVSDirectorySession) Allocate(operator common.Address, allocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.Allocate(&_AVSDirectory.TransactOpts, operator, allocations, allocatorSignature) +} + +// Allocate is a paid mutator transaction binding the contract method 0x70196708. +// +// Solidity: function allocate(address operator, (address,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) allocatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) Allocate(operator common.Address, allocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.Allocate(&_AVSDirectory.TransactOpts, operator, allocations, allocatorSignature) +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectory *AVSDirectoryTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "becomeOperatorSetAVS") +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectory *AVSDirectorySession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _AVSDirectory.Contract.BecomeOperatorSetAVS(&_AVSDirectory.TransactOpts) +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _AVSDirectory.Contract.BecomeOperatorSetAVS(&_AVSDirectory.TransactOpts) +} + // CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. // // Solidity: function cancelSalt(bytes32 salt) returns() @@ -840,46 +1419,46 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) CancelSalt(salt [32]byte) (* return _AVSDirectory.Contract.CancelSalt(&_AVSDirectory.TransactOpts, salt) } -// DeregisterFromAVSOperatorSets is a paid mutator transaction binding the contract method 0x9c6c5184. +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. // -// Solidity: function deregisterFromAVSOperatorSets(address avs, uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactor) DeregisterFromAVSOperatorSets(opts *bind.TransactOpts, avs common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "deregisterFromAVSOperatorSets", avs, operatorSetIds) +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "createOperatorSets", operatorSetIds) } -// DeregisterFromAVSOperatorSets is a paid mutator transaction binding the contract method 0x9c6c5184. +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. // -// Solidity: function deregisterFromAVSOperatorSets(address avs, uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectorySession) DeregisterFromAVSOperatorSets(avs common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.DeregisterFromAVSOperatorSets(&_AVSDirectory.TransactOpts, avs, operatorSetIds) +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectorySession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.CreateOperatorSets(&_AVSDirectory.TransactOpts, operatorSetIds) } -// DeregisterFromAVSOperatorSets is a paid mutator transaction binding the contract method 0x9c6c5184. +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. // -// Solidity: function deregisterFromAVSOperatorSets(address avs, uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) DeregisterFromAVSOperatorSets(avs common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.DeregisterFromAVSOperatorSets(&_AVSDirectory.TransactOpts, avs, operatorSetIds) +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.CreateOperatorSets(&_AVSDirectory.TransactOpts, operatorSetIds) } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// Deallocate is a paid mutator transaction binding the contract method 0x3367a33c. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectory *AVSDirectoryTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +// Solidity: function deallocate(address operator, (address,(address,uint32)[],uint64[])[] deallocations, (bytes,bytes32,uint256) allocatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactor) Deallocate(opts *bind.TransactOpts, operator common.Address, deallocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "deallocate", operator, deallocations, allocatorSignature) } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// Deallocate is a paid mutator transaction binding the contract method 0x3367a33c. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectory *AVSDirectorySession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _AVSDirectory.Contract.DeregisterOperatorFromAVS(&_AVSDirectory.TransactOpts, operator) +// Solidity: function deallocate(address operator, (address,(address,uint32)[],uint64[])[] deallocations, (bytes,bytes32,uint256) allocatorSignature) returns() +func (_AVSDirectory *AVSDirectorySession) Deallocate(operator common.Address, deallocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.Deallocate(&_AVSDirectory.TransactOpts, operator, deallocations, allocatorSignature) } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// Deallocate is a paid mutator transaction binding the contract method 0x3367a33c. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _AVSDirectory.Contract.DeregisterOperatorFromAVS(&_AVSDirectory.TransactOpts, operator) +// Solidity: function deallocate(address operator, (address,(address,uint32)[],uint64[])[] deallocations, (bytes,bytes32,uint256) allocatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) Deallocate(operator common.Address, deallocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.Deallocate(&_AVSDirectory.TransactOpts, operator, deallocations, allocatorSignature) } // DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. @@ -903,6 +1482,27 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) DeregisterOperatorFromOperat return _AVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectory.TransactOpts, operator, operatorSetIds) } +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectorySession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) +} + // Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. // // Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() @@ -924,7 +1524,28 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) Initialize(initialOwner comm return _AVSDirectory.Contract.Initialize(&_AVSDirectory.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) } -// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectorySession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectory.TransactOpts, operators, operatorSetIds) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectory.TransactOpts, operators, operatorSetIds) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. // // Solidity: function pause(uint256 newPausedStatus) returns() func (_AVSDirectory *AVSDirectoryTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { @@ -966,27 +1587,6 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) PauseAll() (*types.Transacti return _AVSDirectory.Contract.PauseAll(&_AVSDirectory.TransactOpts) } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. -// -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) -} - -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. -// -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectorySession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.RegisterOperatorToAVS(&_AVSDirectory.TransactOpts, operator, operatorSignature) -} - -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. -// -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.RegisterOperatorToAVS(&_AVSDirectory.TransactOpts, operator, operatorSignature) -} - // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // // Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() @@ -1050,6 +1650,27 @@ func (_AVSDirectory *AVSDirectoryTransactorSession) SetPauserRegistry(newPauserR return _AVSDirectory.Contract.SetPauserRegistry(&_AVSDirectory.TransactOpts, newPauserRegistry) } +// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. +// +// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() +func (_AVSDirectory *AVSDirectoryTransactor) SlashOperator(opts *bind.TransactOpts, operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "slashOperator", operator, operatorSetId, strategies, bipsToSlash) +} + +// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. +// +// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() +func (_AVSDirectory *AVSDirectorySession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { + return _AVSDirectory.Contract.SlashOperator(&_AVSDirectory.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) +} + +// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. +// +// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { + return _AVSDirectory.Contract.SlashOperator(&_AVSDirectory.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) +} + // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // // Solidity: function transferOwnership(address newOwner) returns() @@ -1078,44 +1699,1055 @@ func (_AVSDirectory *AVSDirectoryTransactor) Unpause(opts *bind.TransactOpts, ne return _AVSDirectory.contract.Transact(opts, "unpause", newPausedStatus) } -// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_AVSDirectory *AVSDirectorySession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _AVSDirectory.Contract.Unpause(&_AVSDirectory.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _AVSDirectory.Contract.Unpause(&_AVSDirectory.TransactOpts, newPausedStatus) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectory *AVSDirectoryTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectory *AVSDirectorySession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _AVSDirectory.Contract.UpdateAVSMetadataURI(&_AVSDirectory.TransactOpts, metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _AVSDirectory.Contract.UpdateAVSMetadataURI(&_AVSDirectory.TransactOpts, metadataURI) +} + +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() +func (_AVSDirectory *AVSDirectoryTransactor) UpdateFreeMagnitude(opts *bind.TransactOpts, operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "updateFreeMagnitude", operator, strategies, numToComplete) +} + +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() +func (_AVSDirectory *AVSDirectorySession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { + return _AVSDirectory.Contract.UpdateFreeMagnitude(&_AVSDirectory.TransactOpts, operator, strategies, numToComplete) +} + +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { + return _AVSDirectory.Contract.UpdateFreeMagnitude(&_AVSDirectory.TransactOpts, operator, strategies, numToComplete) +} + +// AVSDirectoryAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AVSDirectory contract. +type AVSDirectoryAVSMetadataURIUpdatedIterator struct { + Event *AVSDirectoryAVSMetadataURIUpdated // 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 *AVSDirectoryAVSMetadataURIUpdatedIterator) 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(AVSDirectoryAVSMetadataURIUpdated) + 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(AVSDirectoryAVSMetadataURIUpdated) + 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 *AVSDirectoryAVSMetadataURIUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryAVSMetadataURIUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the AVSDirectory contract. +type AVSDirectoryAVSMetadataURIUpdated 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 (_AVSDirectory *AVSDirectoryFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryAVSMetadataURIUpdatedIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) + if err != nil { + return nil, err + } + return &AVSDirectoryAVSMetadataURIUpdatedIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectory.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(AVSDirectoryAVSMetadataURIUpdated) + if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*AVSDirectoryAVSMetadataURIUpdated, error) { + event := new(AVSDirectoryAVSMetadataURIUpdated) + if err := _AVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the AVSDirectory contract. +type AVSDirectoryAVSMigratedToOperatorSetsIterator struct { + Event *AVSDirectoryAVSMigratedToOperatorSets // 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 *AVSDirectoryAVSMigratedToOperatorSetsIterator) 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(AVSDirectoryAVSMigratedToOperatorSets) + 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(AVSDirectoryAVSMigratedToOperatorSets) + 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 *AVSDirectoryAVSMigratedToOperatorSetsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryAVSMigratedToOperatorSetsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the AVSDirectory contract. +type AVSDirectoryAVSMigratedToOperatorSets struct { + Avs common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectory *AVSDirectoryFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryAVSMigratedToOperatorSetsIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) + if err != nil { + return nil, err + } + return &AVSDirectoryAVSMigratedToOperatorSetsIterator{contract: _AVSDirectory.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil +} + +// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectory *AVSDirectoryFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", 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(AVSDirectoryAVSMigratedToOperatorSets) + if err := _AVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", 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 +} + +// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. +// +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectory *AVSDirectoryFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*AVSDirectoryAVSMigratedToOperatorSets, error) { + event := new(AVSDirectoryAVSMigratedToOperatorSets) + if err := _AVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AVSDirectory contract. +type AVSDirectoryInitializedIterator struct { + Event *AVSDirectoryInitialized // 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 *AVSDirectoryInitializedIterator) 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(AVSDirectoryInitialized) + 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(AVSDirectoryInitialized) + 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 *AVSDirectoryInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryInitialized represents a Initialized event raised by the AVSDirectory contract. +type AVSDirectoryInitialized 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 (_AVSDirectory *AVSDirectoryFilterer) FilterInitialized(opts *bind.FilterOpts) (*AVSDirectoryInitializedIterator, error) { + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &AVSDirectoryInitializedIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *AVSDirectoryInitialized) (event.Subscription, error) { + + logs, sub, err := _AVSDirectory.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(AVSDirectoryInitialized) + if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParseInitialized(log types.Log) (*AVSDirectoryInitialized, error) { + event := new(AVSDirectoryInitialized) + if err := _AVSDirectory.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryMagnitudeAllocatedIterator is returned from FilterMagnitudeAllocated and is used to iterate over the raw logs and unpacked data for MagnitudeAllocated events raised by the AVSDirectory contract. +type AVSDirectoryMagnitudeAllocatedIterator struct { + Event *AVSDirectoryMagnitudeAllocated // 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 *AVSDirectoryMagnitudeAllocatedIterator) 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(AVSDirectoryMagnitudeAllocated) + 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(AVSDirectoryMagnitudeAllocated) + 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 *AVSDirectoryMagnitudeAllocatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryMagnitudeAllocatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryMagnitudeAllocated represents a MagnitudeAllocated event raised by the AVSDirectory contract. +type AVSDirectoryMagnitudeAllocated struct { + Operator common.Address + Strategy common.Address + OperatorSet IAVSDirectoryOperatorSet + MagnitudeToAllocate uint64 + EffectTimestamp uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMagnitudeAllocated is a free log retrieval operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. +// +// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) +func (_AVSDirectory *AVSDirectoryFilterer) FilterMagnitudeAllocated(opts *bind.FilterOpts) (*AVSDirectoryMagnitudeAllocatedIterator, error) { + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "MagnitudeAllocated") + if err != nil { + return nil, err + } + return &AVSDirectoryMagnitudeAllocatedIterator{contract: _AVSDirectory.contract, event: "MagnitudeAllocated", logs: logs, sub: sub}, nil +} + +// WatchMagnitudeAllocated is a free log subscription operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. +// +// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) +func (_AVSDirectory *AVSDirectoryFilterer) WatchMagnitudeAllocated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryMagnitudeAllocated) (event.Subscription, error) { + + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "MagnitudeAllocated") + 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(AVSDirectoryMagnitudeAllocated) + if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeAllocated", 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 +} + +// ParseMagnitudeAllocated is a log parse operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. +// +// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) +func (_AVSDirectory *AVSDirectoryFilterer) ParseMagnitudeAllocated(log types.Log) (*AVSDirectoryMagnitudeAllocated, error) { + event := new(AVSDirectoryMagnitudeAllocated) + if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeAllocated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryMagnitudeDeallocationCompletedIterator is returned from FilterMagnitudeDeallocationCompleted and is used to iterate over the raw logs and unpacked data for MagnitudeDeallocationCompleted events raised by the AVSDirectory contract. +type AVSDirectoryMagnitudeDeallocationCompletedIterator struct { + Event *AVSDirectoryMagnitudeDeallocationCompleted // 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 *AVSDirectoryMagnitudeDeallocationCompletedIterator) 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(AVSDirectoryMagnitudeDeallocationCompleted) + 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(AVSDirectoryMagnitudeDeallocationCompleted) + 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 *AVSDirectoryMagnitudeDeallocationCompletedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryMagnitudeDeallocationCompletedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryMagnitudeDeallocationCompleted represents a MagnitudeDeallocationCompleted event raised by the AVSDirectory contract. +type AVSDirectoryMagnitudeDeallocationCompleted struct { + Operator common.Address + Strategy common.Address + OperatorSet IAVSDirectoryOperatorSet + FreeMagnitudeAdded uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMagnitudeDeallocationCompleted is a free log retrieval operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. +// +// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) +func (_AVSDirectory *AVSDirectoryFilterer) FilterMagnitudeDeallocationCompleted(opts *bind.FilterOpts) (*AVSDirectoryMagnitudeDeallocationCompletedIterator, error) { + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "MagnitudeDeallocationCompleted") + if err != nil { + return nil, err + } + return &AVSDirectoryMagnitudeDeallocationCompletedIterator{contract: _AVSDirectory.contract, event: "MagnitudeDeallocationCompleted", logs: logs, sub: sub}, nil +} + +// WatchMagnitudeDeallocationCompleted is a free log subscription operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. +// +// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) +func (_AVSDirectory *AVSDirectoryFilterer) WatchMagnitudeDeallocationCompleted(opts *bind.WatchOpts, sink chan<- *AVSDirectoryMagnitudeDeallocationCompleted) (event.Subscription, error) { + + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "MagnitudeDeallocationCompleted") + 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(AVSDirectoryMagnitudeDeallocationCompleted) + if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", 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 +} + +// ParseMagnitudeDeallocationCompleted is a log parse operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. +// +// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) +func (_AVSDirectory *AVSDirectoryFilterer) ParseMagnitudeDeallocationCompleted(log types.Log) (*AVSDirectoryMagnitudeDeallocationCompleted, error) { + event := new(AVSDirectoryMagnitudeDeallocationCompleted) + if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryMagnitudeQueueDeallocatedIterator is returned from FilterMagnitudeQueueDeallocated and is used to iterate over the raw logs and unpacked data for MagnitudeQueueDeallocated events raised by the AVSDirectory contract. +type AVSDirectoryMagnitudeQueueDeallocatedIterator struct { + Event *AVSDirectoryMagnitudeQueueDeallocated // 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 *AVSDirectoryMagnitudeQueueDeallocatedIterator) 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(AVSDirectoryMagnitudeQueueDeallocated) + 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(AVSDirectoryMagnitudeQueueDeallocated) + 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 *AVSDirectoryMagnitudeQueueDeallocatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryMagnitudeQueueDeallocatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryMagnitudeQueueDeallocated represents a MagnitudeQueueDeallocated event raised by the AVSDirectory contract. +type AVSDirectoryMagnitudeQueueDeallocated struct { + Operator common.Address + Strategy common.Address + OperatorSet IAVSDirectoryOperatorSet + MagnitudeToDeallocate uint64 + CompletableTimestamp uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMagnitudeQueueDeallocated is a free log retrieval operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. +// +// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) +func (_AVSDirectory *AVSDirectoryFilterer) FilterMagnitudeQueueDeallocated(opts *bind.FilterOpts) (*AVSDirectoryMagnitudeQueueDeallocatedIterator, error) { + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "MagnitudeQueueDeallocated") + if err != nil { + return nil, err + } + return &AVSDirectoryMagnitudeQueueDeallocatedIterator{contract: _AVSDirectory.contract, event: "MagnitudeQueueDeallocated", logs: logs, sub: sub}, nil +} + +// WatchMagnitudeQueueDeallocated is a free log subscription operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. +// +// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) +func (_AVSDirectory *AVSDirectoryFilterer) WatchMagnitudeQueueDeallocated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryMagnitudeQueueDeallocated) (event.Subscription, error) { + + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "MagnitudeQueueDeallocated") + 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(AVSDirectoryMagnitudeQueueDeallocated) + if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeQueueDeallocated", 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 +} + +// ParseMagnitudeQueueDeallocated is a log parse operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. +// +// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) +func (_AVSDirectory *AVSDirectoryFilterer) ParseMagnitudeQueueDeallocated(log types.Log) (*AVSDirectoryMagnitudeQueueDeallocated, error) { + event := new(AVSDirectoryMagnitudeQueueDeallocated) + if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeQueueDeallocated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the AVSDirectory contract. +type AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { + Event *AVSDirectoryOperatorAVSRegistrationStatusUpdated // 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 *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) 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(AVSDirectoryOperatorAVSRegistrationStatusUpdated) + 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(AVSDirectoryOperatorAVSRegistrationStatusUpdated) + 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 *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectory contract. +type AVSDirectoryOperatorAVSRegistrationStatusUpdated struct { + Operator common.Address + Avs common.Address + Status uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + if err != nil { + return nil, err + } + return &AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. // -// Solidity: function unpause(uint256 newPausedStatus) returns() -func (_AVSDirectory *AVSDirectorySession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _AVSDirectory.Contract.Unpause(&_AVSDirectory.TransactOpts, newPausedStatus) -} +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { -// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. -// -// Solidity: function unpause(uint256 newPausedStatus) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _AVSDirectory.Contract.Unpause(&_AVSDirectory.TransactOpts, newPausedStatus) -} + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. -// -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectory *AVSDirectoryTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) -} + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, 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(AVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + return err + } + event.Raw = log -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. -// -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectory *AVSDirectorySession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _AVSDirectory.Contract.UpdateAVSMetadataURI(&_AVSDirectory.TransactOpts, metadataURI) + 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 } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. // -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _AVSDirectory.Contract.UpdateAVSMetadataURI(&_AVSDirectory.TransactOpts, metadataURI) +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { + event := new(AVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil } -// AVSDirectoryAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AVSDirectory contract. -type AVSDirectoryAVSMetadataURIUpdatedIterator struct { - Event *AVSDirectoryAVSMetadataURIUpdated // Event containing the contract specifics and raw log +// AVSDirectoryOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the AVSDirectory contract. +type AVSDirectoryOperatorAddedToOperatorSetIterator struct { + Event *AVSDirectoryOperatorAddedToOperatorSet // 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 @@ -1129,7 +2761,7 @@ type AVSDirectoryAVSMetadataURIUpdatedIterator 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 *AVSDirectoryAVSMetadataURIUpdatedIterator) Next() bool { +func (it *AVSDirectoryOperatorAddedToOperatorSetIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1138,7 +2770,7 @@ func (it *AVSDirectoryAVSMetadataURIUpdatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryAVSMetadataURIUpdated) + it.Event = new(AVSDirectoryOperatorAddedToOperatorSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1153,7 +2785,7 @@ func (it *AVSDirectoryAVSMetadataURIUpdatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryAVSMetadataURIUpdated) + it.Event = new(AVSDirectoryOperatorAddedToOperatorSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1169,52 +2801,52 @@ func (it *AVSDirectoryAVSMetadataURIUpdatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryAVSMetadataURIUpdatedIterator) Error() error { +func (it *AVSDirectoryOperatorAddedToOperatorSetIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryAVSMetadataURIUpdatedIterator) Close() error { +func (it *AVSDirectoryOperatorAddedToOperatorSetIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the AVSDirectory contract. -type AVSDirectoryAVSMetadataURIUpdated struct { - Avs common.Address - MetadataURI string +// AVSDirectoryOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the AVSDirectory contract. +type AVSDirectoryOperatorAddedToOperatorSet struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet Raw types.Log // Blockchain specific contextual infos } -// FilterAVSMetadataURIUpdated is a free log retrieval operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// FilterOperatorAddedToOperatorSet is a free log retrieval operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. // -// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) -func (_AVSDirectory *AVSDirectoryFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryAVSMetadataURIUpdatedIterator, error) { +// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryOperatorAddedToOperatorSetIterator, error) { - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) } - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) if err != nil { return nil, err } - return &AVSDirectoryAVSMetadataURIUpdatedIterator{contract: _AVSDirectory.contract, event: "AVSMetadataURIUpdated", logs: logs, sub: sub}, nil + return &AVSDirectoryOperatorAddedToOperatorSetIterator{contract: _AVSDirectory.contract, event: "OperatorAddedToOperatorSet", logs: logs, sub: sub}, nil } -// WatchAVSMetadataURIUpdated is a free log subscription operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// WatchOperatorAddedToOperatorSet is a free log subscription operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. // -// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) -func (_AVSDirectory *AVSDirectoryFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { +// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) } - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "AVSMetadataURIUpdated", avsRule) + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorAddedToOperatorSet", operatorRule) if err != nil { return nil, err } @@ -1224,8 +2856,8 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchAVSMetadataURIUpdated(opts *bind select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryAVSMetadataURIUpdated) - if err := _AVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { + event := new(AVSDirectoryOperatorAddedToOperatorSet) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { return err } event.Raw = log @@ -1246,21 +2878,21 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchAVSMetadataURIUpdated(opts *bind }), nil } -// ParseAVSMetadataURIUpdated is a log parse operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// ParseOperatorAddedToOperatorSet is a log parse operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. // -// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) -func (_AVSDirectory *AVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*AVSDirectoryAVSMetadataURIUpdated, error) { - event := new(AVSDirectoryAVSMetadataURIUpdated) - if err := _AVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { +// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*AVSDirectoryOperatorAddedToOperatorSet, error) { + event := new(AVSDirectoryOperatorAddedToOperatorSet) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { return nil, err } event.Raw = log return event, nil } -// AVSDirectoryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AVSDirectory contract. -type AVSDirectoryInitializedIterator struct { - Event *AVSDirectoryInitialized // Event containing the contract specifics and raw log +// AVSDirectoryOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the AVSDirectory contract. +type AVSDirectoryOperatorMigratedToOperatorSetsIterator struct { + Event *AVSDirectoryOperatorMigratedToOperatorSets // 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 @@ -1274,7 +2906,7 @@ type AVSDirectoryInitializedIterator 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 *AVSDirectoryInitializedIterator) Next() bool { +func (it *AVSDirectoryOperatorMigratedToOperatorSetsIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1283,7 +2915,7 @@ func (it *AVSDirectoryInitializedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryInitialized) + it.Event = new(AVSDirectoryOperatorMigratedToOperatorSets) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1298,7 +2930,7 @@ func (it *AVSDirectoryInitializedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryInitialized) + it.Event = new(AVSDirectoryOperatorMigratedToOperatorSets) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1314,41 +2946,61 @@ func (it *AVSDirectoryInitializedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryInitializedIterator) Error() error { +func (it *AVSDirectoryOperatorMigratedToOperatorSetsIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryInitializedIterator) Close() error { +func (it *AVSDirectoryOperatorMigratedToOperatorSetsIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryInitialized represents a Initialized event raised by the AVSDirectory contract. -type AVSDirectoryInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos +// AVSDirectoryOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the AVSDirectory contract. +type AVSDirectoryOperatorMigratedToOperatorSets struct { + Operator common.Address + Avs common.Address + OperatorSetIds []uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. // -// Solidity: event Initialized(uint8 version) -func (_AVSDirectory *AVSDirectoryFilterer) FilterInitialized(opts *bind.FilterOpts) (*AVSDirectoryInitializedIterator, error) { +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryOperatorMigratedToOperatorSetsIterator, error) { - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "Initialized") + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) if err != nil { return nil, err } - return &AVSDirectoryInitializedIterator{contract: _AVSDirectory.contract, event: "Initialized", logs: logs, sub: sub}, nil + return &AVSDirectoryOperatorMigratedToOperatorSetsIterator{contract: _AVSDirectory.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil } -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. // -// Solidity: event Initialized(uint8 version) -func (_AVSDirectory *AVSDirectoryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *AVSDirectoryInitialized) (event.Subscription, error) { +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "Initialized") + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) if err != nil { return nil, err } @@ -1358,8 +3010,8 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchInitialized(opts *bind.WatchOpts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryInitialized) - if err := _AVSDirectory.contract.UnpackLog(event, "Initialized", log); err != nil { + event := new(AVSDirectoryOperatorMigratedToOperatorSets) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { return err } event.Raw = log @@ -1380,21 +3032,21 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchInitialized(opts *bind.WatchOpts }), nil } -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. // -// Solidity: event Initialized(uint8 version) -func (_AVSDirectory *AVSDirectoryFilterer) ParseInitialized(log types.Log) (*AVSDirectoryInitialized, error) { - event := new(AVSDirectoryInitialized) - if err := _AVSDirectory.contract.UnpackLog(event, "Initialized", log); err != nil { +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*AVSDirectoryOperatorMigratedToOperatorSets, error) { + event := new(AVSDirectoryOperatorMigratedToOperatorSets) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { return nil, err } event.Raw = log return event, nil } -// AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the AVSDirectory contract. -type AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { - Event *AVSDirectoryOperatorAVSRegistrationStatusUpdated // Event containing the contract specifics and raw log +// AVSDirectoryOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the AVSDirectory contract. +type AVSDirectoryOperatorRemovedFromOperatorSetIterator struct { + Event *AVSDirectoryOperatorRemovedFromOperatorSet // 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 @@ -1408,7 +3060,7 @@ type AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator 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 *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool { +func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1417,7 +3069,7 @@ func (it *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorAVSRegistrationStatusUpdated) + it.Event = new(AVSDirectoryOperatorRemovedFromOperatorSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1432,7 +3084,7 @@ func (it *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorAVSRegistrationStatusUpdated) + it.Event = new(AVSDirectoryOperatorRemovedFromOperatorSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1448,61 +3100,52 @@ func (it *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Error() error { +func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() error { +func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectory contract. -type AVSDirectoryOperatorAVSRegistrationStatusUpdated struct { - Operator common.Address - Avs common.Address - IsLegacyOperator bool - Raw types.Log // Blockchain specific contextual infos +// AVSDirectoryOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the AVSDirectory contract. +type AVSDirectoryOperatorRemovedFromOperatorSet struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. +// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) -func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { +// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { var operatorRule []interface{} for _, operatorItem := range operator { operatorRule = append(operatorRule, operatorItem) } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) if err != nil { return nil, err } - return &AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil + return &AVSDirectoryOperatorRemovedFromOperatorSetIterator{contract: _AVSDirectory.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil } -// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. +// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) -func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { +// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { var operatorRule []interface{} for _, operatorItem := range operator { operatorRule = append(operatorRule, operatorItem) } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) if err != nil { return nil, err } @@ -1512,8 +3155,8 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpd select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryOperatorAVSRegistrationStatusUpdated) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + event := new(AVSDirectoryOperatorRemovedFromOperatorSet) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { return err } event.Raw = log @@ -1534,21 +3177,21 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpd }), nil } -// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. +// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) -func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { - event := new(AVSDirectoryOperatorAVSRegistrationStatusUpdated) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { +// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*AVSDirectoryOperatorRemovedFromOperatorSet, error) { + event := new(AVSDirectoryOperatorRemovedFromOperatorSet) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { return nil, err } event.Raw = log return event, nil } -// AVSDirectoryOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the AVSDirectory contract. -type AVSDirectoryOperatorAddedToOperatorSetIterator struct { - Event *AVSDirectoryOperatorAddedToOperatorSet // Event containing the contract specifics and raw log +// AVSDirectoryOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the AVSDirectory contract. +type AVSDirectoryOperatorSetCreatedIterator struct { + Event *AVSDirectoryOperatorSetCreated // 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 @@ -1562,7 +3205,7 @@ type AVSDirectoryOperatorAddedToOperatorSetIterator 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 *AVSDirectoryOperatorAddedToOperatorSetIterator) Next() bool { +func (it *AVSDirectoryOperatorSetCreatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1571,7 +3214,7 @@ func (it *AVSDirectoryOperatorAddedToOperatorSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorAddedToOperatorSet) + it.Event = new(AVSDirectoryOperatorSetCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1586,7 +3229,7 @@ func (it *AVSDirectoryOperatorAddedToOperatorSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorAddedToOperatorSet) + it.Event = new(AVSDirectoryOperatorSetCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1602,43 +3245,41 @@ func (it *AVSDirectoryOperatorAddedToOperatorSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryOperatorAddedToOperatorSetIterator) Error() error { +func (it *AVSDirectoryOperatorSetCreatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryOperatorAddedToOperatorSetIterator) Close() error { +func (it *AVSDirectoryOperatorSetCreatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the AVSDirectory contract. -type AVSDirectoryOperatorAddedToOperatorSet struct { - Operator common.Address - Avs common.Address - OperatorSetId uint32 - Raw types.Log // Blockchain specific contextual infos +// AVSDirectoryOperatorSetCreated represents a OperatorSetCreated event raised by the AVSDirectory contract. +type AVSDirectoryOperatorSetCreated struct { + OperatorSet IAVSDirectoryOperatorSet + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAddedToOperatorSet is a free log retrieval operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. +// FilterOperatorSetCreated is a free log retrieval operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. // -// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts) (*AVSDirectoryOperatorAddedToOperatorSetIterator, error) { +// Solidity: event OperatorSetCreated((address,uint32) operatorSet) +func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*AVSDirectoryOperatorSetCreatedIterator, error) { - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet") + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorSetCreated") if err != nil { return nil, err } - return &AVSDirectoryOperatorAddedToOperatorSetIterator{contract: _AVSDirectory.contract, event: "OperatorAddedToOperatorSet", logs: logs, sub: sub}, nil + return &AVSDirectoryOperatorSetCreatedIterator{contract: _AVSDirectory.contract, event: "OperatorSetCreated", logs: logs, sub: sub}, nil } -// WatchOperatorAddedToOperatorSet is a free log subscription operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. +// WatchOperatorSetCreated is a free log subscription operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. // -// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorAddedToOperatorSet) (event.Subscription, error) { +// Solidity: event OperatorSetCreated((address,uint32) operatorSet) +func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorSetCreated) (event.Subscription, error) { - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorAddedToOperatorSet") + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorSetCreated") if err != nil { return nil, err } @@ -1648,8 +3289,8 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryOperatorAddedToOperatorSet) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { + event := new(AVSDirectoryOperatorSetCreated) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { return err } event.Raw = log @@ -1670,21 +3311,21 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts }), nil } -// ParseOperatorAddedToOperatorSet is a log parse operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. +// ParseOperatorSetCreated is a log parse operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. // -// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*AVSDirectoryOperatorAddedToOperatorSet, error) { - event := new(AVSDirectoryOperatorAddedToOperatorSet) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { +// Solidity: event OperatorSetCreated((address,uint32) operatorSet) +func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorSetCreated(log types.Log) (*AVSDirectoryOperatorSetCreated, error) { + event := new(AVSDirectoryOperatorSetCreated) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// AVSDirectoryOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the AVSDirectory contract. -type AVSDirectoryOperatorRemovedFromOperatorSetIterator struct { - Event *AVSDirectoryOperatorRemovedFromOperatorSet // Event containing the contract specifics and raw log +// AVSDirectoryOperatorSlashedIterator is returned from FilterOperatorSlashed and is used to iterate over the raw logs and unpacked data for OperatorSlashed events raised by the AVSDirectory contract. +type AVSDirectoryOperatorSlashedIterator struct { + Event *AVSDirectoryOperatorSlashed // 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 @@ -1698,7 +3339,7 @@ type AVSDirectoryOperatorRemovedFromOperatorSetIterator 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 *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { +func (it *AVSDirectoryOperatorSlashedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1707,7 +3348,7 @@ func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorRemovedFromOperatorSet) + it.Event = new(AVSDirectoryOperatorSlashed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1722,7 +3363,7 @@ func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorRemovedFromOperatorSet) + it.Event = new(AVSDirectoryOperatorSlashed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1738,43 +3379,44 @@ func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Error() error { +func (it *AVSDirectoryOperatorSlashedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Close() error { +func (it *AVSDirectoryOperatorSlashedIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the AVSDirectory contract. -type AVSDirectoryOperatorRemovedFromOperatorSet struct { +// AVSDirectoryOperatorSlashed represents a OperatorSlashed event raised by the AVSDirectory contract. +type AVSDirectoryOperatorSlashed struct { Operator common.Address - Avs common.Address OperatorSetId uint32 + Strategy common.Address + BipsToSlash uint16 Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. +// FilterOperatorSlashed is a free log retrieval operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. // -// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts) (*AVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { +// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) +func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorSlashed(opts *bind.FilterOpts) (*AVSDirectoryOperatorSlashedIterator, error) { - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet") + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorSlashed") if err != nil { return nil, err } - return &AVSDirectoryOperatorRemovedFromOperatorSetIterator{contract: _AVSDirectory.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil + return &AVSDirectoryOperatorSlashedIterator{contract: _AVSDirectory.contract, event: "OperatorSlashed", logs: logs, sub: sub}, nil } -// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. +// WatchOperatorSlashed is a free log subscription operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. // -// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorRemovedFromOperatorSet) (event.Subscription, error) { +// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) +func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorSlashed(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorSlashed) (event.Subscription, error) { - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet") + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorSlashed") if err != nil { return nil, err } @@ -1784,8 +3426,8 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(o select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryOperatorRemovedFromOperatorSet) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { + event := new(AVSDirectoryOperatorSlashed) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorSlashed", log); err != nil { return err } event.Raw = log @@ -1806,12 +3448,12 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(o }), nil } -// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. +// ParseOperatorSlashed is a log parse operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. // -// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*AVSDirectoryOperatorRemovedFromOperatorSet, error) { - event := new(AVSDirectoryOperatorRemovedFromOperatorSet) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { +// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) +func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorSlashed(log types.Log) (*AVSDirectoryOperatorSlashed, error) { + event := new(AVSDirectoryOperatorSlashed) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorSlashed", log); err != nil { return nil, err } event.Raw = log diff --git a/pkg/bindings/AVSDirectoryStorage/binding.go b/pkg/bindings/AVSDirectoryStorage/binding.go index 095521ea5..a76c0eb2a 100644 --- a/pkg/bindings/AVSDirectoryStorage/binding.go +++ b/pkg/bindings/AVSDirectoryStorage/binding.go @@ -29,6 +29,20 @@ var ( _ = abi.ConvertType ) +// IAVSDirectoryMagnitudeAllocation is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryMagnitudeAllocation struct { + Strategy common.Address + ExpectedTotalMagnitude uint64 + OperatorSets []IAVSDirectoryOperatorSet + Magnitudes []uint64 +} + +// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryOperatorSet struct { + Avs common.Address + OperatorSetId uint32 +} + // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -38,7 +52,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryStorageMetaData contains all meta data concerning the AVSDirectoryStorage contract. var AVSDirectoryStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"memberInfo\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"inTotalSets\",\"type\":\"uint248\",\"internalType\":\"uint248\"},{\"name\":\"isLegacyOperator\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"isLegacyOperator\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"INITIAL_TOTAL_MAGNITUDE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAGNITUDE_ADJUSTMENT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"allocationDelay\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"isSet\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateMagnitudeAllocationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"freeMagnitude\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"numToComplete\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashablePPM\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"linear\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint24[]\",\"internalType\":\"uint24[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initializeAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetMemberCount\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"registered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"lastDeregisteredTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"slashOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateFreeMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToComplete\",\"type\":\"uint8[]\",\"internalType\":\"uint8[]\"}],\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeAllocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToAllocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeDeallocationCompleted\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"freeMagnitudeAdded\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeQueueDeallocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToDeallocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"completableTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false}]", } // AVSDirectoryStorageABI is the input ABI used to generate the binding from. @@ -218,6 +232,68 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) DOMAINTYPEHASH() ( return _AVSDirectoryStorage.Contract.DOMAINTYPEHASH(&_AVSDirectoryStorage.CallOpts) } +// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. +// +// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) INITIALTOTALMAGNITUDE(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "INITIAL_TOTAL_MAGNITUDE") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. +// +// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) INITIALTOTALMAGNITUDE() (uint64, error) { + return _AVSDirectoryStorage.Contract.INITIALTOTALMAGNITUDE(&_AVSDirectoryStorage.CallOpts) +} + +// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. +// +// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) INITIALTOTALMAGNITUDE() (uint64, error) { + return _AVSDirectoryStorage.Contract.INITIALTOTALMAGNITUDE(&_AVSDirectoryStorage.CallOpts) +} + +// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. +// +// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) MAGNITUDEADJUSTMENTTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "MAGNITUDE_ADJUSTMENT_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. +// +// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) MAGNITUDEADJUSTMENTTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.MAGNITUDEADJUSTMENTTYPEHASH(&_AVSDirectoryStorage.CallOpts) +} + +// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. +// +// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) MAGNITUDEADJUSTMENTTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.MAGNITUDEADJUSTMENTTYPEHASH(&_AVSDirectoryStorage.CallOpts) +} + // OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. // // Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) @@ -249,6 +325,37 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORAVSREGISTR return _AVSDirectoryStorage.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) } +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OPERATORSETFORCEDEREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) +} + +// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. +// +// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { + return _AVSDirectoryStorage.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) +} + // OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. // // Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) @@ -280,6 +387,113 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORSETREGISTR return _AVSDirectoryStorage.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) } +// AllocationDelay is a free data retrieval call binding the contract method 0xbe4e1fd3. +// +// Solidity: function allocationDelay(address ) view returns(bool isSet, uint32 allocationDelay) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) AllocationDelay(opts *bind.CallOpts, arg0 common.Address) (struct { + IsSet bool + AllocationDelay uint32 +}, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "allocationDelay", arg0) + + outstruct := new(struct { + IsSet bool + AllocationDelay uint32 + }) + if err != nil { + return *outstruct, err + } + + outstruct.IsSet = *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.AllocationDelay = *abi.ConvertType(out[1], new(uint32)).(*uint32) + + return *outstruct, err + +} + +// AllocationDelay is a free data retrieval call binding the contract method 0xbe4e1fd3. +// +// Solidity: function allocationDelay(address ) view returns(bool isSet, uint32 allocationDelay) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) AllocationDelay(arg0 common.Address) (struct { + IsSet bool + AllocationDelay uint32 +}, error) { + return _AVSDirectoryStorage.Contract.AllocationDelay(&_AVSDirectoryStorage.CallOpts, arg0) +} + +// AllocationDelay is a free data retrieval call binding the contract method 0xbe4e1fd3. +// +// Solidity: function allocationDelay(address ) view returns(bool isSet, uint32 allocationDelay) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) AllocationDelay(arg0 common.Address) (struct { + IsSet bool + AllocationDelay uint32 +}, error) { + return _AVSDirectoryStorage.Contract.AllocationDelay(&_AVSDirectoryStorage.CallOpts, arg0) +} + +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) AvsOperatorStatus(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint8, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "avsOperatorStatus", arg0, arg1) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { + return _AVSDirectoryStorage.Contract.AvsOperatorStatus(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + +// AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. +// +// Solidity: function avsOperatorStatus(address , address ) view returns(uint8) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) AvsOperatorStatus(arg0 common.Address, arg1 common.Address) (uint8, error) { + return _AVSDirectoryStorage.Contract.AvsOperatorStatus(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + +// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. +// +// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) CalculateMagnitudeAllocationDigestHash(opts *bind.CallOpts, operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "calculateMagnitudeAllocationDigestHash", operator, allocations, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. +// +// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CalculateMagnitudeAllocationDigestHash(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectoryStorage.Contract.CalculateMagnitudeAllocationDigestHash(&_AVSDirectoryStorage.CallOpts, operator, allocations, salt, expiry) +} + +// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. +// +// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateMagnitudeAllocationDigestHash(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectoryStorage.Contract.CalculateMagnitudeAllocationDigestHash(&_AVSDirectoryStorage.CallOpts, operator, allocations, salt, expiry) +} + // CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. // // Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -311,6 +525,37 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateOperatorA return _AVSDirectoryStorage.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectoryStorage.CallOpts, operator, avs, salt, expiry) } +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectoryStorage.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) +} + +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _AVSDirectoryStorage.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) +} + // CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. // // Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -373,12 +618,15 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) Delegation() (comm return _AVSDirectoryStorage.Contract.Delegation(&_AVSDirectoryStorage.CallOpts) } -// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. // -// Solidity: function isMember(address , address , uint32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsMember(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { +// Solidity: function domainSeparator() view returns(bytes32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 6b2ab7ed (build: bindings) err := _AVSDirectoryStorage.contract.Call(opts, &out, "domainSeparator") if err != nil { @@ -405,6 +653,7 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) DomainSeparator() return _AVSDirectoryStorage.Contract.DomainSeparator(&_AVSDirectoryStorage.CallOpts) } +<<<<<<< HEAD // GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // // Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) @@ -417,11 +666,26 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetNumOperatorsInOperator } out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) +======= +// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. +// +// Solidity: function freeMagnitude(address , address ) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) FreeMagnitude(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint64, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "freeMagnitude", arg0, arg1) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) +>>>>>>> 6b2ab7ed (build: bindings) return out0, err } +<<<<<<< HEAD // GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // // Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) @@ -448,11 +712,76 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetOperatorSetsOfOperator } out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) +======= +// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. +// +// Solidity: function freeMagnitude(address , address ) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) FreeMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { + return _AVSDirectoryStorage.Contract.FreeMagnitude(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + +// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. +// +// Solidity: function freeMagnitude(address , address ) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) FreeMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { + return _AVSDirectoryStorage.Contract.FreeMagnitude(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0xdd63ac60. +// +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetAllocatableMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getAllocatableMagnitude", operator, strategy, numToComplete) + + 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 0xdd63ac60. +// +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { + return _AVSDirectoryStorage.Contract.GetAllocatableMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy, numToComplete) +} + +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0xdd63ac60. +// +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { + return _AVSDirectoryStorage.Contract.GetAllocatableMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy, numToComplete) +} + +// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +// +// Solidity: function getAllocationDelay(address operator) view returns(uint32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetAllocationDelay(opts *bind.CallOpts, operator common.Address) (uint32, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getAllocationDelay", operator) + + if err != nil { + return *new(uint32), err + } + +<<<<<<< HEAD + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) +>>>>>>> 6b2ab7ed (build: bindings) +======= + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) +>>>>>>> 49569901 (feat: set allocations (#691)) return out0, err } +<<<<<<< HEAD +<<<<<<< HEAD // GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. // // Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) @@ -527,6 +856,60 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageSession) InTotalOperatorSets(oper // Solidity: function inTotalOperatorSets(address operator) view returns(uint256) func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { return _AVSDirectoryStorage.Contract.InTotalOperatorSets(&_AVSDirectoryStorage.CallOpts, operator) +======= +// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. +======= +// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +>>>>>>> 49569901 (feat: set allocations (#691)) +// +// Solidity: function getAllocationDelay(address operator) view returns(uint32) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetAllocationDelay(operator common.Address) (uint32, error) { + return _AVSDirectoryStorage.Contract.GetAllocationDelay(&_AVSDirectoryStorage.CallOpts, operator) +} + +// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +// +<<<<<<< HEAD +// Solidity: function getSlashableBips(address operator, (address,uint32) operatorSet, address strategy, uint32 timestamp) view returns(uint16) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetSlashableBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategy common.Address, timestamp uint32) (uint16, error) { + return _AVSDirectoryStorage.Contract.GetSlashableBips(&_AVSDirectoryStorage.CallOpts, operator, operatorSet, strategy, timestamp) +>>>>>>> 6b2ab7ed (build: bindings) +======= +// Solidity: function getAllocationDelay(address operator) view returns(uint32) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetAllocationDelay(operator common.Address) (uint32, error) { + return _AVSDirectoryStorage.Contract.GetAllocationDelay(&_AVSDirectoryStorage.CallOpts, operator) +} + +// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. +// +// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetSlashablePPM(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getSlashablePPM", operator, operatorSet, strategies, timestamp, linear) + + if err != nil { + return *new([]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) + + return out0, err + +} + +// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. +// +// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetSlashablePPM(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { + return _AVSDirectoryStorage.Contract.GetSlashablePPM(&_AVSDirectoryStorage.CallOpts, operator, operatorSet, strategies, timestamp, linear) +} + +// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. +// +// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetSlashablePPM(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { + return _AVSDirectoryStorage.Contract.GetSlashablePPM(&_AVSDirectoryStorage.CallOpts, operator, operatorSet, strategies, timestamp, linear) +>>>>>>> 49569901 (feat: set allocations (#691)) } // IsMember is a free data retrieval call binding the contract method 0xda2ff05d. @@ -535,9 +918,12 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) InTotalOperatorSet func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsMember(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { var out []interface{} err := _AVSDirectoryStorage.contract.Call(opts, &out, "isMember", operator, operatorSet) +<<<<<<< HEAD ======= err := _AVSDirectoryStorage.contract.Call(opts, &out, "isMember", arg0, arg1, arg2) >>>>>>> ce94473c (feat: operator commission bips (#627)) +======= +>>>>>>> 6b2ab7ed (build: bindings) if err != nil { return *new(bool), err @@ -549,71 +935,57 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsMember(opts *bind.CallO } -// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. // -// Solidity: function isMember(address , address , uint32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsMember(arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { - return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, arg0, arg1, arg2) +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) } -// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. +// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. // -// Solidity: function isMember(address , address , uint32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsMember(arg0 common.Address, arg1 common.Address, arg2 uint32) (bool, error) { - return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, arg0, arg1, arg2) +// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) } -// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. // -// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) MemberInfo(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (struct { - InTotalSets *big.Int - IsLegacyOperator bool -}, error) { +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsOperatorSet(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (bool, error) { var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "memberInfo", arg0, arg1) + err := _AVSDirectoryStorage.contract.Call(opts, &out, "isOperatorSet", arg0, arg1) - outstruct := new(struct { - InTotalSets *big.Int - IsLegacyOperator bool - }) if err != nil { - return *outstruct, err + return *new(bool), err } - outstruct.InTotalSets = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.IsLegacyOperator = *abi.ConvertType(out[1], new(bool)).(*bool) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - return *outstruct, err + return out0, err } -// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. // -// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) MemberInfo(arg0 common.Address, arg1 common.Address) (struct { - InTotalSets *big.Int - IsLegacyOperator bool -}, error) { - return _AVSDirectoryStorage.Contract.MemberInfo(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { + return _AVSDirectoryStorage.Contract.IsOperatorSet(&_AVSDirectoryStorage.CallOpts, arg0, arg1) } -// MemberInfo is a free data retrieval call binding the contract method 0xf37c521c. +// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. // -// Solidity: function memberInfo(address , address ) view returns(uint248 inTotalSets, bool isLegacyOperator) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) MemberInfo(arg0 common.Address, arg1 common.Address) (struct { - InTotalSets *big.Int - IsLegacyOperator bool -}, error) { - return _AVSDirectoryStorage.Contract.MemberInfo(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { + return _AVSDirectoryStorage.Contract.IsOperatorSet(&_AVSDirectoryStorage.CallOpts, arg0, arg1) } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. // -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsOperatorSetAVS(opts *bind.CallOpts, arg0 common.Address) (bool, error) { var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) + err := _AVSDirectoryStorage.contract.Call(opts, &out, "isOperatorSetAVS", arg0) if err != nil { return *new(bool), err @@ -625,50 +997,113 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSaltIsSpent(opts } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. // -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { + return _AVSDirectoryStorage.Contract.IsOperatorSetAVS(&_AVSDirectoryStorage.CallOpts, arg0) } -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. // -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +// Solidity: function isOperatorSetAVS(address ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { + return _AVSDirectoryStorage.Contract.IsOperatorSetAVS(&_AVSDirectoryStorage.CallOpts, arg0) } -<<<<<<< HEAD -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. // -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetMemberAtIndex(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { +// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsOperatorSlashable(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetMemberAtIndex", operatorSet, index) + err := _AVSDirectoryStorage.contract.Call(opts, &out, "isOperatorSlashable", operator, operatorSet) if err != nil { - return *new(common.Address), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. // -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - return _AVSDirectoryStorage.Contract.OperatorSetMemberAtIndex(&_AVSDirectoryStorage.CallOpts, operatorSet, index) +// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectoryStorage.Contract.IsOperatorSlashable(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) } -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. // -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - return _AVSDirectoryStorage.Contract.OperatorSetMemberAtIndex(&_AVSDirectoryStorage.CallOpts, operatorSet, index) +// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _AVSDirectoryStorage.Contract.IsOperatorSlashable(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. +// +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + +<<<<<<< HEAD +<<<<<<< HEAD +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetMemberAtIndex(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetMemberAtIndex", operatorSet, index) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + return _AVSDirectoryStorage.Contract.OperatorSetMemberAtIndex(&_AVSDirectoryStorage.CallOpts, operatorSet, index) +} + +// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. +// +// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { + return _AVSDirectoryStorage.Contract.OperatorSetMemberAtIndex(&_AVSDirectoryStorage.CallOpts, operatorSet, index) } // OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. @@ -768,24 +1203,145 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) CreateOperator ======= >>>>>>> ce94473c (feat: operator commission bips (#627)) // DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +======= +// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. +>>>>>>> 6b2ab7ed (build: bindings) +// +// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetMemberCount(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (*big.Int, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetMemberCount", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetMemberCount(arg0 common.Address, arg1 uint32) (*big.Int, error) { + return _AVSDirectoryStorage.Contract.OperatorSetMemberCount(&_AVSDirectoryStorage.CallOpts, arg0, arg1) } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) +// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetMemberCount(arg0 common.Address, arg1 uint32) (*big.Int, error) { + return _AVSDirectoryStorage.Contract.OperatorSetMemberCount(&_AVSDirectoryStorage.CallOpts, arg0, arg1) } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. +// +// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetStatus(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { + Registered bool + LastDeregisteredTimestamp uint32 +}, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetStatus", arg0, arg1, arg2) + + outstruct := new(struct { + Registered bool + LastDeregisteredTimestamp uint32 + }) + if err != nil { + return *outstruct, err + } + + outstruct.Registered = *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.LastDeregisteredTimestamp = *abi.ConvertType(out[1], new(uint32)).(*uint32) + + return *outstruct, err + +} + +// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. +// +// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetStatus(arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { + Registered bool + LastDeregisteredTimestamp uint32 +}, error) { + return _AVSDirectoryStorage.Contract.OperatorSetStatus(&_AVSDirectoryStorage.CallOpts, arg0, arg1, arg2) +} + +// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. +// +// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetStatus(arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { + Registered bool + LastDeregisteredTimestamp uint32 +}, error) { + return _AVSDirectoryStorage.Contract.OperatorSetStatus(&_AVSDirectoryStorage.CallOpts, arg0, arg1, arg2) +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "becomeOperatorSetAVS") +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.BecomeOperatorSetAVS(&_AVSDirectoryStorage.TransactOpts) +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.BecomeOperatorSetAVS(&_AVSDirectoryStorage.TransactOpts) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) CancelSalt(opts *bind.TransactOpts, salt [32]byte) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "cancelSalt", salt) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.CancelSalt(&_AVSDirectoryStorage.TransactOpts, salt) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.CancelSalt(&_AVSDirectoryStorage.TransactOpts, salt) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "createOperatorSets", operatorSetIds) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.CreateOperatorSets(&_AVSDirectoryStorage.TransactOpts, operatorSetIds) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.CreateOperatorSets(&_AVSDirectoryStorage.TransactOpts, operatorSetIds) } // DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. @@ -809,46 +1365,130 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) DeregisterOper return _AVSDirectoryStorage.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds) } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, avs, operatorSetIds, operatorSignature) +} + +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. +// +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, avs, operatorSetIds, operatorSignature) +} + +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. +// +// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) InitializeAllocationDelay(opts *bind.TransactOpts, operator common.Address, delay uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "initializeAllocationDelay", operator, delay) +} + +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. +// +// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) InitializeAllocationDelay(operator common.Address, delay uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.InitializeAllocationDelay(&_AVSDirectoryStorage.TransactOpts, operator, delay) +} + +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. +// +// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) InitializeAllocationDelay(operator common.Address, delay uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.InitializeAllocationDelay(&_AVSDirectoryStorage.TransactOpts, operator, delay) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. +// +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) +} + +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operators, operatorSetIds) } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operators, operatorSetIds) } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) +// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) ModifyAllocations(opts *bind.TransactOpts, operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "modifyAllocations", operator, allocations, operatorSignature) +} + +// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. +// +// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) ModifyAllocations(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.ModifyAllocations(&_AVSDirectoryStorage.TransactOpts, operator, allocations, operatorSignature) +} + +// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. +// +// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) ModifyAllocations(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.ModifyAllocations(&_AVSDirectoryStorage.TransactOpts, operator, allocations, operatorSignature) } // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, signature) +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, operatorSignature) } // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, signature) +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, operatorSignature) } // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, signature) +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, operatorSignature) +} + +// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. +// +// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) SlashOperator(opts *bind.TransactOpts, operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "slashOperator", operator, operatorSetId, strategies, bipsToSlash) +} + +// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. +// +// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.SlashOperator(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) +} + +// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. +// +// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.SlashOperator(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) } // UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. @@ -872,6 +1512,27 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) UpdateAVSMetad return _AVSDirectoryStorage.Contract.UpdateAVSMetadataURI(&_AVSDirectoryStorage.TransactOpts, metadataURI) } +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) UpdateFreeMagnitude(opts *bind.TransactOpts, operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "updateFreeMagnitude", operator, strategies, numToComplete) +} + +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.UpdateFreeMagnitude(&_AVSDirectoryStorage.TransactOpts, operator, strategies, numToComplete) +} + +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.UpdateFreeMagnitude(&_AVSDirectoryStorage.TransactOpts, operator, strategies, numToComplete) +} + // AVSDirectoryStorageAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AVSDirectoryStorage contract. type AVSDirectoryStorageAVSMetadataURIUpdatedIterator struct { Event *AVSDirectoryStorageAVSMetadataURIUpdated // Event containing the contract specifics and raw log @@ -1017,9 +1678,9 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseAVSMetadataURIUpda return event, nil } -// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator struct { - Event *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated // Event containing the contract specifics and raw log +// AVSDirectoryStorageAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageAVSMigratedToOperatorSetsIterator struct { + Event *AVSDirectoryStorageAVSMigratedToOperatorSets // 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 @@ -1033,7 +1694,7 @@ type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator 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 *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Next() bool { +func (it *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1042,7 +1703,7 @@ func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Next( if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + it.Event = new(AVSDirectoryStorageAVSMigratedToOperatorSets) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1057,7 +1718,7 @@ func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Next( // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + it.Event = new(AVSDirectoryStorageAVSMigratedToOperatorSets) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1073,61 +1734,51 @@ func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Next( } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Error() error { +func (it *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Close() error { +func (it *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated struct { - Operator common.Address - Avs common.Address - IsLegacyOperator bool - Raw types.Log // Blockchain specific contextual infos +// AVSDirectoryStorageAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageAVSMigratedToOperatorSets struct { + Avs common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. +// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator, error) { +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryStorageAVSMigratedToOperatorSetsIterator, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } var avsRule []interface{} for _, avsItem := range avs { avsRule = append(avsRule, avsItem) } - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) if err != nil { return nil, err } - return &AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil + return &AVSDirectoryStorageAVSMigratedToOperatorSetsIterator{contract: _AVSDirectoryStorage.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil } -// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. +// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } var avsRule []interface{} for _, avsItem := range avs { avsRule = append(avsRule, avsItem) } - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", avsRule) if err != nil { return nil, err } @@ -1137,8 +1788,8 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistr select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + event := new(AVSDirectoryStorageAVSMigratedToOperatorSets) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { return err } event.Raw = log @@ -1159,21 +1810,21 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistr }), nil } -// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. +// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, error) { - event := new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*AVSDirectoryStorageAVSMigratedToOperatorSets, error) { + event := new(AVSDirectoryStorageAVSMigratedToOperatorSets) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { return nil, err } event.Raw = log return event, nil } -// AVSDirectoryStorageOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorAddedToOperatorSetIterator struct { - Event *AVSDirectoryStorageOperatorAddedToOperatorSet // Event containing the contract specifics and raw log +// AVSDirectoryStorageMagnitudeAllocatedIterator is returned from FilterMagnitudeAllocated and is used to iterate over the raw logs and unpacked data for MagnitudeAllocated events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageMagnitudeAllocatedIterator struct { + Event *AVSDirectoryStorageMagnitudeAllocated // 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 @@ -1187,7 +1838,7 @@ type AVSDirectoryStorageOperatorAddedToOperatorSetIterator 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 *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Next() bool { +func (it *AVSDirectoryStorageMagnitudeAllocatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1196,7 +1847,7 @@ func (it *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryStorageOperatorAddedToOperatorSet) + it.Event = new(AVSDirectoryStorageMagnitudeAllocated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1211,7 +1862,7 @@ func (it *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryStorageOperatorAddedToOperatorSet) + it.Event = new(AVSDirectoryStorageMagnitudeAllocated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1227,43 +1878,45 @@ func (it *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Error() error { +func (it *AVSDirectoryStorageMagnitudeAllocatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Close() error { +func (it *AVSDirectoryStorageMagnitudeAllocatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryStorageOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorAddedToOperatorSet struct { - Operator common.Address - Avs common.Address - OperatorSetId uint32 - Raw types.Log // Blockchain specific contextual infos +// AVSDirectoryStorageMagnitudeAllocated represents a MagnitudeAllocated event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageMagnitudeAllocated struct { + Operator common.Address + Strategy common.Address + OperatorSet IAVSDirectoryOperatorSet + MagnitudeToAllocate uint64 + EffectTimestamp uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAddedToOperatorSet is a free log retrieval operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. +// FilterMagnitudeAllocated is a free log retrieval operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. // -// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts) (*AVSDirectoryStorageOperatorAddedToOperatorSetIterator, error) { +// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterMagnitudeAllocated(opts *bind.FilterOpts) (*AVSDirectoryStorageMagnitudeAllocatedIterator, error) { - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAddedToOperatorSet") + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "MagnitudeAllocated") if err != nil { return nil, err } - return &AVSDirectoryStorageOperatorAddedToOperatorSetIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorAddedToOperatorSet", logs: logs, sub: sub}, nil + return &AVSDirectoryStorageMagnitudeAllocatedIterator{contract: _AVSDirectoryStorage.contract, event: "MagnitudeAllocated", logs: logs, sub: sub}, nil } -// WatchOperatorAddedToOperatorSet is a free log subscription operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. +// WatchMagnitudeAllocated is a free log subscription operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. // -// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAddedToOperatorSet) (event.Subscription, error) { +// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchMagnitudeAllocated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageMagnitudeAllocated) (event.Subscription, error) { - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorAddedToOperatorSet") + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "MagnitudeAllocated") if err != nil { return nil, err } @@ -1273,8 +1926,8 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAddedToOpe select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryStorageOperatorAddedToOperatorSet) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { + event := new(AVSDirectoryStorageMagnitudeAllocated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeAllocated", log); err != nil { return err } event.Raw = log @@ -1295,12 +1948,740 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAddedToOpe }), nil } -// ParseOperatorAddedToOperatorSet is a log parse operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. +// ParseMagnitudeAllocated is a log parse operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. // -// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*AVSDirectoryStorageOperatorAddedToOperatorSet, error) { - event := new(AVSDirectoryStorageOperatorAddedToOperatorSet) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { +// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseMagnitudeAllocated(log types.Log) (*AVSDirectoryStorageMagnitudeAllocated, error) { + event := new(AVSDirectoryStorageMagnitudeAllocated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeAllocated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryStorageMagnitudeDeallocationCompletedIterator is returned from FilterMagnitudeDeallocationCompleted and is used to iterate over the raw logs and unpacked data for MagnitudeDeallocationCompleted events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageMagnitudeDeallocationCompletedIterator struct { + Event *AVSDirectoryStorageMagnitudeDeallocationCompleted // 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 *AVSDirectoryStorageMagnitudeDeallocationCompletedIterator) 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(AVSDirectoryStorageMagnitudeDeallocationCompleted) + 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(AVSDirectoryStorageMagnitudeDeallocationCompleted) + 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 *AVSDirectoryStorageMagnitudeDeallocationCompletedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageMagnitudeDeallocationCompletedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageMagnitudeDeallocationCompleted represents a MagnitudeDeallocationCompleted event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageMagnitudeDeallocationCompleted struct { + Operator common.Address + Strategy common.Address + OperatorSet IAVSDirectoryOperatorSet + FreeMagnitudeAdded uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMagnitudeDeallocationCompleted is a free log retrieval operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. +// +// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterMagnitudeDeallocationCompleted(opts *bind.FilterOpts) (*AVSDirectoryStorageMagnitudeDeallocationCompletedIterator, error) { + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "MagnitudeDeallocationCompleted") + if err != nil { + return nil, err + } + return &AVSDirectoryStorageMagnitudeDeallocationCompletedIterator{contract: _AVSDirectoryStorage.contract, event: "MagnitudeDeallocationCompleted", logs: logs, sub: sub}, nil +} + +// WatchMagnitudeDeallocationCompleted is a free log subscription operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. +// +// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchMagnitudeDeallocationCompleted(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageMagnitudeDeallocationCompleted) (event.Subscription, error) { + + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "MagnitudeDeallocationCompleted") + 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(AVSDirectoryStorageMagnitudeDeallocationCompleted) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", 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 +} + +// ParseMagnitudeDeallocationCompleted is a log parse operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. +// +// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseMagnitudeDeallocationCompleted(log types.Log) (*AVSDirectoryStorageMagnitudeDeallocationCompleted, error) { + event := new(AVSDirectoryStorageMagnitudeDeallocationCompleted) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryStorageMagnitudeQueueDeallocatedIterator is returned from FilterMagnitudeQueueDeallocated and is used to iterate over the raw logs and unpacked data for MagnitudeQueueDeallocated events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageMagnitudeQueueDeallocatedIterator struct { + Event *AVSDirectoryStorageMagnitudeQueueDeallocated // 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 *AVSDirectoryStorageMagnitudeQueueDeallocatedIterator) 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(AVSDirectoryStorageMagnitudeQueueDeallocated) + 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(AVSDirectoryStorageMagnitudeQueueDeallocated) + 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 *AVSDirectoryStorageMagnitudeQueueDeallocatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageMagnitudeQueueDeallocatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageMagnitudeQueueDeallocated represents a MagnitudeQueueDeallocated event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageMagnitudeQueueDeallocated struct { + Operator common.Address + Strategy common.Address + OperatorSet IAVSDirectoryOperatorSet + MagnitudeToDeallocate uint64 + CompletableTimestamp uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMagnitudeQueueDeallocated is a free log retrieval operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. +// +// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterMagnitudeQueueDeallocated(opts *bind.FilterOpts) (*AVSDirectoryStorageMagnitudeQueueDeallocatedIterator, error) { + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "MagnitudeQueueDeallocated") + if err != nil { + return nil, err + } + return &AVSDirectoryStorageMagnitudeQueueDeallocatedIterator{contract: _AVSDirectoryStorage.contract, event: "MagnitudeQueueDeallocated", logs: logs, sub: sub}, nil +} + +// WatchMagnitudeQueueDeallocated is a free log subscription operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. +// +// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchMagnitudeQueueDeallocated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageMagnitudeQueueDeallocated) (event.Subscription, error) { + + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "MagnitudeQueueDeallocated") + 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(AVSDirectoryStorageMagnitudeQueueDeallocated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeQueueDeallocated", 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 +} + +// ParseMagnitudeQueueDeallocated is a log parse operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. +// +// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseMagnitudeQueueDeallocated(log types.Log) (*AVSDirectoryStorageMagnitudeQueueDeallocated, error) { + event := new(AVSDirectoryStorageMagnitudeQueueDeallocated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeQueueDeallocated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator struct { + Event *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated // 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 *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) 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(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + 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(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + 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 *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated struct { + Operator common.Address + Avs common.Address + Status uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + if err != nil { + return nil, err + } + return &AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, 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(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", 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 +} + +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, error) { + event := new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryStorageOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorAddedToOperatorSetIterator struct { + Event *AVSDirectoryStorageOperatorAddedToOperatorSet // 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 *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) 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(AVSDirectoryStorageOperatorAddedToOperatorSet) + 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(AVSDirectoryStorageOperatorAddedToOperatorSet) + 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 *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorAddedToOperatorSet struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + 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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryStorageOperatorAddedToOperatorSetIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + if err != nil { + return nil, err + } + return &AVSDirectoryStorageOperatorAddedToOperatorSetIterator{contract: _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AVSDirectoryStorage.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(AVSDirectoryStorageOperatorAddedToOperatorSet) + if err := _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*AVSDirectoryStorageOperatorAddedToOperatorSet, error) { + event := new(AVSDirectoryStorageOperatorAddedToOperatorSet) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator struct { + Event *AVSDirectoryStorageOperatorMigratedToOperatorSets // 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 *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) 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(AVSDirectoryStorageOperatorMigratedToOperatorSets) + 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(AVSDirectoryStorageOperatorMigratedToOperatorSets) + 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 *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorMigratedToOperatorSets struct { + Operator common.Address + Avs common.Address + OperatorSetIds []uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) + if err != nil { + return nil, err + } + return &AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil +} + +// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, 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(AVSDirectoryStorageOperatorMigratedToOperatorSets) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", 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 +} + +// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*AVSDirectoryStorageOperatorMigratedToOperatorSets, error) { + event := new(AVSDirectoryStorageOperatorMigratedToOperatorSets) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { return nil, err } event.Raw = log @@ -1376,30 +2757,39 @@ func (it *AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator) Close() err // AVSDirectoryStorageOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the AVSDirectoryStorage contract. type AVSDirectoryStorageOperatorRemovedFromOperatorSet struct { - Operator common.Address - Avs common.Address - OperatorSetId uint32 - Raw types.Log // Blockchain specific contextual infos + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. +// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. // -// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts) (*AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator, error) { +// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet") + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) if err != nil { return nil, err } return &AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil } -// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. +// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. // -// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorRemovedFromOperatorSet) (event.Subscription, error) { +// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet") + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) if err != nil { return nil, err } @@ -1431,9 +2821,9 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorRemovedFro }), nil } -// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. +// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. // -// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) +// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*AVSDirectoryStorageOperatorRemovedFromOperatorSet, error) { event := new(AVSDirectoryStorageOperatorRemovedFromOperatorSet) if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { @@ -1442,3 +2832,274 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorRemovedFro event.Raw = log return event, nil } + +// AVSDirectoryStorageOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorSetCreatedIterator struct { + Event *AVSDirectoryStorageOperatorSetCreated // 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 *AVSDirectoryStorageOperatorSetCreatedIterator) 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(AVSDirectoryStorageOperatorSetCreated) + 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(AVSDirectoryStorageOperatorSetCreated) + 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 *AVSDirectoryStorageOperatorSetCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageOperatorSetCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageOperatorSetCreated represents a OperatorSetCreated event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorSetCreated struct { + OperatorSet IAVSDirectoryOperatorSet + 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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*AVSDirectoryStorageOperatorSetCreatedIterator, error) { + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorSetCreated") + if err != nil { + return nil, err + } + return &AVSDirectoryStorageOperatorSetCreatedIterator{contract: _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorSetCreated) (event.Subscription, error) { + + logs, sub, err := _AVSDirectoryStorage.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(AVSDirectoryStorageOperatorSetCreated) + if err := _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorSetCreated(log types.Log) (*AVSDirectoryStorageOperatorSetCreated, error) { + event := new(AVSDirectoryStorageOperatorSetCreated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AVSDirectoryStorageOperatorSlashedIterator is returned from FilterOperatorSlashed and is used to iterate over the raw logs and unpacked data for OperatorSlashed events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorSlashedIterator struct { + Event *AVSDirectoryStorageOperatorSlashed // 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 *AVSDirectoryStorageOperatorSlashedIterator) 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(AVSDirectoryStorageOperatorSlashed) + 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(AVSDirectoryStorageOperatorSlashed) + 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 *AVSDirectoryStorageOperatorSlashedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AVSDirectoryStorageOperatorSlashedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AVSDirectoryStorageOperatorSlashed represents a OperatorSlashed event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorSlashed struct { + Operator common.Address + OperatorSetId uint32 + Strategy common.Address + BipsToSlash uint16 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSlashed is a free log retrieval operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. +// +// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorSlashed(opts *bind.FilterOpts) (*AVSDirectoryStorageOperatorSlashedIterator, error) { + + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorSlashed") + if err != nil { + return nil, err + } + return &AVSDirectoryStorageOperatorSlashedIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorSlashed", logs: logs, sub: sub}, nil +} + +// WatchOperatorSlashed is a free log subscription operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. +// +// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorSlashed(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorSlashed) (event.Subscription, error) { + + logs, sub, err := _AVSDirectoryStorage.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(AVSDirectoryStorageOperatorSlashed) + if err := _AVSDirectoryStorage.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 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. +// +// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorSlashed(log types.Log) (*AVSDirectoryStorageOperatorSlashed, error) { + event := new(AVSDirectoryStorageOperatorSlashed) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorSlashed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/Checkpoints/binding.go b/pkg/bindings/Checkpoints/binding.go new file mode 100644 index 000000000..41a27afa8 --- /dev/null +++ b/pkg/bindings/Checkpoints/binding.go @@ -0,0 +1,203 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package Checkpoints + +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 +) + +// CheckpointsMetaData contains all meta data concerning the Checkpoints contract. +var CheckpointsMetaData = &bind.MetaData{ + ABI: "[]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122033cd598fba8494d1a6958a8af518adce5917043f9d96f1543c5e5350d9ce39b364736f6c634300080c0033", +} + +// CheckpointsABI is the input ABI used to generate the binding from. +// Deprecated: Use CheckpointsMetaData.ABI instead. +var CheckpointsABI = CheckpointsMetaData.ABI + +// CheckpointsBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use CheckpointsMetaData.Bin instead. +var CheckpointsBin = CheckpointsMetaData.Bin + +// DeployCheckpoints deploys a new Ethereum contract, binding an instance of Checkpoints to it. +func DeployCheckpoints(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Checkpoints, error) { + parsed, err := CheckpointsMetaData.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(CheckpointsBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Checkpoints{CheckpointsCaller: CheckpointsCaller{contract: contract}, CheckpointsTransactor: CheckpointsTransactor{contract: contract}, CheckpointsFilterer: CheckpointsFilterer{contract: contract}}, nil +} + +// Checkpoints is an auto generated Go binding around an Ethereum contract. +type Checkpoints struct { + CheckpointsCaller // Read-only binding to the contract + CheckpointsTransactor // Write-only binding to the contract + CheckpointsFilterer // Log filterer for contract events +} + +// CheckpointsCaller is an auto generated read-only Go binding around an Ethereum contract. +type CheckpointsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CheckpointsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type CheckpointsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CheckpointsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type CheckpointsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CheckpointsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type CheckpointsSession struct { + Contract *Checkpoints // 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 +} + +// CheckpointsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type CheckpointsCallerSession struct { + Contract *CheckpointsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// CheckpointsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type CheckpointsTransactorSession struct { + Contract *CheckpointsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// CheckpointsRaw is an auto generated low-level Go binding around an Ethereum contract. +type CheckpointsRaw struct { + Contract *Checkpoints // Generic contract binding to access the raw methods on +} + +// CheckpointsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type CheckpointsCallerRaw struct { + Contract *CheckpointsCaller // Generic read-only contract binding to access the raw methods on +} + +// CheckpointsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type CheckpointsTransactorRaw struct { + Contract *CheckpointsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewCheckpoints creates a new instance of Checkpoints, bound to a specific deployed contract. +func NewCheckpoints(address common.Address, backend bind.ContractBackend) (*Checkpoints, error) { + contract, err := bindCheckpoints(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Checkpoints{CheckpointsCaller: CheckpointsCaller{contract: contract}, CheckpointsTransactor: CheckpointsTransactor{contract: contract}, CheckpointsFilterer: CheckpointsFilterer{contract: contract}}, nil +} + +// NewCheckpointsCaller creates a new read-only instance of Checkpoints, bound to a specific deployed contract. +func NewCheckpointsCaller(address common.Address, caller bind.ContractCaller) (*CheckpointsCaller, error) { + contract, err := bindCheckpoints(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CheckpointsCaller{contract: contract}, nil +} + +// NewCheckpointsTransactor creates a new write-only instance of Checkpoints, bound to a specific deployed contract. +func NewCheckpointsTransactor(address common.Address, transactor bind.ContractTransactor) (*CheckpointsTransactor, error) { + contract, err := bindCheckpoints(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CheckpointsTransactor{contract: contract}, nil +} + +// NewCheckpointsFilterer creates a new log filterer instance of Checkpoints, bound to a specific deployed contract. +func NewCheckpointsFilterer(address common.Address, filterer bind.ContractFilterer) (*CheckpointsFilterer, error) { + contract, err := bindCheckpoints(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CheckpointsFilterer{contract: contract}, nil +} + +// bindCheckpoints binds a generic wrapper to an already deployed contract. +func bindCheckpoints(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := CheckpointsMetaData.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 (_Checkpoints *CheckpointsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Checkpoints.Contract.CheckpointsCaller.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 (_Checkpoints *CheckpointsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Checkpoints.Contract.CheckpointsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Checkpoints *CheckpointsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Checkpoints.Contract.CheckpointsTransactor.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 (_Checkpoints *CheckpointsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Checkpoints.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 (_Checkpoints *CheckpointsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Checkpoints.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Checkpoints *CheckpointsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Checkpoints.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/bindings/DelegationManager/binding.go b/pkg/bindings/DelegationManager/binding.go index d244533e3..27c91c8d8 100644 --- a/pkg/bindings/DelegationManager/binding.go +++ b/pkg/bindings/DelegationManager/binding.go @@ -63,7 +63,7 @@ type ISignatureUtilsSignatureWithExpiry 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\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162005c3338038062005c33833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051615a0a6200022960003960006126870152600081816105b10152818161102e015281816113aa01528181611c0a015281816129e001528181613e93015261437f015260006107620152600081816104f901528181610ffc0152818161137801528181611c9e01528181612aad01528181612c3001528181613fb901526144250152615a0a6000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a610355366004614835565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a236600461489b565b6109ce565b6103ba6103b5366004614835565b610a90565b60405161036491906148f6565b6103da6103d5366004614993565b610df9565b005b6103da6103ea3660046149e6565b610f3e565b6103da6103fd366004614a0a565b610ff1565b6103da610410366004614a4b565b6110a8565b6103da610423366004614a64565b6111e7565b61035a6104363660046149e6565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614a0a565b6111fb565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614acf565b611229565b6103da6104bc366004614a0a565b61136d565b61035a6104cf3660046149e6565b609b6020526000908152604090205481565b6103da6104ef366004614b76565b61141d565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b6105413660046149e6565b6001600160a01b039081166000908152609960205260409020600101541690565b6105756105703660046149e6565b61155a565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da61157a565b61035a6105f3366004614e73565b611641565b610575610606366004614eaf565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614ee0565b611671565b6103da610644366004614a4b565b61170c565b61051b6106573660046149e6565b609a602052600090815260409020546001600160a01b031681565b6105756106803660046149e6565b61171d565b6103da61173e565b61035a61069b366004614f6f565b609860209081526000928352604080842090915290825290205481565b6103da6106c6366004615050565b611752565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd3660046150e0565b61197e565b604051610364919061516a565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da61073836600461517d565b611a58565b61035a61074b3660046149e6565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004614a4b565b609e6020526000908152604090205460ff1681565b6105756107b53660046151b2565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec3660046149e6565b60a16020526000908152604090205481565b61086e61080c3660046149e6565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b23660046151de565b611b2a565b61035a62034bc081565b6108d46108cf3660046149e6565b611be3565b60405161036492919061525f565b6103ba6108f03660046149e6565b611f9b565b6103da610903366004615284565b61245f565b6103da6109163660046152dc565b61257c565b6103da6109293660046149e6565b61260d565b61035a612683565b6103da610944366004614a4b565b6126c1565b609d54600090815b838110156109c657600060a16000878785818110610971576109716152f8565b905060200201602081019061098691906149e6565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b506109bf81615324565b9050610951565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a4c612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ac55760405162461bcd60e51b8152600401610abc9061533f565b60405180910390fd5b6000836001600160401b03811115610adf57610adf614c18565b604051908082528060200260200182016040528015610b08578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610dee57868682818110610b4357610b436152f8565b9050602002810190610b559190615376565b610b63906020810190615396565b9050878783818110610b7757610b776152f8565b9050602002810190610b899190615376565b610b939080615396565b905014610c085760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610abc565b33878783818110610c1b57610c1b6152f8565b9050602002810190610c2d9190615376565b610c3e9060608101906040016149e6565b6001600160a01b031614610cba5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610abc565b610dbf3383898985818110610cd157610cd16152f8565b9050602002810190610ce39190615376565b610cf49060608101906040016149e6565b8a8a86818110610d0657610d066152f8565b9050602002810190610d189190615376565b610d229080615396565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d6857610d686152f8565b9050602002810190610d7a9190615376565b610d88906020810190615396565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061281d92505050565b838281518110610dd157610dd16152f8565b602090810291909101015280610de681615324565b915050610b29565b509095945050505050565b610e023361155a565b15610e885760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610abc565b610e923384612ddd565b604080518082019091526060815260006020820152610eb43380836000612fd0565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610eed91906153df565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f30929190615431565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615460565b6001600160a01b0316336001600160a01b031614610fe55760405162461bcd60e51b8152600401610abc9061547d565b610fee81613266565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110505750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61106c5760405162461bcd60e51b8152600401610abc906154c7565b6110758361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a18185858561335d565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190615524565b6111305760405162461bcd60e51b8152600401610abc90615541565b606654818116146111a95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6111ef6133d8565b6110a184848484613432565b6001600160a01b0383166000908152609b602052604081205461122085828686611b2a565b95945050505050565b600054610100900460ff16158080156112495750600054600160ff909116105b806112635750303b158015611263575060005460ff166001145b6112c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610abc565b6000805460ff1916600117905580156112e9576000805461ff0019166101001790555b6112f38888613658565b6112fb613742565b609755611307896137d9565b6113108661382b565b61131c85858585613432565b8015611362576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113cc5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6113e85760405162461bcd60e51b8152600401610abc906154c7565b6113f18361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a181858585613925565b606654600290600490811614156114465760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156114995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c95560005b88811015611549576115398a8a838181106114be576114be6152f8565b90506020028101906114d09190615589565b8989848181106114e2576114e26152f8565b90506020028101906114f49190615396565b898986818110611506576115066152f8565b9050602002013588888781811061151f5761151f6152f8565b9050602002016020810190611534919061559f565b6139a0565b61154281615324565b90506114a1565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e69190615524565b6116025760405162461bcd60e51b8152600401610abc90615541565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116549190615630565b604051602081830303815290604052805190602001209050919050565b6066546002906004908116141561169a5760405162461bcd60e51b8152600401610abc9061533f565b600260c95414156116ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c9556116ff86868686866139a0565b5050600160c95550505050565b6117146133d8565b610fee8161382b565b6001600160a01b039081166000818152609a60205260409020549091161490565b6117466133d8565b61175060006137d9565b565b42836020015110156117d65760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610abc565b6117df8561155a565b156118685760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610abc565b6118718461171d565b6118fd5760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610abc565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119398783888860200151611b2a565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611969908890839061418a565b61197587878686612fd0565b50505050505050565b6060600082516001600160401b0381111561199b5761199b614c18565b6040519080825280602002602001820160405280156119c4578160200160208202803683370190505b50905060005b83518110156109c6576001600160a01b03851660009081526098602052604081208551909190869084908110611a0257611a026152f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a3d57611a3d6152f8565b6020908102919091010152611a5181615324565b90506119ca565b611a613361171d565b611ae35760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610abc565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611b1e929190615431565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611ba0612683565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c779190615643565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015611ce7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d0f91908101906156b7565b9150915060008313611d2657909590945092505050565b606080835160001415611de0576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611d9b57611d9b6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611dcf57611dcf6152f8565b602002602001018181525050611f8e565b8351611ded906001615771565b6001600160401b03811115611e0457611e04614c18565b604051908082528060200260200182016040528015611e2d578160200160208202803683370190505b50915081516001600160401b03811115611e4957611e49614c18565b604051908082528060200260200182016040528015611e72578160200160208202803683370190505b50905060005b8451811015611f0c57848181518110611e9357611e936152f8565b6020026020010151838281518110611ead57611ead6152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611edf57611edf6152f8565b6020026020010151828281518110611ef957611ef96152f8565b6020908102919091010152600101611e78565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611f319190615789565b81518110611f4157611f416152f8565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611f719190615789565b81518110611f8157611f816152f8565b6020026020010181815250505b9097909650945050505050565b60665460609060019060029081161415611fc75760405162461bcd60e51b8152600401610abc9061533f565b611fd08361155a565b6120505760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610abc565b6120598361171d565b156120cc5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610abc565b6001600160a01b0383166121485760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610abc565b6001600160a01b038084166000818152609a60205260409020549091169033148061217b5750336001600160a01b038216145b806121a257506001600160a01b038181166000908152609960205260409020600101541633145b6122145760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610abc565b60008061222086611be3565b9092509050336001600160a01b0387161461227657826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516122f8576040805160008152602081019091529450612456565b81516001600160401b0381111561231157612311614c18565b60405190808252806020026020018201604052801561233a578160200160208202803683370190505b50945060005b8251811015612454576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106123a0576123a06152f8565b6020026020010151826000815181106123bb576123bb6152f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508383815181106123ed576123ed6152f8565b602002602001015181600081518110612408576124086152f8565b60200260200101818152505061242189878b858561281d565b888481518110612433576124336152f8565b6020026020010181815250505050808061244c90615324565b915050612340565b505b50505050919050565b6124683361155a565b156124e65760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610abc565b6124ef8361171d565b6125705760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610abc565b6110a333848484612fd0565b6125853361171d565b6126035760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610abc565b610fee3382612ddd565b6126156133d8565b6001600160a01b03811661267a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abc565b610fee816137d9565b60007f00000000000000000000000000000000000000000000000000000000000000004614156126b4575060975490565b6126bc613742565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127389190615460565b6001600160a01b0316336001600160a01b0316146127685760405162461bcd60e51b8152600401610abc9061547d565b6066541981196066541916146127e65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016111dc565b60006001600160a01b0386166128b45760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610abc565b825161293e5760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610abc565b60005b8351811015612ceb576001600160a01b03861615612997576129978688868481518110612970576129706152f8565b602002602001015186858151811061298a5761298a6152f8565b602002602001015161335d565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129c7576129c76152f8565b60200260200101516001600160a01b03161415612a90577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb8988858481518110612a2057612a206152f8565b60200260200101516040518363ffffffff1660e01b8152600401612a599291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a7357600080fd5b505af1158015612a87573d6000803e3d6000fd5b50505050612ce3565b846001600160a01b0316876001600160a01b03161480612b6257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d858381518110612aec57612aec6152f8565b60200260200101516040518263ffffffff1660e01b8152600401612b1f91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b609190615524565b155b612c2e5760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610abc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612c7057612c706152f8565b6020026020010151868581518110612c8a57612c8a6152f8565b60200260200101516040518463ffffffff1660e01b8152600401612cb0939291906157a0565b600060405180830381600087803b158015612cca57600080fd5b505af1158015612cde573d6000803e3d6000fd5b505050505b600101612941565b506001600160a01b0386166000908152609f60205260408120805491829190612d1383615324565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d7b82611641565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612dc990839085906157c4565b60405180910390a198975050505050505050565b6213c680612df160608301604084016157dd565b63ffffffff161115612ea65760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610abc565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612ee290606084019084016157dd565b63ffffffff161015612f785760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610abc565b6001600160a01b03821660009081526099602052604090208190612f9c828261581a565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611b1e9084906153df565b60665460009060019081161415612ff95760405162461bcd60e51b8152600401610abc9061533f565b6001600160a01b0380851660009081526099602052604090206001015416801580159061302f5750336001600160a01b03821614155b80156130445750336001600160a01b03861614155b156131b15742846020015110156130c35760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff161561315d5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff1916600117905585015161319e9088908890859088906109ce565b90506131af8282876000015161418a565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061321088611be3565b9150915060005b82518110156113625761325e888a858481518110613237576132376152f8565b6020026020010151858581518110613251576132516152f8565b6020026020010151613925565b600101613217565b6001600160a01b0381166132f45760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610abc565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290613394908490615789565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f30939291906157a0565b6033546001600160a01b031633146117505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abc565b8281146134ba5760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610abc565b8260005b818110156136505760008686838181106134da576134da6152f8565b90506020020160208101906134ef91906149e6565b6001600160a01b038116600090815260a1602052604081205491925086868581811061351d5761351d6152f8565b90506020020135905062034bc08111156135e15760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610abc565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a15050508061364990615324565b90506134be565b505050505050565b6065546001600160a01b031615801561367957506001600160a01b03821615155b6136fb5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261373e82613266565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc08111156138e45760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610abc565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061395c908490615771565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f30939291906157a0565b60006139ae6105f38761587d565b6000818152609e602052604090205490915060ff16613a2f5760405162461bcd60e51b815260206004820152604360248201526000805160206159b583398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610abc565b609d544390613a4460a0890160808a016157dd565b63ffffffff16613a549190615771565b1115613adc5760405162461bcd60e51b815260206004820152605f60248201526000805160206159b583398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610abc565b613aec60608701604088016149e6565b6001600160a01b0316336001600160a01b031614613b795760405162461bcd60e51b815260206004820152605060248201526000805160206159b583398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610abc565b8115613bfb57613b8c60a0870187615396565b85149050613bfb5760405162461bcd60e51b815260206004820152604260248201526000805160206159b583398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610abc565b6000818152609e60205260409020805460ff191690558115613d605760005b613c2760a0880188615396565b9050811015613d5a574360a16000613c4260a08b018b615396565b85818110613c5257613c526152f8565b9050602002016020810190613c6791906149e6565b6001600160a01b03168152602081019190915260400160002054613c9160a08a0160808b016157dd565b63ffffffff16613ca19190615771565b1115613cbf5760405162461bcd60e51b8152600401610abc9061588f565b613d52613ccf60208901896149e6565b33613cdd60a08b018b615396565b85818110613ced57613ced6152f8565b9050602002016020810190613d0291906149e6565b613d0f60c08c018c615396565b86818110613d1f57613d1f6152f8565b905060200201358a8a87818110613d3857613d386152f8565b9050602002016020810190613d4d91906149e6565b614344565b600101613c1a565b5061414f565b336000908152609a60205260408120546001600160a01b0316905b613d8860a0890189615396565b905081101561414c574360a16000613da360a08c018c615396565b85818110613db357613db36152f8565b9050602002016020810190613dc891906149e6565b6001600160a01b03168152602081019190915260400160002054613df260a08b0160808c016157dd565b63ffffffff16613e029190615771565b1115613e205760405162461bcd60e51b8152600401610abc9061588f565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613e4260a08a018a615396565b83818110613e5257613e526152f8565b9050602002016020810190613e6791906149e6565b6001600160a01b03161415613fb7576000613e8560208a018a6149e6565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c83613ec660c08e018e615396565b87818110613ed657613ed66152f8565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4e9190615643565b6001600160a01b038084166000908152609a6020526040902054919250168015613faf57613faf8184613f8460a08f018f615396565b88818110613f9457613f946152f8565b9050602002016020810190613fa991906149e6565b85613925565b505050614144565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea133898985818110613ff957613ff96152f8565b905060200201602081019061400e91906149e6565b61401b60a08d018d615396565b8681811061402b5761402b6152f8565b905060200201602081019061404091906149e6565b61404d60c08e018e615396565b8781811061405d5761405d6152f8565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156140bd57600080fd5b505af11580156140d1573d6000803e3d6000fd5b505050506001600160a01b038216156141445761414482336140f660a08c018c615396565b85818110614106576141066152f8565b905060200201602081019061411b91906149e6565b61412860c08d018d615396565b86818110614138576141386152f8565b90506020020135613925565b600101613d7b565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b156142a457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906141ca9086908690600401615917565b602060405180830381865afa1580156141e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420b9190615974565b6001600160e01b031916146110a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610abc565b826001600160a01b03166142b88383614484565b6001600160a01b0316146110a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610abc565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156143ef5760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b1300906143b8908890889087906004016157a0565b600060405180830381600087803b1580156143d257600080fd5b505af11580156143e6573d6000803e3d6000fd5b5050505061447d565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b15801561446957600080fd5b505af1158015611362573d6000803e3d6000fd5b5050505050565b600080600061449385856144a0565b915091506109c681614510565b6000808251604114156144d75760208301516040840151606085015160001a6144cb878285856146cb565b94509450505050614509565b82516040141561450157602083015160408401516144f68683836147b8565b935093505050614509565b506000905060025b9250929050565b60008160048111156145245761452461599e565b141561452d5750565b60018160048111156145415761454161599e565b141561458f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610abc565b60028160048111156145a3576145a361599e565b14156145f15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610abc565b60038160048111156146055761460561599e565b141561465e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610abc565b60048160048111156146725761467261599e565b1415610fee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610abc565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561470257506000905060036147af565b8460ff16601b1415801561471a57508460ff16601c14155b1561472b57506000905060046147af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561477f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147a8576000600192509250506147af565b9150600090505b94509492505050565b6000806001600160ff1b038316816147d560ff86901c601b615771565b90506147e3878288856146cb565b935093505050935093915050565b60008083601f84011261480357600080fd5b5081356001600160401b0381111561481a57600080fd5b6020830191508360208260051b850101111561450957600080fd5b6000806020838503121561484857600080fd5b82356001600160401b0381111561485e57600080fd5b61486a858286016147f1565b90969095509350505050565b6001600160a01b0381168114610fee57600080fd5b803561489681614876565b919050565b600080600080600060a086880312156148b357600080fd5b85356148be81614876565b945060208601356148ce81614876565b935060408601356148de81614876565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b8181101561492e57835183529284019291840191600101614912565b50909695505050505050565b60006060828403121561494c57600080fd5b50919050565b60008083601f84011261496457600080fd5b5081356001600160401b0381111561497b57600080fd5b60208301915083602082850101111561450957600080fd5b6000806000608084860312156149a857600080fd5b6149b2858561493a565b925060608401356001600160401b038111156149cd57600080fd5b6149d986828701614952565b9497909650939450505050565b6000602082840312156149f857600080fd5b8135614a0381614876565b9392505050565b600080600060608486031215614a1f57600080fd5b8335614a2a81614876565b92506020840135614a3a81614876565b929592945050506040919091013590565b600060208284031215614a5d57600080fd5b5035919050565b60008060008060408587031215614a7a57600080fd5b84356001600160401b0380821115614a9157600080fd5b614a9d888389016147f1565b90965094506020870135915080821115614ab657600080fd5b50614ac3878288016147f1565b95989497509550505050565b60008060008060008060008060c0898b031215614aeb57600080fd5b8835614af681614876565b97506020890135614b0681614876565b9650604089013595506060890135945060808901356001600160401b0380821115614b3057600080fd5b614b3c8c838d016147f1565b909650945060a08b0135915080821115614b5557600080fd5b50614b628b828c016147f1565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614b9257600080fd5b88356001600160401b0380821115614ba957600080fd5b614bb58c838d016147f1565b909a50985060208b0135915080821115614bce57600080fd5b614bda8c838d016147f1565b909850965060408b0135915080821115614bf357600080fd5b614bff8c838d016147f1565b909650945060608b0135915080821115614b5557600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614c5057614c50614c18565b60405290565b604080519081016001600160401b0381118282101715614c5057614c50614c18565b604051601f8201601f191681016001600160401b0381118282101715614ca057614ca0614c18565b604052919050565b63ffffffff81168114610fee57600080fd5b803561489681614ca8565b60006001600160401b03821115614cde57614cde614c18565b5060051b60200190565b600082601f830112614cf957600080fd5b81356020614d0e614d0983614cc5565b614c78565b82815260059290921b84018101918181019086841115614d2d57600080fd5b8286015b84811015614d51578035614d4481614876565b8352918301918301614d31565b509695505050505050565b600082601f830112614d6d57600080fd5b81356020614d7d614d0983614cc5565b82815260059290921b84018101918181019086841115614d9c57600080fd5b8286015b84811015614d515780358352918301918301614da0565b600060e08284031215614dc957600080fd5b614dd1614c2e565b9050614ddc8261488b565b8152614dea6020830161488b565b6020820152614dfb6040830161488b565b604082015260608201356060820152614e1660808301614cba565b608082015260a08201356001600160401b0380821115614e3557600080fd5b614e4185838601614ce8565b60a084015260c0840135915080821115614e5a57600080fd5b50614e6784828501614d5c565b60c08301525092915050565b600060208284031215614e8557600080fd5b81356001600160401b03811115614e9b57600080fd5b614ea784828501614db7565b949350505050565b600060208284031215614ec157600080fd5b813560ff81168114614a0357600080fd5b8015158114610fee57600080fd5b600080600080600060808688031215614ef857600080fd5b85356001600160401b0380821115614f0f57600080fd5b9087019060e0828a031215614f2357600080fd5b90955060208701359080821115614f3957600080fd5b50614f46888289016147f1565b909550935050604086013591506060860135614f6181614ed2565b809150509295509295909350565b60008060408385031215614f8257600080fd5b8235614f8d81614876565b91506020830135614f9d81614876565b809150509250929050565b600060408284031215614fba57600080fd5b614fc2614c56565b905081356001600160401b0380821115614fdb57600080fd5b818401915084601f830112614fef57600080fd5b813560208282111561500357615003614c18565b615015601f8301601f19168201614c78565b9250818352868183860101111561502b57600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561506857600080fd5b853561507381614876565b9450602086013561508381614876565b935060408601356001600160401b038082111561509f57600080fd5b6150ab89838a01614fa8565b945060608801359150808211156150c157600080fd5b506150ce88828901614fa8565b95989497509295608001359392505050565b600080604083850312156150f357600080fd5b82356150fe81614876565b915060208301356001600160401b0381111561511957600080fd5b61512585828601614ce8565b9150509250929050565b600081518084526020808501945080840160005b8381101561515f57815187529582019590820190600101615143565b509495945050505050565b602081526000614a03602083018461512f565b6000806020838503121561519057600080fd5b82356001600160401b038111156151a657600080fd5b61486a85828601614952565b600080604083850312156151c557600080fd5b82356151d081614876565b946020939093013593505050565b600080600080608085870312156151f457600080fd5b84356151ff81614876565b935060208501359250604085013561521681614876565b9396929550929360600135925050565b600081518084526020808501945080840160005b8381101561515f5781516001600160a01b03168752958201959082019060010161523a565b6040815260006152726040830185615226565b8281036020840152611220818561512f565b60008060006060848603121561529957600080fd5b83356152a481614876565b925060208401356001600160401b038111156152bf57600080fd5b6152cb86828701614fa8565b925050604084013590509250925092565b6000606082840312156152ee57600080fd5b614a03838361493a565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156153385761533861530e565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e1983360301811261538c57600080fd5b9190910192915050565b6000808335601e198436030181126153ad57600080fd5b8301803591506001600160401b038211156153c757600080fd5b6020019150600581901b360382131561450957600080fd5b6060810182356153ee81614876565b6001600160a01b03908116835260208401359061540a82614876565b166020830152604083013561541e81614ca8565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561547257600080fd5b8151614a0381614876565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561553657600080fd5b8151614a0381614ed2565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de1983360301811261538c57600080fd5b6000602082840312156155b157600080fd5b8135614a0381614ed2565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261561760e0850182615226565b905060c083015184820360c0860152611220828261512f565b602081526000614a0360208301846155bc565b60006020828403121561565557600080fd5b5051919050565b600082601f83011261566d57600080fd5b8151602061567d614d0983614cc5565b82815260059290921b8401810191818101908684111561569c57600080fd5b8286015b84811015614d5157805183529183019183016156a0565b600080604083850312156156ca57600080fd5b82516001600160401b03808211156156e157600080fd5b818501915085601f8301126156f557600080fd5b81516020615705614d0983614cc5565b82815260059290921b8401810191818101908984111561572457600080fd5b948201945b8386101561574b57855161573c81614876565b82529482019490820190615729565b9188015191965090935050508082111561576457600080fd5b506151258582860161565c565b600082198211156157845761578461530e565b500190565b60008282101561579b5761579b61530e565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000614ea760408301846155bc565b6000602082840312156157ef57600080fd5b8135614a0381614ca8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561582581614876565b61582f81836157fa565b5060018101602083013561584281614876565b61584c81836157fa565b50604083013561585b81614ca8565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006158893683614db7565b92915050565b6020808252606e908201526000805160206159b583398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b8181101561594b5785810183015185820160600152820161592f565b8181111561595d576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561598657600080fd5b81516001600160e01b031981168114614a0357600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a26469706673582212204f8ba68b8a28e3effef34dcfd60594e2fbd9e919cbab8917dc02c14df97507da64736f6c634300080c0033", + Bin: "0x6101006040523480156200001257600080fd5b5060405162005c4638038062005c46833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051615a1d6200022960003960006126a00152600081816105b10152818161102e015281816113aa01528181611c23015281816129f901528181613eac0152614398015260006107620152600081816104f901528181610ffc0152818161137801528181611cb701528181612ac601528181612c4901528181613fd2015261443e0152615a1d6000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a61035536600461484e565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a23660046148b4565b6109ce565b6103ba6103b536600461484e565b610a90565b604051610364919061490f565b6103da6103d53660046149ac565b610df9565b005b6103da6103ea3660046149ff565b610f3e565b6103da6103fd366004614a23565b610ff1565b6103da610410366004614a64565b6110a8565b6103da610423366004614a7d565b6111e7565b61035a6104363660046149ff565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614a23565b6111fb565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614ae8565b611229565b6103da6104bc366004614a23565b61136d565b61035a6104cf3660046149ff565b609b6020526000908152604090205481565b6103da6104ef366004614b8f565b61141d565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b6105413660046149ff565b6001600160a01b039081166000908152609960205260409020600101541690565b6105756105703660046149ff565b61155a565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da61157a565b61035a6105f3366004614e8c565b611641565b610575610606366004614ec8565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614ef9565b611671565b6103da610644366004614a64565b61170c565b61051b6106573660046149ff565b609a602052600090815260409020546001600160a01b031681565b6105756106803660046149ff565b61171d565b6103da611757565b61035a61069b366004614f88565b609860209081526000928352604080842090915290825290205481565b6103da6106c6366004615069565b61176b565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd3660046150f9565b611997565b6040516103649190615183565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da610738366004615196565b611a71565b61035a61074b3660046149ff565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004614a64565b609e6020526000908152604090205460ff1681565b6105756107b53660046151cb565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec3660046149ff565b60a16020526000908152604090205481565b61086e61080c3660046149ff565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b23660046151f7565b611b43565b61035a62034bc081565b6108d46108cf3660046149ff565b611bfc565b604051610364929190615278565b6103ba6108f03660046149ff565b611fb4565b6103da61090336600461529d565b612478565b6103da6109163660046152f5565b612595565b6103da6109293660046149ff565b612626565b61035a61269c565b6103da610944366004614a64565b6126da565b609d54600090815b838110156109c657600060a1600087878581811061097157610971615311565b905060200201602081019061098691906149ff565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b506109bf8161533d565b9050610951565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a4c61269c565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ac55760405162461bcd60e51b8152600401610abc90615358565b60405180910390fd5b6000836001600160401b03811115610adf57610adf614c31565b604051908082528060200260200182016040528015610b08578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610dee57868682818110610b4357610b43615311565b9050602002810190610b55919061538f565b610b639060208101906153af565b9050878783818110610b7757610b77615311565b9050602002810190610b89919061538f565b610b9390806153af565b905014610c085760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610abc565b33878783818110610c1b57610c1b615311565b9050602002810190610c2d919061538f565b610c3e9060608101906040016149ff565b6001600160a01b031614610cba5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610abc565b610dbf3383898985818110610cd157610cd1615311565b9050602002810190610ce3919061538f565b610cf49060608101906040016149ff565b8a8a86818110610d0657610d06615311565b9050602002810190610d18919061538f565b610d2290806153af565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d6857610d68615311565b9050602002810190610d7a919061538f565b610d889060208101906153af565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061283692505050565b838281518110610dd157610dd1615311565b602090810291909101015280610de68161533d565b915050610b29565b509095945050505050565b610e023361155a565b15610e885760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610abc565b610e923384612df6565b604080518082019091526060815260006020820152610eb43380836000612fe9565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610eed91906153f8565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f3092919061544a565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615479565b6001600160a01b0316336001600160a01b031614610fe55760405162461bcd60e51b8152600401610abc90615496565b610fee8161327f565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110505750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61106c5760405162461bcd60e51b8152600401610abc906154e0565b6110758361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a181858585613376565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611114919061553d565b6111305760405162461bcd60e51b8152600401610abc9061555a565b606654818116146111a95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6111ef6133f1565b6110a18484848461344b565b6001600160a01b0383166000908152609b602052604081205461122085828686611b43565b95945050505050565b600054610100900460ff16158080156112495750600054600160ff909116105b806112635750303b158015611263575060005460ff166001145b6112c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610abc565b6000805460ff1916600117905580156112e9576000805461ff0019166101001790555b6112f38888613671565b6112fb61375b565b609755611307896137f2565b61131086613844565b61131c8585858561344b565b8015611362576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113cc5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6113e85760405162461bcd60e51b8152600401610abc906154e0565b6113f18361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a18185858561393e565b606654600290600490811614156114465760405162461bcd60e51b8152600401610abc90615358565b600260c95414156114995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c95560005b88811015611549576115398a8a838181106114be576114be615311565b90506020028101906114d091906155a2565b8989848181106114e2576114e2615311565b90506020028101906114f491906153af565b89898681811061150657611506615311565b9050602002013588888781811061151f5761151f615311565b905060200201602081019061153491906155b8565b6139b9565b6115428161533d565b90506114a1565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e6919061553d565b6116025760405162461bcd60e51b8152600401610abc9061555a565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116549190615649565b604051602081830303815290604052805190602001209050919050565b6066546002906004908116141561169a5760405162461bcd60e51b8152600401610abc90615358565b600260c95414156116ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c9556116ff86868686866139b9565b5050600160c95550505050565b6117146133f1565b610fee81613844565b60006001600160a01b0382161580159061175157506001600160a01b038083166000818152609a6020526040902054909116145b92915050565b61175f6133f1565b61176960006137f2565b565b42836020015110156117ef5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610abc565b6117f88561155a565b156118815760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610abc565b61188a8461171d565b6119165760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610abc565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119528783888860200151611b43565b6001600160a01b0388166000908152609b60205260409020600184019055855190915061198290889083906141a3565b61198e87878686612fe9565b50505050505050565b6060600082516001600160401b038111156119b4576119b4614c31565b6040519080825280602002602001820160405280156119dd578160200160208202803683370190505b50905060005b83518110156109c6576001600160a01b03851660009081526098602052604081208551909190869084908110611a1b57611a1b615311565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a5657611a56615311565b6020908102919091010152611a6a8161533d565b90506119e3565b611a7a3361171d565b611afc5760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610abc565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611b3792919061544a565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611bb961269c565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c90919061565c565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015611d00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d2891908101906156d0565b9150915060008313611d3f57909590945092505050565b606080835160001415611df9576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611db457611db4615311565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611de857611de8615311565b602002602001018181525050611fa7565b8351611e0690600161578a565b6001600160401b03811115611e1d57611e1d614c31565b604051908082528060200260200182016040528015611e46578160200160208202803683370190505b50915081516001600160401b03811115611e6257611e62614c31565b604051908082528060200260200182016040528015611e8b578160200160208202803683370190505b50905060005b8451811015611f2557848181518110611eac57611eac615311565b6020026020010151838281518110611ec657611ec6615311565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611ef857611ef8615311565b6020026020010151828281518110611f1257611f12615311565b6020908102919091010152600101611e91565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611f4a91906157a2565b81518110611f5a57611f5a615311565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611f8a91906157a2565b81518110611f9a57611f9a615311565b6020026020010181815250505b9097909650945050505050565b60665460609060019060029081161415611fe05760405162461bcd60e51b8152600401610abc90615358565b611fe98361155a565b6120695760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610abc565b6120728361171d565b156120e55760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610abc565b6001600160a01b0383166121615760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610abc565b6001600160a01b038084166000818152609a6020526040902054909116903314806121945750336001600160a01b038216145b806121bb57506001600160a01b038181166000908152609960205260409020600101541633145b61222d5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610abc565b60008061223986611bfc565b9092509050336001600160a01b0387161461228f57826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b0319169055815161231157604080516000815260208101909152945061246f565b81516001600160401b0381111561232a5761232a614c31565b604051908082528060200260200182016040528015612353578160200160208202803683370190505b50945060005b825181101561246d576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106123b9576123b9615311565b6020026020010151826000815181106123d4576123d4615311565b60200260200101906001600160a01b031690816001600160a01b03168152505083838151811061240657612406615311565b60200260200101518160008151811061242157612421615311565b60200260200101818152505061243a89878b8585612836565b88848151811061244c5761244c615311565b602002602001018181525050505080806124659061533d565b915050612359565b505b50505050919050565b6124813361155a565b156124ff5760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610abc565b6125088361171d565b6125895760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610abc565b6110a333848484612fe9565b61259e3361171d565b61261c5760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610abc565b610fee3382612df6565b61262e6133f1565b6001600160a01b0381166126935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abc565b610fee816137f2565b60007f00000000000000000000000000000000000000000000000000000000000000004614156126cd575060975490565b6126d561375b565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561272d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127519190615479565b6001600160a01b0316336001600160a01b0316146127815760405162461bcd60e51b8152600401610abc90615496565b6066541981196066541916146127ff5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016111dc565b60006001600160a01b0386166128cd5760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610abc565b82516129575760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610abc565b60005b8351811015612d04576001600160a01b038616156129b0576129b0868886848151811061298957612989615311565b60200260200101518685815181106129a3576129a3615311565b6020026020010151613376565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129e0576129e0615311565b60200260200101516001600160a01b03161415612aa9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb8988858481518110612a3957612a39615311565b60200260200101516040518363ffffffff1660e01b8152600401612a729291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b50505050612cfc565b846001600160a01b0316876001600160a01b03161480612b7b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d858381518110612b0557612b05615311565b60200260200101516040518263ffffffff1660e01b8152600401612b3891906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b79919061553d565b155b612c475760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610abc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612c8957612c89615311565b6020026020010151868581518110612ca357612ca3615311565b60200260200101516040518463ffffffff1660e01b8152600401612cc9939291906157b9565b600060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050505b60010161295a565b506001600160a01b0386166000908152609f60205260408120805491829190612d2c8361533d565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d9482611641565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612de290839085906157dd565b60405180910390a198975050505050505050565b6213c680612e0a60608301604084016157f6565b63ffffffff161115612ebf5760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610abc565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612efb90606084019084016157f6565b63ffffffff161015612f915760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610abc565b6001600160a01b03821660009081526099602052604090208190612fb58282615833565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611b379084906153f8565b606654600090600190811614156130125760405162461bcd60e51b8152600401610abc90615358565b6001600160a01b038085166000908152609960205260409020600101541680158015906130485750336001600160a01b03821614155b801561305d5750336001600160a01b03861614155b156131ca5742846020015110156130dc5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156131765760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516131b79088908890859088906109ce565b90506131c8828287600001516141a3565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061322988611bfc565b9150915060005b825181101561136257613277888a85848151811061325057613250615311565b602002602001015185858151811061326a5761326a615311565b602002602001015161393e565b600101613230565b6001600160a01b03811661330d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610abc565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038085166000908152609860209081526040808320938616835292905290812080548392906133ad9084906157a2565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f30939291906157b9565b6033546001600160a01b031633146117695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abc565b8281146134d35760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610abc565b8260005b818110156136695760008686838181106134f3576134f3615311565b905060200201602081019061350891906149ff565b6001600160a01b038116600090815260a1602052604081205491925086868581811061353657613536615311565b90506020020135905062034bc08111156135fa5760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610abc565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806136629061533d565b90506134d7565b505050505050565b6065546001600160a01b031615801561369257506001600160a01b03821615155b6137145760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26137578261327f565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc08111156138fd5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610abc565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061397590849061578a565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f30939291906157b9565b60006139c76105f387615896565b6000818152609e602052604090205490915060ff16613a485760405162461bcd60e51b815260206004820152604360248201526000805160206159c883398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610abc565b609d544390613a5d60a0890160808a016157f6565b63ffffffff16613a6d919061578a565b1115613af55760405162461bcd60e51b815260206004820152605f60248201526000805160206159c883398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610abc565b613b0560608701604088016149ff565b6001600160a01b0316336001600160a01b031614613b925760405162461bcd60e51b815260206004820152605060248201526000805160206159c883398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610abc565b8115613c1457613ba560a08701876153af565b85149050613c145760405162461bcd60e51b815260206004820152604260248201526000805160206159c883398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610abc565b6000818152609e60205260409020805460ff191690558115613d795760005b613c4060a08801886153af565b9050811015613d73574360a16000613c5b60a08b018b6153af565b85818110613c6b57613c6b615311565b9050602002016020810190613c8091906149ff565b6001600160a01b03168152602081019190915260400160002054613caa60a08a0160808b016157f6565b63ffffffff16613cba919061578a565b1115613cd85760405162461bcd60e51b8152600401610abc906158a2565b613d6b613ce860208901896149ff565b33613cf660a08b018b6153af565b85818110613d0657613d06615311565b9050602002016020810190613d1b91906149ff565b613d2860c08c018c6153af565b86818110613d3857613d38615311565b905060200201358a8a87818110613d5157613d51615311565b9050602002016020810190613d6691906149ff565b61435d565b600101613c33565b50614168565b336000908152609a60205260408120546001600160a01b0316905b613da160a08901896153af565b9050811015614165574360a16000613dbc60a08c018c6153af565b85818110613dcc57613dcc615311565b9050602002016020810190613de191906149ff565b6001600160a01b03168152602081019190915260400160002054613e0b60a08b0160808c016157f6565b63ffffffff16613e1b919061578a565b1115613e395760405162461bcd60e51b8152600401610abc906158a2565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613e5b60a08a018a6153af565b83818110613e6b57613e6b615311565b9050602002016020810190613e8091906149ff565b6001600160a01b03161415613fd0576000613e9e60208a018a6149ff565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c83613edf60c08e018e6153af565b87818110613eef57613eef615311565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f67919061565c565b6001600160a01b038084166000908152609a6020526040902054919250168015613fc857613fc88184613f9d60a08f018f6153af565b88818110613fad57613fad615311565b9050602002016020810190613fc291906149ff565b8561393e565b50505061415d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061401257614012615311565b905060200201602081019061402791906149ff565b61403460a08d018d6153af565b8681811061404457614044615311565b905060200201602081019061405991906149ff565b61406660c08e018e6153af565b8781811061407657614076615311565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156140d657600080fd5b505af11580156140ea573d6000803e3d6000fd5b505050506001600160a01b0382161561415d5761415d823361410f60a08c018c6153af565b8581811061411f5761411f615311565b905060200201602081019061413491906149ff565b61414160c08d018d6153af565b8681811061415157614151615311565b9050602002013561393e565b600101613d94565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b156142bd57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906141e3908690869060040161592a565b602060405180830381865afa158015614200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142249190615987565b6001600160e01b031916146110a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610abc565b826001600160a01b03166142d1838361449d565b6001600160a01b0316146110a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610abc565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156144085760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b1300906143d1908890889087906004016157b9565b600060405180830381600087803b1580156143eb57600080fd5b505af11580156143ff573d6000803e3d6000fd5b50505050614496565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b15801561448257600080fd5b505af1158015611362573d6000803e3d6000fd5b5050505050565b60008060006144ac85856144b9565b915091506109c681614529565b6000808251604114156144f05760208301516040840151606085015160001a6144e4878285856146e4565b94509450505050614522565b82516040141561451a576020830151604084015161450f8683836147d1565b935093505050614522565b506000905060025b9250929050565b600081600481111561453d5761453d6159b1565b14156145465750565b600181600481111561455a5761455a6159b1565b14156145a85760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610abc565b60028160048111156145bc576145bc6159b1565b141561460a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610abc565b600381600481111561461e5761461e6159b1565b14156146775760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610abc565b600481600481111561468b5761468b6159b1565b1415610fee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610abc565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561471b57506000905060036147c8565b8460ff16601b1415801561473357508460ff16601c14155b1561474457506000905060046147c8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614798573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147c1576000600192509250506147c8565b9150600090505b94509492505050565b6000806001600160ff1b038316816147ee60ff86901c601b61578a565b90506147fc878288856146e4565b935093505050935093915050565b60008083601f84011261481c57600080fd5b5081356001600160401b0381111561483357600080fd5b6020830191508360208260051b850101111561452257600080fd5b6000806020838503121561486157600080fd5b82356001600160401b0381111561487757600080fd5b6148838582860161480a565b90969095509350505050565b6001600160a01b0381168114610fee57600080fd5b80356148af8161488f565b919050565b600080600080600060a086880312156148cc57600080fd5b85356148d78161488f565b945060208601356148e78161488f565b935060408601356148f78161488f565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b818110156149475783518352928401929184019160010161492b565b50909695505050505050565b60006060828403121561496557600080fd5b50919050565b60008083601f84011261497d57600080fd5b5081356001600160401b0381111561499457600080fd5b60208301915083602082850101111561452257600080fd5b6000806000608084860312156149c157600080fd5b6149cb8585614953565b925060608401356001600160401b038111156149e657600080fd5b6149f28682870161496b565b9497909650939450505050565b600060208284031215614a1157600080fd5b8135614a1c8161488f565b9392505050565b600080600060608486031215614a3857600080fd5b8335614a438161488f565b92506020840135614a538161488f565b929592945050506040919091013590565b600060208284031215614a7657600080fd5b5035919050565b60008060008060408587031215614a9357600080fd5b84356001600160401b0380821115614aaa57600080fd5b614ab68883890161480a565b90965094506020870135915080821115614acf57600080fd5b50614adc8782880161480a565b95989497509550505050565b60008060008060008060008060c0898b031215614b0457600080fd5b8835614b0f8161488f565b97506020890135614b1f8161488f565b9650604089013595506060890135945060808901356001600160401b0380821115614b4957600080fd5b614b558c838d0161480a565b909650945060a08b0135915080821115614b6e57600080fd5b50614b7b8b828c0161480a565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614bab57600080fd5b88356001600160401b0380821115614bc257600080fd5b614bce8c838d0161480a565b909a50985060208b0135915080821115614be757600080fd5b614bf38c838d0161480a565b909850965060408b0135915080821115614c0c57600080fd5b614c188c838d0161480a565b909650945060608b0135915080821115614b6e57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614c6957614c69614c31565b60405290565b604080519081016001600160401b0381118282101715614c6957614c69614c31565b604051601f8201601f191681016001600160401b0381118282101715614cb957614cb9614c31565b604052919050565b63ffffffff81168114610fee57600080fd5b80356148af81614cc1565b60006001600160401b03821115614cf757614cf7614c31565b5060051b60200190565b600082601f830112614d1257600080fd5b81356020614d27614d2283614cde565b614c91565b82815260059290921b84018101918181019086841115614d4657600080fd5b8286015b84811015614d6a578035614d5d8161488f565b8352918301918301614d4a565b509695505050505050565b600082601f830112614d8657600080fd5b81356020614d96614d2283614cde565b82815260059290921b84018101918181019086841115614db557600080fd5b8286015b84811015614d6a5780358352918301918301614db9565b600060e08284031215614de257600080fd5b614dea614c47565b9050614df5826148a4565b8152614e03602083016148a4565b6020820152614e14604083016148a4565b604082015260608201356060820152614e2f60808301614cd3565b608082015260a08201356001600160401b0380821115614e4e57600080fd5b614e5a85838601614d01565b60a084015260c0840135915080821115614e7357600080fd5b50614e8084828501614d75565b60c08301525092915050565b600060208284031215614e9e57600080fd5b81356001600160401b03811115614eb457600080fd5b614ec084828501614dd0565b949350505050565b600060208284031215614eda57600080fd5b813560ff81168114614a1c57600080fd5b8015158114610fee57600080fd5b600080600080600060808688031215614f1157600080fd5b85356001600160401b0380821115614f2857600080fd5b9087019060e0828a031215614f3c57600080fd5b90955060208701359080821115614f5257600080fd5b50614f5f8882890161480a565b909550935050604086013591506060860135614f7a81614eeb565b809150509295509295909350565b60008060408385031215614f9b57600080fd5b8235614fa68161488f565b91506020830135614fb68161488f565b809150509250929050565b600060408284031215614fd357600080fd5b614fdb614c6f565b905081356001600160401b0380821115614ff457600080fd5b818401915084601f83011261500857600080fd5b813560208282111561501c5761501c614c31565b61502e601f8301601f19168201614c91565b9250818352868183860101111561504457600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561508157600080fd5b853561508c8161488f565b9450602086013561509c8161488f565b935060408601356001600160401b03808211156150b857600080fd5b6150c489838a01614fc1565b945060608801359150808211156150da57600080fd5b506150e788828901614fc1565b95989497509295608001359392505050565b6000806040838503121561510c57600080fd5b82356151178161488f565b915060208301356001600160401b0381111561513257600080fd5b61513e85828601614d01565b9150509250929050565b600081518084526020808501945080840160005b838110156151785781518752958201959082019060010161515c565b509495945050505050565b602081526000614a1c6020830184615148565b600080602083850312156151a957600080fd5b82356001600160401b038111156151bf57600080fd5b6148838582860161496b565b600080604083850312156151de57600080fd5b82356151e98161488f565b946020939093013593505050565b6000806000806080858703121561520d57600080fd5b84356152188161488f565b935060208501359250604085013561522f8161488f565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156151785781516001600160a01b031687529582019590820190600101615253565b60408152600061528b604083018561523f565b82810360208401526112208185615148565b6000806000606084860312156152b257600080fd5b83356152bd8161488f565b925060208401356001600160401b038111156152d857600080fd5b6152e486828701614fc1565b925050604084013590509250925092565b60006060828403121561530757600080fd5b614a1c8383614953565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561535157615351615327565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e198336030181126153a557600080fd5b9190910192915050565b6000808335601e198436030181126153c657600080fd5b8301803591506001600160401b038211156153e057600080fd5b6020019150600581901b360382131561452257600080fd5b6060810182356154078161488f565b6001600160a01b0390811683526020840135906154238261488f565b166020830152604083013561543781614cc1565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561548b57600080fd5b8151614a1c8161488f565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561554f57600080fd5b8151614a1c81614eeb565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de198336030181126153a557600080fd5b6000602082840312156155ca57600080fd5b8135614a1c81614eeb565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261563060e085018261523f565b905060c083015184820360c08601526112208282615148565b602081526000614a1c60208301846155d5565b60006020828403121561566e57600080fd5b5051919050565b600082601f83011261568657600080fd5b81516020615696614d2283614cde565b82815260059290921b840181019181810190868411156156b557600080fd5b8286015b84811015614d6a57805183529183019183016156b9565b600080604083850312156156e357600080fd5b82516001600160401b03808211156156fa57600080fd5b818501915085601f83011261570e57600080fd5b8151602061571e614d2283614cde565b82815260059290921b8401810191818101908984111561573d57600080fd5b948201945b838610156157645785516157558161488f565b82529482019490820190615742565b9188015191965090935050508082111561577d57600080fd5b5061513e85828601615675565b6000821982111561579d5761579d615327565b500190565b6000828210156157b4576157b4615327565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000614ec060408301846155d5565b60006020828403121561580857600080fd5b8135614a1c81614cc1565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561583e8161488f565b6158488183615813565b5060018101602083013561585b8161488f565b6158658183615813565b50604083013561587481614cc1565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006117513683614dd0565b6020808252606e908201526000805160206159c883398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b8181101561595e57858101830151858201606001528201615942565b81811115615970576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561599957600080fd5b81516001600160e01b031981168114614a1c57600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a26469706673582212201a88ea42e4cac4dd0831a1f8bfe22cc6c2ba4c8776376923419ad9ee255481f164736f6c634300080c0033", } // DelegationManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenPodManager/binding.go b/pkg/bindings/EigenPodManager/binding.go index 0ce5fc722..3d1d31267 100644 --- a/pkg/bindings/EigenPodManager/binding.go +++ b/pkg/bindings/EigenPodManager/binding.go @@ -32,7 +32,7 @@ var ( // 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\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620034e7380380620034e783398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e051610100516132a66200024160003960008181610636015281816106e001528181610b0e015281816113e70152818161187c015261196c01526000610542015260006102e601526000818161027a01528181611366015261203a0152600061041401526132a66000f3fe6080604052600436106101ee5760003560e01c80638da5cb5b1161010d578063c052bd61116100a0578063d1c64cc91161006f578063d1c64cc914610604578063ea4d3c9b14610624578063f2fde38b14610658578063f6848d2414610678578063fabc1cbc146106b357600080fd5b8063c052bd6114610584578063c1de3aef146105a4578063c2c51c40146105c4578063cf756fdf146105e457600080fd5b8063a38406a3116100dc578063a38406a3146104fa578063a6a509be1461051a578063b134427114610530578063beffbb891461056457600080fd5b80638da5cb5b1461046b5780639104c319146104895780639b4e4634146104b15780639ba06275146104c457600080fd5b8063595c6a6711610185578063715018a611610154578063715018a6146103ed57806374cdd7981461040257806384d8106214610436578063886f11951461044b57600080fd5b8063595c6a67146103565780635ac86ab71461036b5780635c975abb146103ab57806360f4062b146103c057600080fd5b8063387b1300116101c1578063387b1300146102b457806339b70e38146102d457806344e71c8014610308578063463db0381461033657600080fd5b80630e81073c146101f357806310d67a2f14610226578063136439dd14610248578063292b7b2b14610268575b600080fd5b3480156101ff57600080fd5b5061021361020e366004612406565b6106d3565b6040519081526020015b60405180910390f35b34801561023257600080fd5b50610246610241366004612432565b610911565b005b34801561025457600080fd5b5061024661026336600461244f565b6109c4565b34801561027457600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161021d565b3480156102c057600080fd5b506102466102cf366004612468565b610b03565b3480156102e057600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031457600080fd5b5061031d610ea1565b60405167ffffffffffffffff909116815260200161021d565b34801561034257600080fd5b506102466103513660046124a9565b610eca565b34801561036257600080fd5b50610246611056565b34801561037757600080fd5b5061039b6103863660046124d3565b606654600160ff9092169190911b9081161490565b604051901515815260200161021d565b3480156103b757600080fd5b50606654610213565b3480156103cc57600080fd5b506102136103db366004612432565b609b6020526000908152604090205481565b3480156103f957600080fd5b5061024661111d565b34801561040e57600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044257600080fd5b5061029c611131565b34801561045757600080fd5b5060655461029c906001600160a01b031681565b34801561047757600080fd5b506033546001600160a01b031661029c565b34801561049557600080fd5b5061029c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102466104bf36600461253f565b61121b565b3480156104d057600080fd5b5061029c6104df366004612432565b6098602052600090815260409020546001600160a01b031681565b34801561050657600080fd5b5061029c610515366004612432565b61130a565b34801561052657600080fd5b5061021360995481565b34801561053c57600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561057057600080fd5b5061024661057f366004612406565b6113dc565b34801561059057600080fd5b5060975461029c906001600160a01b031681565b3480156105b057600080fd5b506102466105bf366004612432565b6115f3565b3480156105d057600080fd5b506102466105df366004612406565b611604565b3480156105f057600080fd5b506102466105ff3660046125b3565b611a07565b34801561061057600080fd5b5061021361061f3660046124a9565b611b30565b34801561063057600080fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066457600080fd5b50610246610673366004612432565b611c3b565b34801561068457600080fd5b5061039b610693366004612432565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156106bf57600080fd5b506102466106ce36600461244f565b611cb1565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107265760405162461bcd60e51b815260040161071d90612604565b60405180910390fd5b6001600160a01b0383166107a25760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161071d565b60008212156108105760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161071d565b61081e633b9aca0083612678565b156108915760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161071d565b6001600160a01b0383166000908152609b6020526040812054906108b584836126a2565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020613231833981519152906108f49087815260200190565b60405180910390a26109068282611e0d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098891906126e3565b6001600160a01b0316336001600160a01b0316146109b85760405162461bcd60e51b815260040161071d90612700565b6109c181611e4f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061274a565b610a4c5760405162461bcd60e51b815260040161071d9061276c565b60665481811614610ac55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b4b5760405162461bcd60e51b815260040161071d90612604565b6001600160a01b038316610bc55760405162461bcd60e51b8152602060048201526047602482015260008051602061325183398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161071d565b6001600160a01b038216610c425760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161071d565b6000811215610cb15760405162461bcd60e51b8152602060048201526041602482015260008051602061325183398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161071d565b610cbf633b9aca0082612678565b15610d335760405162461bcd60e51b815260206004820152604a602482015260008051602061325183398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161071d565b6001600160a01b0383166000908152609b602052604081205490811215610e26576000610d5f826127b4565b905080831115610dc4576001600160a01b0385166000908152609b6020526040812055610d8c81846127d1565b9250846001600160a01b031660008051602061323183398151915282604051610db791815260200190565b60405180910390a2610e24565b6001600160a01b0385166000908152609b602052604081208054859290610dec9084906126a2565b90915550506040518381526001600160a01b038616906000805160206132318339815191529060200160405180910390a25050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b5050505050505050565b609c5460009067ffffffffffffffff1680610ec55767ffffffffffffffff91505090565b919050565b610ed2611f46565b67ffffffffffffffff8116610f645760405162461bcd60e51b815260206004820152604c60248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f7420736574206e657744656e6562466f726b546960648201526b06d657374616d7020746f20360a41b608482015260a40161071d565b609c5467ffffffffffffffff16156110005760405162461bcd60e51b815260206004820152605360248201527f456967656e506f644d616e616765722e73657444656e6562466f726b54696d6560448201527f7374616d703a2063616e6e6f74207365742064656e6562466f726b54696d657360648201527274616d70206d6f7265207468616e206f6e636560681b608482015260a40161071d565b609c805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527f19200b6fdad58f91b2f496b0c444fc4be3eff74a7e24b07770e04a7137bfd9db9060200160405180910390a150565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c2919061274a565b6110de5760405162461bcd60e51b815260040161071d9061276c565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611125611f46565b61112f6000611fa0565b565b6066546000908190600190811614156111885760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03161561120a5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161071d565b6000611214611ff2565b9250505090565b606654600090600190811614156112705760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161071d565b336000908152609860205260409020546001600160a01b03168061129957611296611ff2565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906112cf908b908b908b908b908b90600401612811565b6000604051808303818588803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061090b576113d5836001600160a01b031660001b60405180610940016040528061090e815260200161292361090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f19818403018152908290526113ba9291602001612886565b60405160208183030381529060405280519060200120612157565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114245760405162461bcd60e51b815260040161071d90612604565b600081121561149b5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161071d565b6114a9633b9aca0082612678565b1561151e576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161071d565b6001600160a01b0382166000908152609b602052604081205461154290839061289b565b905060008112156115d35760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161071d565b6001600160a01b039092166000908152609b602052604090209190915550565b6115fb611f46565b6109c1816121b3565b6001600160a01b03808316600090815260986020526040902054839116331461167f5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161071d565b600260c95414156116d25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b600260c9556001600160a01b03831661176e5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161071d565b61177c633b9aca00836128da565b156118155760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161071d565b6001600160a01b0383166000908152609b60205260408120549061183984836126a2565b6001600160a01b0386166000908152609b602052604081208290559091506118618383611e0d565b905080156119c957600081121561192c576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118c0856127b4565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561190f57600080fd5b505af1158015611923573d6000803e3d6000fd5b505050506119c9565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020613231833981519152866040516119f291815260200190565b60405180910390a25050600160c95550505050565b600054610100900460ff1615808015611a275750600054600160ff909116105b80611a415750303b158015611a41575060005460ff166001145b611aa45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161071d565b6000805460ff191660011790558015611ac7576000805461ff0019166101001790555b611ad0856121b3565b611ad984611fa0565b611ae383836121fd565b8015611b29576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60975460405163321accf960e11b815267ffffffffffffffff8316600482015260009182916001600160a01b039091169063643599f290602401602060405180830381865afa158015611b87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bab91906128ee565b90508061090b5760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e676574426c6f636b526f6f744174546960448201527f6d657374616d703a20737461746520726f6f742061742074696d657374616d70606482015271081b9bdd081e595d08199a5b985b1a5e995960721b608482015260a40161071d565b611c43611f46565b6001600160a01b038116611ca85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071d565b6109c181611fa0565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2891906126e3565b6001600160a01b0316336001600160a01b031614611d585760405162461bcd60e51b815260040161071d90612700565b606654198119606654191614611dd65760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161071d565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610af8565b6000808313611e2d5760008213611e265750600061090b565b508061090b565b60008213611e4557611e3e836127b4565b905061090b565b611e3e838361289b565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161071d565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461112f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060996000815461200390612907565b9091555060408051610940810190915261090e8082526000916120a291839133916129236020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f198184030181529082905261208e9291602001612886565b6040516020818303038152906040526122e7565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156120e657600080fd5b505af11580156120fa573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000906113d5565b609780546001600160a01b0319166001600160a01b0383169081179091556040517f08f0470754946ccfbb446ff7fd2d6ae6af1bbdae19f85794c0cc5ed5e8ceb4f690600090a250565b6065546001600160a01b031615801561221e57506001600160a01b03821615155b6122a05760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161071d565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26122e382611e4f565b5050565b6000808447101561233a5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161071d565b82516123885760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161071d565b8383516020850187f590506001600160a01b0381166123e95760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161071d565b949350505050565b6001600160a01b03811681146109c157600080fd5b6000806040838503121561241957600080fd5b8235612424816123f1565b946020939093013593505050565b60006020828403121561244457600080fd5b81356113d5816123f1565b60006020828403121561246157600080fd5b5035919050565b60008060006060848603121561247d57600080fd5b8335612488816123f1565b92506020840135612498816123f1565b929592945050506040919091013590565b6000602082840312156124bb57600080fd5b813567ffffffffffffffff811681146113d557600080fd5b6000602082840312156124e557600080fd5b813560ff811681146113d557600080fd5b60008083601f84011261250857600080fd5b50813567ffffffffffffffff81111561252057600080fd5b60208301915083602082850101111561253857600080fd5b9250929050565b60008060008060006060868803121561255757600080fd5b853567ffffffffffffffff8082111561256f57600080fd5b61257b89838a016124f6565b9097509550602088013591508082111561259457600080fd5b506125a1888289016124f6565b96999598509660400135949350505050565b600080600080608085870312156125c957600080fd5b84356125d4816123f1565b935060208501356125e4816123f1565b925060408501356125f4816123f1565b9396929550929360600135925050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261268757612687612662565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b03849003851316156126c4576126c461268c565b600160ff1b83900384128116156126dd576126dd61268c565b50500190565b6000602082840312156126f557600080fd5b81516113d5816123f1565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561275c57600080fd5b815180151581146113d557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b8214156127ca576127ca61268c565b5060000390565b6000828210156127e3576127e361268c565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006128256060830187896127e8565b82810360208401526128388186886127e8565b9150508260408301529695505050505050565b6000815160005b8181101561286c5760208185018101518683015201612852565b8181111561287b576000828601525b509290920192915050565b60006123e9612895838661284b565b8461284b565b60008083128015600160ff1b8501841216156128b9576128b961268c565b6001600160ff1b03840183138116156128d4576128d461268c565b50500390565b6000826128e9576128e9612662565b500790565b60006020828403121561290057600080fd5b5051919050565b600060001982141561291b5761291b61268c565b506001019056fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a264697066735822122004d8740e0cf9e5496208917d8d4cc564f420a5881e787d21f37ecebe90895cee64736f6c634300080c0033", + Bin: "0x6101206040523480156200001257600080fd5b50604051620031693803806200316983398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e05161010051612f286200024160003960008181610551015281816105fb01528181610b7901528181611313015281816117bf01526118af015260006104dd015260006102cf015260008181610263015281816112920152611e64015260006103af0152612f286000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b1461053f578063f2fde38b14610573578063f6848d2414610593578063fabc1cbc146105ce57600080fd5b8063b1344271146104cb578063beffbb89146104ff578063c2c51c401461051f57600080fd5b80639b4e4634116100c65780639b4e46341461044c5780639ba062751461045f578063a38406a314610495578063a6a509be146104b557600080fd5b8063886f1195146103e65780638da5cb5b146104065780639104c3191461042457600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461035b578063715018a61461038857806374cdd7981461039d57806384d81062146103d157600080fd5b8063595c6a67146102f15780635ac86ab7146103065780635c975abb1461034657600080fd5b80631794bb3c116101955780631794bb3c14610231578063292b7b2b14610251578063387b13001461029d57806339b70e38146102bd57600080fd5b80630e81073c146101bc57806310d67a2f146101ef578063136439dd14610211575b600080fd5b3480156101c857600080fd5b506101dc6101d73660046120fc565b6105ee565b6040519081526020015b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004612128565b61085d565b005b34801561021d57600080fd5b5061020f61022c366004612145565b610910565b34801561023d57600080fd5b5061020f61024c36600461215e565b610a4f565b34801561025d57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e6565b3480156102a957600080fd5b5061020f6102b836600461215e565b610b6e565b3480156102c957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fd57600080fd5b5061020f610f82565b34801561031257600080fd5b5061033661032136600461219f565b606654600160ff9092169190911b9081161490565b60405190151581526020016101e6565b34801561035257600080fd5b506066546101dc565b34801561036757600080fd5b506101dc610376366004612128565b609b6020526000908152604090205481565b34801561039457600080fd5b5061020f611049565b3480156103a957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b5061028561105d565b3480156103f257600080fd5b50606554610285906001600160a01b031681565b34801561041257600080fd5b506033546001600160a01b0316610285565b34801561043057600080fd5b5061028573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61020f61045a36600461220b565b611147565b34801561046b57600080fd5b5061028561047a366004612128565b6098602052600090815260409020546001600160a01b031681565b3480156104a157600080fd5b506102856104b0366004612128565b611236565b3480156104c157600080fd5b506101dc60995481565b3480156104d757600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061020f61051a3660046120fc565b611308565b34801561052b57600080fd5b5061020f61053a3660046120fc565b611547565b34801561054b57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b5061020f61058e366004612128565b61197b565b34801561059f57600080fd5b506103366105ae366004612128565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105da57600080fd5b5061020f6105e9366004612145565b6119f1565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106415760405162461bcd60e51b81526004016106389061227f565b60405180910390fd5b6001600160a01b0383166106bd5760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f20616464726573730000000000006064820152608401610638565b600082121561072b5760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b6064820152608401610638565b610739633b9aca00836122f3565b156107ac5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e740000006064820152608401610638565b6001600160a01b0383166000908152609b6020526040812054906107d0848361231d565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020612eb38339815191529061080f9087815260200190565b60405180910390a2846001600160a01b03166000805160206125858339815191528260405161084091815260200190565b60405180910390a26108528282611b4d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d4919061235e565b6001600160a01b0316336001600160a01b0316146109045760405162461bcd60e51b81526004016106389061237b565b61090d81611b8f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097c91906123c5565b6109985760405162461bcd60e51b8152600401610638906123e7565b60665481811614610a115760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610638565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff1615808015610a6f5750600054600160ff909116105b80610a895750303b158015610a89575060005460ff166001145b610aec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610638565b6000805460ff191660011790558015610b0f576000805461ff0019166101001790555b610b1884611c86565b610b228383611cd8565b8015610b68576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bb65760405162461bcd60e51b81526004016106389061227f565b6001600160a01b038316610c305760405162461bcd60e51b81526020600482015260476024820152600080516020612ed383398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a401610638565b6001600160a01b038216610cad5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ed383398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a401610638565b6000811215610d1c5760405162461bcd60e51b81526020600482015260416024820152600080516020612ed383398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a401610638565b610d2a633b9aca00826122f3565b15610d9e5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ed383398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a401610638565b6001600160a01b0383166000908152609b602052604081205490811215610f07576000610dca8261242f565b905080831115610e61576001600160a01b0385166000908152609b6020526040812055610df7818461244c565b9250846001600160a01b0316600080516020612eb383398151915282604051610e2291815260200190565b60405180910390a2846001600160a01b03166000805160206125858339815191526000604051610e5491815260200190565b60405180910390a2610f05565b6001600160a01b0385166000908152609b6020526040812054610e8590859061231d565b6001600160a01b0387166000818152609b6020526040908190208390555191925090600080516020612eb383398151915290610ec49087815260200190565b60405180910390a2856001600160a01b031660008051602061258583398151915282604051610ef591815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610f6457600080fd5b505af1158015610f78573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fee91906123c5565b61100a5760405162461bcd60e51b8152600401610638906123e7565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611051611dc2565b61105b6000611c86565b565b6066546000908190600190811614156110b45760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610638565b336000908152609860205260409020546001600160a01b0316156111365760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b6064820152608401610638565b6000611140611e1c565b9250505090565b6066546000906001908116141561119c5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610638565b336000908152609860205260409020546001600160a01b0316806111c5576111c2611e1c565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906111fb908b908b908b908b908b9060040161248c565b6000604051808303818588803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061085757611301836001600160a01b031660001b60405180610940016040528061090e81526020016125a561090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f19818403018152908290526112e69291602001612501565b60405160208183030381529060405280519060200120611f81565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113505760405162461bcd60e51b81526004016106389061227f565b60008112156113c75760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e656761746976650000000000000000006064820152608401610638565b6113d5633b9aca00826122f3565b1561144a576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e746064820152608401610638565b6001600160a01b0382166000908152609b602052604081205461146e908390612516565b905060008112156114ff5760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a401610638565b6001600160a01b0383166000818152609b602052604090819020839055516000805160206125858339815191529061153a9084815260200190565b60405180910390a2505050565b6001600160a01b0380831660009081526098602052604090205483911633146115c25760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b6064820152608401610638565b600260c95414156116155760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610638565b600260c9556001600160a01b0383166116b15760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a401610638565b6116bf633b9aca0083612555565b156117585760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a401610638565b6001600160a01b0383166000908152609b60205260408120549061177c848361231d565b6001600160a01b0386166000908152609b602052604081208290559091506117a48383611b4d565b9050801561190c57600081121561186f576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118038561242f565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561185257600080fd5b505af1158015611866573d6000803e3d6000fd5b5050505061190c565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156118f357600080fd5b505af1158015611907573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020612eb38339815191528660405161193591815260200190565b60405180910390a2856001600160a01b03166000805160206125858339815191528360405161196691815260200190565b60405180910390a25050600160c95550505050565b611983611dc2565b6001600160a01b0381166119e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610638565b61090d81611c86565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a68919061235e565b6001600160a01b0316336001600160a01b031614611a985760405162461bcd60e51b81526004016106389061237b565b606654198119606654191614611b165760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610638565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610a44565b6000808313611b6d5760008213611b6657506000610857565b5080610857565b60008213611b8557611b7e8361242f565b9050610857565b611b7e8383612516565b6001600160a01b038116611c1d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610638565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b0316158015611cf957506001600160a01b03821615155b611d7b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610638565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611dbe82611b8f565b5050565b6033546001600160a01b0316331461105b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000609960008154611e2d90612569565b9091555060408051610940810190915261090e808252600091611ecc91839133916125a56020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052611eb89291602001612501565b604051602081830303815290604052611fdd565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b158015611f1057600080fd5b505af1158015611f24573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090611301565b600080844710156120305760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610638565b825161207e5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610638565b8383516020850187f590506001600160a01b0381166120df5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610638565b949350505050565b6001600160a01b038116811461090d57600080fd5b6000806040838503121561210f57600080fd5b823561211a816120e7565b946020939093013593505050565b60006020828403121561213a57600080fd5b8135611301816120e7565b60006020828403121561215757600080fd5b5035919050565b60008060006060848603121561217357600080fd5b833561217e816120e7565b9250602084013561218e816120e7565b929592945050506040919091013590565b6000602082840312156121b157600080fd5b813560ff8116811461130157600080fd5b60008083601f8401126121d457600080fd5b50813567ffffffffffffffff8111156121ec57600080fd5b60208301915083602082850101111561220457600080fd5b9250929050565b60008060008060006060868803121561222357600080fd5b853567ffffffffffffffff8082111561223b57600080fd5b61224789838a016121c2565b9097509550602088013591508082111561226057600080fd5b5061226d888289016121c2565b96999598509660400135949350505050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612302576123026122dd565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b038490038513161561233f5761233f612307565b600160ff1b839003841281161561235857612358612307565b50500190565b60006020828403121561237057600080fd5b8151611301816120e7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156123d757600080fd5b8151801515811461130157600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b82141561244557612445612307565b5060000390565b60008282101561245e5761245e612307565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006124a0606083018789612463565b82810360208401526124b3818688612463565b9150508260408301529695505050505050565b6000815160005b818110156124e757602081850181015186830152016124cd565b818111156124f6576000828601525b509290920192915050565b60006120df61251083866124c6565b846124c6565b60008083128015600160ff1b85018412161561253457612534612307565b6001600160ff1b038401831381161561254f5761254f612307565b50500390565b600082612564576125646122dd565b500790565b600060001982141561257d5761257d612307565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220ab15fe92e05748fd03441d98a7837905194deb492a89f580b320661f7cb8204164736f6c634300080c0033", } // EigenPodManagerABI 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 3711fcb9c..d8f4e779c 100644 --- a/pkg/bindings/IAVSDirectory/binding.go +++ b/pkg/bindings/IAVSDirectory/binding.go @@ -29,6 +29,20 @@ var ( _ = abi.ConvertType ) +// IAVSDirectoryMagnitudeAllocation is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryMagnitudeAllocation struct { + Strategy common.Address + ExpectedTotalMagnitude uint64 + OperatorSets []IAVSDirectoryOperatorSet + Magnitudes []uint64 +} + +// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. +type IAVSDirectoryOperatorSet struct { + Avs common.Address + OperatorSetId uint32 +} + // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -38,7 +52,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry 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\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"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\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"isLegacyOperator\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"INITIAL_TOTAL_MAGNITUDE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"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\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateMagnitudeAllocationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"numToComplete\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashablePPM\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"linear\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint24[]\",\"internalType\":\"uint24[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initializeAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"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\":\"operatorSetMemberCount\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"slashOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateFreeMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToComplete\",\"type\":\"uint8[]\",\"internalType\":\"uint8[]\"}],\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeAllocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToAllocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeDeallocationCompleted\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"freeMagnitudeAdded\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeQueueDeallocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToDeallocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"completableTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false}]", } // IAVSDirectoryABI is the input ABI used to generate the binding from. @@ -187,6 +201,37 @@ func (_IAVSDirectory *IAVSDirectoryTransactorRaw) Transact(opts *bind.TransactOp return _IAVSDirectory.Contract.contract.Transact(opts, method, params...) } +// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. +// +// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) +func (_IAVSDirectory *IAVSDirectoryCaller) INITIALTOTALMAGNITUDE(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "INITIAL_TOTAL_MAGNITUDE") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. +// +// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) +func (_IAVSDirectory *IAVSDirectorySession) INITIALTOTALMAGNITUDE() (uint64, error) { + return _IAVSDirectory.Contract.INITIALTOTALMAGNITUDE(&_IAVSDirectory.CallOpts) +} + +// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. +// +// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) +func (_IAVSDirectory *IAVSDirectoryCallerSession) INITIALTOTALMAGNITUDE() (uint64, error) { + return _IAVSDirectory.Contract.INITIALTOTALMAGNITUDE(&_IAVSDirectory.CallOpts) +} + // OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. // // Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) @@ -249,6 +294,37 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) OPERATORSETREGISTRATIONTYPEHAS return _IAVSDirectory.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_IAVSDirectory.CallOpts) } +// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. +// +// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCaller) CalculateMagnitudeAllocationDigestHash(opts *bind.CallOpts, operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "calculateMagnitudeAllocationDigestHash", operator, allocations, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. +// +// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectorySession) CalculateMagnitudeAllocationDigestHash(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IAVSDirectory.Contract.CalculateMagnitudeAllocationDigestHash(&_IAVSDirectory.CallOpts, operator, allocations, salt, expiry) +} + +// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. +// +// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateMagnitudeAllocationDigestHash(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IAVSDirectory.Contract.CalculateMagnitudeAllocationDigestHash(&_IAVSDirectory.CallOpts, operator, allocations, salt, expiry) +} + // CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. // // Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -280,6 +356,37 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorAVSRegistrati return _IAVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_IAVSDirectory.CallOpts, operator, avs, salt, expiry) } +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectorySession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IAVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +} + +// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// +// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) +func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { + return _IAVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +} + // CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. // // Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -312,6 +419,9 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorSetRegistrati } <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 6b2ab7ed (build: bindings) // DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. // // Solidity: function domainSeparator() view returns(bytes32) @@ -343,6 +453,9 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) DomainSeparator() ([32]byte, e return _IAVSDirectory.Contract.DomainSeparator(&_IAVSDirectory.CallOpts) } +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD // GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // // Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) @@ -355,11 +468,67 @@ func (_IAVSDirectory *IAVSDirectoryCaller) GetNumOperatorsInOperatorSet(opts *bi } out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) +======= +// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. +======= +======= +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0xdd63ac60. +// +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) +func (_IAVSDirectory *IAVSDirectoryCaller) GetAllocatableMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "getAllocatableMagnitude", operator, strategy, numToComplete) + + 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 0xdd63ac60. +// +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) +func (_IAVSDirectory *IAVSDirectorySession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { + return _IAVSDirectory.Contract.GetAllocatableMagnitude(&_IAVSDirectory.CallOpts, operator, strategy, numToComplete) +} + +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0xdd63ac60. +// +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { + return _IAVSDirectory.Contract.GetAllocatableMagnitude(&_IAVSDirectory.CallOpts, operator, strategy, numToComplete) +} + +>>>>>>> c7573609 (build: bindings) +// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +>>>>>>> 49569901 (feat: set allocations (#691)) +// +// Solidity: function getAllocationDelay(address operator) view returns(uint32) +func (_IAVSDirectory *IAVSDirectoryCaller) GetAllocationDelay(opts *bind.CallOpts, operator common.Address) (uint32, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "getAllocationDelay", operator) + + if err != nil { + return *new(uint32), err + } + +<<<<<<< HEAD + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) +>>>>>>> 6b2ab7ed (build: bindings) +======= + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) +>>>>>>> 49569901 (feat: set allocations (#691)) return out0, err } +<<<<<<< HEAD +<<<<<<< HEAD // GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // // Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) @@ -465,6 +634,60 @@ func (_IAVSDirectory *IAVSDirectorySession) InTotalOperatorSets(operator common. // Solidity: function inTotalOperatorSets(address operator) view returns(uint256) func (_IAVSDirectory *IAVSDirectoryCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { return _IAVSDirectory.Contract.InTotalOperatorSets(&_IAVSDirectory.CallOpts, operator) +======= +// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. +======= +// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +>>>>>>> 49569901 (feat: set allocations (#691)) +// +// Solidity: function getAllocationDelay(address operator) view returns(uint32) +func (_IAVSDirectory *IAVSDirectorySession) GetAllocationDelay(operator common.Address) (uint32, error) { + return _IAVSDirectory.Contract.GetAllocationDelay(&_IAVSDirectory.CallOpts, operator) +} + +// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +// +<<<<<<< HEAD +// Solidity: function getSlashableBips(address operator, (address,uint32) operatorSet, address strategy, uint32 timestamp) view returns(uint16) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetSlashableBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategy common.Address, timestamp uint32) (uint16, error) { + return _IAVSDirectory.Contract.GetSlashableBips(&_IAVSDirectory.CallOpts, operator, operatorSet, strategy, timestamp) +>>>>>>> 6b2ab7ed (build: bindings) +======= +// Solidity: function getAllocationDelay(address operator) view returns(uint32) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetAllocationDelay(operator common.Address) (uint32, error) { + return _IAVSDirectory.Contract.GetAllocationDelay(&_IAVSDirectory.CallOpts, operator) +} + +// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. +// +// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) +func (_IAVSDirectory *IAVSDirectoryCaller) GetSlashablePPM(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "getSlashablePPM", operator, operatorSet, strategies, timestamp, linear) + + if err != nil { + return *new([]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) + + return out0, err + +} + +// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. +// +// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) +func (_IAVSDirectory *IAVSDirectorySession) GetSlashablePPM(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { + return _IAVSDirectory.Contract.GetSlashablePPM(&_IAVSDirectory.CallOpts, operator, operatorSet, strategies, timestamp, linear) +} + +// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. +// +// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetSlashablePPM(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { + return _IAVSDirectory.Contract.GetSlashablePPM(&_IAVSDirectory.CallOpts, operator, operatorSet, strategies, timestamp, linear) +>>>>>>> 49569901 (feat: set allocations (#691)) } // IsMember is a free data retrieval call binding the contract method 0xda2ff05d. @@ -560,8 +783,42 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) IsOperatorSetAVS(avs common.Ad return _IAVSDirectory.Contract.IsOperatorSetAVS(&_IAVSDirectory.CallOpts, avs) } +<<<<<<< HEAD ======= >>>>>>> ce94473c (feat: operator commission bips (#627)) +======= +// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. +// +// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) +func (_IAVSDirectory *IAVSDirectoryCaller) IsOperatorSlashable(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + var out []interface{} + err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectorySession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _IAVSDirectory.Contract.IsOperatorSlashable(&_IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryCallerSession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { + return _IAVSDirectory.Contract.IsOperatorSlashable(&_IAVSDirectory.CallOpts, operator, operatorSet) +} + +>>>>>>> 6b2ab7ed (build: bindings) // OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // // Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) @@ -593,6 +850,8 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSaltIsSpent(operator c return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) } +<<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD // OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. // @@ -722,24 +981,103 @@ func (_IAVSDirectory *IAVSDirectoryTransactorSession) CreateOperatorSets(operato ======= >>>>>>> ce94473c (feat: operator commission bips (#627)) // DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +======= +// Allocate is a paid mutator transaction binding the contract method 0x70196708. +>>>>>>> 6b2ab7ed (build: bindings) +======= +// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. +>>>>>>> 49569901 (feat: set allocations (#691)) // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +// Solidity: function operatorSetMemberCount(address avs, uint32 operatorSetId) view returns(uint256) +func (_IAVSDirectory *IAVSDirectoryCaller) OperatorSetMemberCount(opts *bind.CallOpts, avs common.Address, operatorSetId uint32) (*big.Int, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "operatorSetMemberCount", avs, operatorSetId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_IAVSDirectory *IAVSDirectorySession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) +// Solidity: function operatorSetMemberCount(address avs, uint32 operatorSetId) view returns(uint256) +func (_IAVSDirectory *IAVSDirectorySession) OperatorSetMemberCount(avs common.Address, operatorSetId uint32) (*big.Int, error) { + return _IAVSDirectory.Contract.OperatorSetMemberCount(&_IAVSDirectory.CallOpts, avs, operatorSetId) } -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. +// +// Solidity: function operatorSetMemberCount(address avs, uint32 operatorSetId) view returns(uint256) +func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSetMemberCount(avs common.Address, operatorSetId uint32) (*big.Int, error) { + return _IAVSDirectory.Contract.OperatorSetMemberCount(&_IAVSDirectory.CallOpts, avs, operatorSetId) +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "becomeOperatorSetAVS") +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_IAVSDirectory *IAVSDirectorySession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _IAVSDirectory.Contract.BecomeOperatorSetAVS(&_IAVSDirectory.TransactOpts) +} + +// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. +// +// Solidity: function becomeOperatorSetAVS() returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { + return _IAVSDirectory.Contract.BecomeOperatorSetAVS(&_IAVSDirectory.TransactOpts) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) CancelSalt(opts *bind.TransactOpts, salt [32]byte) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "cancelSalt", salt) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_IAVSDirectory *IAVSDirectorySession) CancelSalt(salt [32]byte) (*types.Transaction, error) { + return _IAVSDirectory.Contract.CancelSalt(&_IAVSDirectory.TransactOpts, salt) +} + +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. +// +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { + return _IAVSDirectory.Contract.CancelSalt(&_IAVSDirectory.TransactOpts, salt) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "createOperatorSets", operatorSetIds) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectorySession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.CreateOperatorSets(&_IAVSDirectory.TransactOpts, operatorSetIds) +} + +// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. // -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) +// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.CreateOperatorSets(&_IAVSDirectory.TransactOpts, operatorSetIds) } // DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. @@ -763,88 +1101,193 @@ func (_IAVSDirectory *IAVSDirectoryTransactorSession) DeregisterOperatorFromOper return _IAVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds) } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectorySession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) } -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. // -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) +// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) } -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, signature) +// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) InitializeAllocationDelay(opts *bind.TransactOpts, operator common.Address, delay uint32) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "initializeAllocationDelay", operator, delay) } -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() -func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, signature) +// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() +func (_IAVSDirectory *IAVSDirectorySession) InitializeAllocationDelay(operator common.Address, delay uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.InitializeAllocationDelay(&_IAVSDirectory.TransactOpts, operator, delay) } -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. // -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) signature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, signature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, signature) +// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) InitializeAllocationDelay(operator common.Address, delay uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.InitializeAllocationDelay(&_IAVSDirectory.TransactOpts, operator, delay) } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. // -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. // -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_IAVSDirectory *IAVSDirectorySession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectorySession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_IAVSDirectory.TransactOpts, operators, operatorSetIds) } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. // -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) +// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { + return _IAVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_IAVSDirectory.TransactOpts, operators, operatorSetIds) } -// IAVSDirectoryAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the IAVSDirectory contract. -type IAVSDirectoryAVSMetadataURIUpdatedIterator struct { - Event *IAVSDirectoryAVSMetadataURIUpdated // Event containing the contract specifics and raw log +// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. +// +// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) ModifyAllocations(opts *bind.TransactOpts, operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "modifyAllocations", operator, allocations, operatorSignature) +} - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data +// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. +// +// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectorySession) ModifyAllocations(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.ModifyAllocations(&_IAVSDirectory.TransactOpts, operator, allocations, operatorSignature) +} - 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 +// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. +// +// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) ModifyAllocations(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.ModifyAllocations(&_IAVSDirectory.TransactOpts, operator, allocations, operatorSignature) } -// 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 *IAVSDirectoryAVSMetadataURIUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, operatorSignature) +} + +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) +} + +// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. +// +// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) +} + +// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. +// +// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) SlashOperator(opts *bind.TransactOpts, operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "slashOperator", operator, operatorSetId, strategies, bipsToSlash) +} + +// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. +// +// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() +func (_IAVSDirectory *IAVSDirectorySession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { + return _IAVSDirectory.Contract.SlashOperator(&_IAVSDirectory.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) +} + +// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. +// +// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { + return _IAVSDirectory.Contract.SlashOperator(&_IAVSDirectory.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_IAVSDirectory *IAVSDirectorySession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) +} + +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) UpdateFreeMagnitude(opts *bind.TransactOpts, operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "updateFreeMagnitude", operator, strategies, numToComplete) +} + +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() +func (_IAVSDirectory *IAVSDirectorySession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { + return _IAVSDirectory.Contract.UpdateFreeMagnitude(&_IAVSDirectory.TransactOpts, operator, strategies, numToComplete) +} + +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { + return _IAVSDirectory.Contract.UpdateFreeMagnitude(&_IAVSDirectory.TransactOpts, operator, strategies, numToComplete) +} + +// IAVSDirectoryAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the IAVSDirectory contract. +type IAVSDirectoryAVSMetadataURIUpdatedIterator struct { + Event *IAVSDirectoryAVSMetadataURIUpdated // 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 *IAVSDirectoryAVSMetadataURIUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { return false } // If the iterator completed, deliver directly whatever's available @@ -971,9 +1414,9 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log type return event, nil } -// IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { - Event *IAVSDirectoryOperatorAVSRegistrationStatusUpdated // Event containing the contract specifics and raw log +// IAVSDirectoryAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the IAVSDirectory contract. +type IAVSDirectoryAVSMigratedToOperatorSetsIterator struct { + Event *IAVSDirectoryAVSMigratedToOperatorSets // 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 @@ -987,7 +1430,7 @@ type IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator 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 *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool { +func (it *IAVSDirectoryAVSMigratedToOperatorSetsIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -996,7 +1439,7 @@ func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool if it.done { select { case log := <-it.logs: - it.Event = new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + it.Event = new(IAVSDirectoryAVSMigratedToOperatorSets) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1011,7 +1454,7 @@ func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + it.Event = new(IAVSDirectoryAVSMigratedToOperatorSets) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1027,61 +1470,51 @@ func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Error() error { +func (it *IAVSDirectoryAVSMigratedToOperatorSetsIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() error { +func (it *IAVSDirectoryAVSMigratedToOperatorSetsIterator) Close() error { it.sub.Unsubscribe() return nil } -// IAVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorAVSRegistrationStatusUpdated struct { - Operator common.Address - Avs common.Address - IsLegacyOperator bool - Raw types.Log // Blockchain specific contextual infos +// IAVSDirectoryAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the IAVSDirectory contract. +type IAVSDirectoryAVSMigratedToOperatorSets struct { + Avs common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. +// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*IAVSDirectoryAVSMigratedToOperatorSetsIterator, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } var avsRule []interface{} for _, avsItem := range avs { avsRule = append(avsRule, avsItem) } - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) if err != nil { return nil, err } - return &IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _IAVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil + return &IAVSDirectoryAVSMigratedToOperatorSetsIterator{contract: _IAVSDirectory.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil } -// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. +// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } var avsRule []interface{} for _, avsItem := range avs { avsRule = append(avsRule, avsItem) } - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", avsRule) if err != nil { return nil, err } @@ -1091,8 +1524,8 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusU select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + event := new(IAVSDirectoryAVSMigratedToOperatorSets) + if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { return err } event.Raw = log @@ -1113,21 +1546,21 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusU }), nil } -// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0x1864cf493d2c3314abbcef95e20acb37a637bccf3c51f4fe2f6f9492fbeabd7f. +// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. // -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, bool isLegacyOperator) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { - event := new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { +// Solidity: event AVSMigratedToOperatorSets(address indexed avs) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*IAVSDirectoryAVSMigratedToOperatorSets, error) { + event := new(IAVSDirectoryAVSMigratedToOperatorSets) + if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IAVSDirectoryOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorAddedToOperatorSetIterator struct { - Event *IAVSDirectoryOperatorAddedToOperatorSet // Event containing the contract specifics and raw log +// IAVSDirectoryMagnitudeAllocatedIterator is returned from FilterMagnitudeAllocated and is used to iterate over the raw logs and unpacked data for MagnitudeAllocated events raised by the IAVSDirectory contract. +type IAVSDirectoryMagnitudeAllocatedIterator struct { + Event *IAVSDirectoryMagnitudeAllocated // 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 @@ -1141,7 +1574,7 @@ type IAVSDirectoryOperatorAddedToOperatorSetIterator 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 *IAVSDirectoryOperatorAddedToOperatorSetIterator) Next() bool { +func (it *IAVSDirectoryMagnitudeAllocatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1150,7 +1583,7 @@ func (it *IAVSDirectoryOperatorAddedToOperatorSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IAVSDirectoryOperatorAddedToOperatorSet) + it.Event = new(IAVSDirectoryMagnitudeAllocated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1165,7 +1598,7 @@ func (it *IAVSDirectoryOperatorAddedToOperatorSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IAVSDirectoryOperatorAddedToOperatorSet) + it.Event = new(IAVSDirectoryMagnitudeAllocated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1181,43 +1614,45 @@ func (it *IAVSDirectoryOperatorAddedToOperatorSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IAVSDirectoryOperatorAddedToOperatorSetIterator) Error() error { +func (it *IAVSDirectoryMagnitudeAllocatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IAVSDirectoryOperatorAddedToOperatorSetIterator) Close() error { +func (it *IAVSDirectoryMagnitudeAllocatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// IAVSDirectoryOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorAddedToOperatorSet struct { - Operator common.Address - Avs common.Address - OperatorSetId uint32 - Raw types.Log // Blockchain specific contextual infos +// IAVSDirectoryMagnitudeAllocated represents a MagnitudeAllocated event raised by the IAVSDirectory contract. +type IAVSDirectoryMagnitudeAllocated struct { + Operator common.Address + Strategy common.Address + OperatorSet IAVSDirectoryOperatorSet + MagnitudeToAllocate uint64 + EffectTimestamp uint32 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorAddedToOperatorSet is a free log retrieval operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. +// FilterMagnitudeAllocated is a free log retrieval operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. // -// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts) (*IAVSDirectoryOperatorAddedToOperatorSetIterator, error) { +// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterMagnitudeAllocated(opts *bind.FilterOpts) (*IAVSDirectoryMagnitudeAllocatedIterator, error) { - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet") + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "MagnitudeAllocated") if err != nil { return nil, err } - return &IAVSDirectoryOperatorAddedToOperatorSetIterator{contract: _IAVSDirectory.contract, event: "OperatorAddedToOperatorSet", logs: logs, sub: sub}, nil + return &IAVSDirectoryMagnitudeAllocatedIterator{contract: _IAVSDirectory.contract, event: "MagnitudeAllocated", logs: logs, sub: sub}, nil } -// WatchOperatorAddedToOperatorSet is a free log subscription operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. +// WatchMagnitudeAllocated is a free log subscription operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. // -// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAddedToOperatorSet) (event.Subscription, error) { +// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchMagnitudeAllocated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryMagnitudeAllocated) (event.Subscription, error) { - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorAddedToOperatorSet") + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "MagnitudeAllocated") if err != nil { return nil, err } @@ -1227,8 +1662,8 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opt select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IAVSDirectoryOperatorAddedToOperatorSet) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { + event := new(IAVSDirectoryMagnitudeAllocated) + if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeAllocated", log); err != nil { return err } event.Raw = log @@ -1249,21 +1684,21 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opt }), nil } -// ParseOperatorAddedToOperatorSet is a log parse operation binding the contract event 0x0e2d64f3a0f18391c95a0a816961e081b15096f8bb957d0b654897b96b7ba309. +// ParseMagnitudeAllocated is a log parse operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. // -// Solidity: event OperatorAddedToOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*IAVSDirectoryOperatorAddedToOperatorSet, error) { - event := new(IAVSDirectoryOperatorAddedToOperatorSet) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { +// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseMagnitudeAllocated(log types.Log) (*IAVSDirectoryMagnitudeAllocated, error) { + event := new(IAVSDirectoryMagnitudeAllocated) + if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeAllocated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IAVSDirectoryOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorRemovedFromOperatorSetIterator struct { - Event *IAVSDirectoryOperatorRemovedFromOperatorSet // Event containing the contract specifics and raw log +// IAVSDirectoryMagnitudeDeallocationCompletedIterator is returned from FilterMagnitudeDeallocationCompleted and is used to iterate over the raw logs and unpacked data for MagnitudeDeallocationCompleted events raised by the IAVSDirectory contract. +type IAVSDirectoryMagnitudeDeallocationCompletedIterator struct { + Event *IAVSDirectoryMagnitudeDeallocationCompleted // 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 @@ -1277,7 +1712,7 @@ type IAVSDirectoryOperatorRemovedFromOperatorSetIterator 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 *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { +func (it *IAVSDirectoryMagnitudeDeallocationCompletedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -1286,7 +1721,7 @@ func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IAVSDirectoryOperatorRemovedFromOperatorSet) + it.Event = new(IAVSDirectoryMagnitudeDeallocationCompleted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1301,7 +1736,7 @@ func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IAVSDirectoryOperatorRemovedFromOperatorSet) + it.Event = new(IAVSDirectoryMagnitudeDeallocationCompleted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1317,43 +1752,44 @@ func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Error() error { +func (it *IAVSDirectoryMagnitudeDeallocationCompletedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Close() error { +func (it *IAVSDirectoryMagnitudeDeallocationCompletedIterator) Close() error { it.sub.Unsubscribe() return nil } -// IAVSDirectoryOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorRemovedFromOperatorSet struct { - Operator common.Address - Avs common.Address - OperatorSetId uint32 - Raw types.Log // Blockchain specific contextual infos +// IAVSDirectoryMagnitudeDeallocationCompleted represents a MagnitudeDeallocationCompleted event raised by the IAVSDirectory contract. +type IAVSDirectoryMagnitudeDeallocationCompleted struct { + Operator common.Address + Strategy common.Address + OperatorSet IAVSDirectoryOperatorSet + FreeMagnitudeAdded uint64 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. +// FilterMagnitudeDeallocationCompleted is a free log retrieval operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. // -// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts) (*IAVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { +// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterMagnitudeDeallocationCompleted(opts *bind.FilterOpts) (*IAVSDirectoryMagnitudeDeallocationCompletedIterator, error) { - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet") + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "MagnitudeDeallocationCompleted") if err != nil { return nil, err } - return &IAVSDirectoryOperatorRemovedFromOperatorSetIterator{contract: _IAVSDirectory.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil + return &IAVSDirectoryMagnitudeDeallocationCompletedIterator{contract: _IAVSDirectory.contract, event: "MagnitudeDeallocationCompleted", logs: logs, sub: sub}, nil } -// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. +// WatchMagnitudeDeallocationCompleted is a free log subscription operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. // -// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorRemovedFromOperatorSet) (event.Subscription, error) { +// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchMagnitudeDeallocationCompleted(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryMagnitudeDeallocationCompleted) (event.Subscription, error) { - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet") + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "MagnitudeDeallocationCompleted") if err != nil { return nil, err } @@ -1363,8 +1799,8 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IAVSDirectoryOperatorRemovedFromOperatorSet) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { + event := new(IAVSDirectoryMagnitudeDeallocationCompleted) + if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", log); err != nil { return err } event.Raw = log @@ -1385,12 +1821,1019 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet }), nil } -// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0x9a431e7219c8c180fcf08db82dbdfe7f5512a825a1febaee77e02b9b2db8df82. +// ParseMagnitudeDeallocationCompleted is a log parse operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. // -// Solidity: event OperatorRemovedFromOperatorSet(address operator, address avs, uint32 operatorSetId) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*IAVSDirectoryOperatorRemovedFromOperatorSet, error) { - event := new(IAVSDirectoryOperatorRemovedFromOperatorSet) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { +// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseMagnitudeDeallocationCompleted(log types.Log) (*IAVSDirectoryMagnitudeDeallocationCompleted, error) { + event := new(IAVSDirectoryMagnitudeDeallocationCompleted) + if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryMagnitudeQueueDeallocatedIterator is returned from FilterMagnitudeQueueDeallocated and is used to iterate over the raw logs and unpacked data for MagnitudeQueueDeallocated events raised by the IAVSDirectory contract. +type IAVSDirectoryMagnitudeQueueDeallocatedIterator struct { + Event *IAVSDirectoryMagnitudeQueueDeallocated // 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 *IAVSDirectoryMagnitudeQueueDeallocatedIterator) 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(IAVSDirectoryMagnitudeQueueDeallocated) + 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(IAVSDirectoryMagnitudeQueueDeallocated) + 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 *IAVSDirectoryMagnitudeQueueDeallocatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryMagnitudeQueueDeallocatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryMagnitudeQueueDeallocated represents a MagnitudeQueueDeallocated event raised by the IAVSDirectory contract. +type IAVSDirectoryMagnitudeQueueDeallocated struct { + Operator common.Address + Strategy common.Address + OperatorSet IAVSDirectoryOperatorSet + MagnitudeToDeallocate uint64 + CompletableTimestamp uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMagnitudeQueueDeallocated is a free log retrieval operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. +// +// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterMagnitudeQueueDeallocated(opts *bind.FilterOpts) (*IAVSDirectoryMagnitudeQueueDeallocatedIterator, error) { + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "MagnitudeQueueDeallocated") + if err != nil { + return nil, err + } + return &IAVSDirectoryMagnitudeQueueDeallocatedIterator{contract: _IAVSDirectory.contract, event: "MagnitudeQueueDeallocated", logs: logs, sub: sub}, nil +} + +// WatchMagnitudeQueueDeallocated is a free log subscription operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. +// +// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchMagnitudeQueueDeallocated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryMagnitudeQueueDeallocated) (event.Subscription, error) { + + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "MagnitudeQueueDeallocated") + 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(IAVSDirectoryMagnitudeQueueDeallocated) + if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeQueueDeallocated", 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 +} + +// ParseMagnitudeQueueDeallocated is a log parse operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. +// +// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseMagnitudeQueueDeallocated(log types.Log) (*IAVSDirectoryMagnitudeQueueDeallocated, error) { + event := new(IAVSDirectoryMagnitudeQueueDeallocated) + if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeQueueDeallocated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { + Event *IAVSDirectoryOperatorAVSRegistrationStatusUpdated // 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 *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) 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(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + 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(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + 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 *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorAVSRegistrationStatusUpdated struct { + Operator common.Address + Avs common.Address + Status uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) + if err != nil { + return nil, err + } + return &IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _IAVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, 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(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", 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 +} + +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. +// +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { + event := new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorAddedToOperatorSetIterator struct { + Event *IAVSDirectoryOperatorAddedToOperatorSet // 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 *IAVSDirectoryOperatorAddedToOperatorSetIterator) 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(IAVSDirectoryOperatorAddedToOperatorSet) + 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(IAVSDirectoryOperatorAddedToOperatorSet) + 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 *IAVSDirectoryOperatorAddedToOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryOperatorAddedToOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorAddedToOperatorSet struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + 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 (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*IAVSDirectoryOperatorAddedToOperatorSetIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + if err != nil { + return nil, err + } + return &IAVSDirectoryOperatorAddedToOperatorSetIterator{contract: _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IAVSDirectory.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(IAVSDirectoryOperatorAddedToOperatorSet) + if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*IAVSDirectoryOperatorAddedToOperatorSet, error) { + event := new(IAVSDirectoryOperatorAddedToOperatorSet) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorMigratedToOperatorSetsIterator struct { + Event *IAVSDirectoryOperatorMigratedToOperatorSets // 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 *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) 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(IAVSDirectoryOperatorMigratedToOperatorSets) + 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(IAVSDirectoryOperatorMigratedToOperatorSets) + 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 *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorMigratedToOperatorSets struct { + Operator common.Address + Avs common.Address + OperatorSetIds []uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*IAVSDirectoryOperatorMigratedToOperatorSetsIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) + if err != nil { + return nil, err + } + return &IAVSDirectoryOperatorMigratedToOperatorSetsIterator{contract: _IAVSDirectory.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil +} + +// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, 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(IAVSDirectoryOperatorMigratedToOperatorSets) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", 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 +} + +// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// +// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*IAVSDirectoryOperatorMigratedToOperatorSets, error) { + event := new(IAVSDirectoryOperatorMigratedToOperatorSets) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorRemovedFromOperatorSetIterator struct { + Event *IAVSDirectoryOperatorRemovedFromOperatorSet // 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 *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) 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(IAVSDirectoryOperatorRemovedFromOperatorSet) + 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(IAVSDirectoryOperatorRemovedFromOperatorSet) + 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 *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorRemovedFromOperatorSet struct { + Operator common.Address + OperatorSet IAVSDirectoryOperatorSet + 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 (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*IAVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + if err != nil { + return nil, err + } + return &IAVSDirectoryOperatorRemovedFromOperatorSetIterator{contract: _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _IAVSDirectory.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(IAVSDirectoryOperatorRemovedFromOperatorSet) + if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*IAVSDirectoryOperatorRemovedFromOperatorSet, error) { + event := new(IAVSDirectoryOperatorRemovedFromOperatorSet) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorSetCreatedIterator struct { + Event *IAVSDirectoryOperatorSetCreated // 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 *IAVSDirectoryOperatorSetCreatedIterator) 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(IAVSDirectoryOperatorSetCreated) + 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(IAVSDirectoryOperatorSetCreated) + 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 *IAVSDirectoryOperatorSetCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryOperatorSetCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryOperatorSetCreated represents a OperatorSetCreated event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorSetCreated struct { + OperatorSet IAVSDirectoryOperatorSet + 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 (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*IAVSDirectoryOperatorSetCreatedIterator, error) { + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorSetCreated") + if err != nil { + return nil, err + } + return &IAVSDirectoryOperatorSetCreatedIterator{contract: _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorSetCreated) (event.Subscription, error) { + + logs, sub, err := _IAVSDirectory.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(IAVSDirectoryOperatorSetCreated) + if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorSetCreated(log types.Log) (*IAVSDirectoryOperatorSetCreated, error) { + event := new(IAVSDirectoryOperatorSetCreated) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAVSDirectoryOperatorSlashedIterator is returned from FilterOperatorSlashed and is used to iterate over the raw logs and unpacked data for OperatorSlashed events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorSlashedIterator struct { + Event *IAVSDirectoryOperatorSlashed // 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 *IAVSDirectoryOperatorSlashedIterator) 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(IAVSDirectoryOperatorSlashed) + 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(IAVSDirectoryOperatorSlashed) + 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 *IAVSDirectoryOperatorSlashedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryOperatorSlashedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAVSDirectoryOperatorSlashed represents a OperatorSlashed event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorSlashed struct { + Operator common.Address + OperatorSetId uint32 + Strategy common.Address + BipsToSlash uint16 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSlashed is a free log retrieval operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. +// +// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorSlashed(opts *bind.FilterOpts) (*IAVSDirectoryOperatorSlashedIterator, error) { + + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorSlashed") + if err != nil { + return nil, err + } + return &IAVSDirectoryOperatorSlashedIterator{contract: _IAVSDirectory.contract, event: "OperatorSlashed", logs: logs, sub: sub}, nil +} + +// WatchOperatorSlashed is a free log subscription operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. +// +// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorSlashed(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorSlashed) (event.Subscription, error) { + + logs, sub, err := _IAVSDirectory.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(IAVSDirectoryOperatorSlashed) + if err := _IAVSDirectory.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 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. +// +// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorSlashed(log types.Log) (*IAVSDirectoryOperatorSlashed, error) { + event := new(IAVSDirectoryOperatorSlashed) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorSlashed", log); err != nil { return nil, err } event.Raw = log diff --git a/pkg/bindings/IRewardsCoordinator/binding.go b/pkg/bindings/IRewardsCoordinator/binding.go index 87ae5a84e..f19f93005 100644 --- a/pkg/bindings/IRewardsCoordinator/binding.go +++ b/pkg/bindings/IRewardsCoordinator/binding.go @@ -31,8 +31,8 @@ var ( // IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. type IAVSDirectoryOperatorSet struct { - Avs common.Address - Id uint32 + Avs common.Address + OperatorSetId uint32 } // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. @@ -49,6 +49,17 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } +// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. +type IRewardsCoordinatorOperatorSetRewardsSubmission struct { + RewardType uint8 + OperatorSetId uint32 + StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier + Token common.Address + Amount *big.Int + StartTimestamp uint32 + Duration uint32 +} + // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -83,7 +94,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", + 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", } // IRewardsCoordinatorABI is the input ABI used to generate the binding from. @@ -604,6 +615,37 @@ func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) CurrRewardsCalcula return _IRewardsCoordinator.Contract.CurrRewardsCalculationEndTimestamp(&_IRewardsCoordinator.CallOpts) } +// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. +// +// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) +func (_IRewardsCoordinator *IRewardsCoordinatorCaller) GetCurrentClaimableDistributionRoot(opts *bind.CallOpts) (IRewardsCoordinatorDistributionRoot, error) { + var out []interface{} + err := _IRewardsCoordinator.contract.Call(opts, &out, "getCurrentClaimableDistributionRoot") + + if err != nil { + return *new(IRewardsCoordinatorDistributionRoot), err + } + + out0 := *abi.ConvertType(out[0], new(IRewardsCoordinatorDistributionRoot)).(*IRewardsCoordinatorDistributionRoot) + + return out0, err + +} + +// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. +// +// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) +func (_IRewardsCoordinator *IRewardsCoordinatorSession) GetCurrentClaimableDistributionRoot() (IRewardsCoordinatorDistributionRoot, error) { + return _IRewardsCoordinator.Contract.GetCurrentClaimableDistributionRoot(&_IRewardsCoordinator.CallOpts) +} + +// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. +// +// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) +func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) GetCurrentClaimableDistributionRoot() (IRewardsCoordinatorDistributionRoot, error) { + return _IRewardsCoordinator.Contract.GetCurrentClaimableDistributionRoot(&_IRewardsCoordinator.CallOpts) +} + // GetCurrentDistributionRoot is a free data retrieval call binding the contract method 0x9be3d4e4. // // Solidity: function getCurrentDistributionRoot() view returns((bytes32,uint32,uint32,bool)) @@ -936,6 +978,27 @@ func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) ProcessClaim(c return _IRewardsCoordinator.Contract.ProcessClaim(&_IRewardsCoordinator.TransactOpts, claim, recipient) } +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_IRewardsCoordinator *IRewardsCoordinatorTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _IRewardsCoordinator.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_IRewardsCoordinator *IRewardsCoordinatorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _IRewardsCoordinator.Contract.RewardOperatorSetForRange(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _IRewardsCoordinator.Contract.RewardOperatorSetForRange(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) +} + // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -2141,6 +2204,169 @@ func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseOperatorCommission return event, nil } +// IRewardsCoordinatorOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the IRewardsCoordinator contract. +type IRewardsCoordinatorOperatorSetRewardCreatedIterator struct { + Event *IRewardsCoordinatorOperatorSetRewardCreated // 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 *IRewardsCoordinatorOperatorSetRewardCreatedIterator) 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(IRewardsCoordinatorOperatorSetRewardCreated) + 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(IRewardsCoordinatorOperatorSetRewardCreated) + 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 *IRewardsCoordinatorOperatorSetRewardCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IRewardsCoordinatorOperatorSetRewardCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IRewardsCoordinatorOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the IRewardsCoordinator contract. +type IRewardsCoordinatorOperatorSetRewardCreated struct { + Avs common.Address + SubmissionNonce *big.Int + RewardsSubmissionHash [32]byte + RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*IRewardsCoordinatorOperatorSetRewardCreatedIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _IRewardsCoordinator.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) + if err != nil { + return nil, err + } + return &IRewardsCoordinatorOperatorSetRewardCreatedIterator{contract: _IRewardsCoordinator.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil +} + +// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *IRewardsCoordinatorOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _IRewardsCoordinator.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) + 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(IRewardsCoordinatorOperatorSetRewardCreated) + if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", 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 +} + +// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseOperatorSetRewardCreated(log types.Log) (*IRewardsCoordinatorOperatorSetRewardCreated, error) { + event := new(IRewardsCoordinatorOperatorSetRewardCreated) + if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // IRewardsCoordinatorRewardsClaimedIterator is returned from FilterRewardsClaimed and is used to iterate over the raw logs and unpacked data for RewardsClaimed events raised by the IRewardsCoordinator contract. type IRewardsCoordinatorRewardsClaimedIterator struct { Event *IRewardsCoordinatorRewardsClaimed // Event containing the contract specifics and raw log diff --git a/pkg/bindings/MagnitudeCheckpoints/binding.go b/pkg/bindings/MagnitudeCheckpoints/binding.go new file mode 100644 index 000000000..9a5a2ef52 --- /dev/null +++ b/pkg/bindings/MagnitudeCheckpoints/binding.go @@ -0,0 +1,203 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package MagnitudeCheckpoints + +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 +) + +// MagnitudeCheckpointsMetaData contains all meta data concerning the MagnitudeCheckpoints contract. +var MagnitudeCheckpointsMetaData = &bind.MetaData{ + ABI: "[]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d403c7152d652d1a100c83daf55d72392c025180800bf29f79d386c0af19a05d64736f6c634300080c0033", +} + +// MagnitudeCheckpointsABI is the input ABI used to generate the binding from. +// Deprecated: Use MagnitudeCheckpointsMetaData.ABI instead. +var MagnitudeCheckpointsABI = MagnitudeCheckpointsMetaData.ABI + +// MagnitudeCheckpointsBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use MagnitudeCheckpointsMetaData.Bin instead. +var MagnitudeCheckpointsBin = MagnitudeCheckpointsMetaData.Bin + +// DeployMagnitudeCheckpoints deploys a new Ethereum contract, binding an instance of MagnitudeCheckpoints to it. +func DeployMagnitudeCheckpoints(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *MagnitudeCheckpoints, error) { + parsed, err := MagnitudeCheckpointsMetaData.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(MagnitudeCheckpointsBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &MagnitudeCheckpoints{MagnitudeCheckpointsCaller: MagnitudeCheckpointsCaller{contract: contract}, MagnitudeCheckpointsTransactor: MagnitudeCheckpointsTransactor{contract: contract}, MagnitudeCheckpointsFilterer: MagnitudeCheckpointsFilterer{contract: contract}}, nil +} + +// MagnitudeCheckpoints is an auto generated Go binding around an Ethereum contract. +type MagnitudeCheckpoints struct { + MagnitudeCheckpointsCaller // Read-only binding to the contract + MagnitudeCheckpointsTransactor // Write-only binding to the contract + MagnitudeCheckpointsFilterer // Log filterer for contract events +} + +// MagnitudeCheckpointsCaller is an auto generated read-only Go binding around an Ethereum contract. +type MagnitudeCheckpointsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MagnitudeCheckpointsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type MagnitudeCheckpointsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MagnitudeCheckpointsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type MagnitudeCheckpointsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MagnitudeCheckpointsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type MagnitudeCheckpointsSession struct { + Contract *MagnitudeCheckpoints // 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 +} + +// MagnitudeCheckpointsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type MagnitudeCheckpointsCallerSession struct { + Contract *MagnitudeCheckpointsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// MagnitudeCheckpointsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type MagnitudeCheckpointsTransactorSession struct { + Contract *MagnitudeCheckpointsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// MagnitudeCheckpointsRaw is an auto generated low-level Go binding around an Ethereum contract. +type MagnitudeCheckpointsRaw struct { + Contract *MagnitudeCheckpoints // Generic contract binding to access the raw methods on +} + +// MagnitudeCheckpointsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type MagnitudeCheckpointsCallerRaw struct { + Contract *MagnitudeCheckpointsCaller // Generic read-only contract binding to access the raw methods on +} + +// MagnitudeCheckpointsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type MagnitudeCheckpointsTransactorRaw struct { + Contract *MagnitudeCheckpointsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewMagnitudeCheckpoints creates a new instance of MagnitudeCheckpoints, bound to a specific deployed contract. +func NewMagnitudeCheckpoints(address common.Address, backend bind.ContractBackend) (*MagnitudeCheckpoints, error) { + contract, err := bindMagnitudeCheckpoints(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MagnitudeCheckpoints{MagnitudeCheckpointsCaller: MagnitudeCheckpointsCaller{contract: contract}, MagnitudeCheckpointsTransactor: MagnitudeCheckpointsTransactor{contract: contract}, MagnitudeCheckpointsFilterer: MagnitudeCheckpointsFilterer{contract: contract}}, nil +} + +// NewMagnitudeCheckpointsCaller creates a new read-only instance of MagnitudeCheckpoints, bound to a specific deployed contract. +func NewMagnitudeCheckpointsCaller(address common.Address, caller bind.ContractCaller) (*MagnitudeCheckpointsCaller, error) { + contract, err := bindMagnitudeCheckpoints(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MagnitudeCheckpointsCaller{contract: contract}, nil +} + +// NewMagnitudeCheckpointsTransactor creates a new write-only instance of MagnitudeCheckpoints, bound to a specific deployed contract. +func NewMagnitudeCheckpointsTransactor(address common.Address, transactor bind.ContractTransactor) (*MagnitudeCheckpointsTransactor, error) { + contract, err := bindMagnitudeCheckpoints(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MagnitudeCheckpointsTransactor{contract: contract}, nil +} + +// NewMagnitudeCheckpointsFilterer creates a new log filterer instance of MagnitudeCheckpoints, bound to a specific deployed contract. +func NewMagnitudeCheckpointsFilterer(address common.Address, filterer bind.ContractFilterer) (*MagnitudeCheckpointsFilterer, error) { + contract, err := bindMagnitudeCheckpoints(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MagnitudeCheckpointsFilterer{contract: contract}, nil +} + +// bindMagnitudeCheckpoints binds a generic wrapper to an already deployed contract. +func bindMagnitudeCheckpoints(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MagnitudeCheckpointsMetaData.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 (_MagnitudeCheckpoints *MagnitudeCheckpointsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MagnitudeCheckpoints.Contract.MagnitudeCheckpointsCaller.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 (_MagnitudeCheckpoints *MagnitudeCheckpointsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MagnitudeCheckpoints.Contract.MagnitudeCheckpointsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MagnitudeCheckpoints *MagnitudeCheckpointsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MagnitudeCheckpoints.Contract.MagnitudeCheckpointsTransactor.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 (_MagnitudeCheckpoints *MagnitudeCheckpointsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MagnitudeCheckpoints.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 (_MagnitudeCheckpoints *MagnitudeCheckpointsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MagnitudeCheckpoints.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MagnitudeCheckpoints *MagnitudeCheckpointsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MagnitudeCheckpoints.Contract.contract.Transact(opts, method, params...) +} diff --git a/pkg/bindings/RewardsCoordinator/binding.go b/pkg/bindings/RewardsCoordinator/binding.go index 05cd59c15..4385bf9d6 100644 --- a/pkg/bindings/RewardsCoordinator/binding.go +++ b/pkg/bindings/RewardsCoordinator/binding.go @@ -31,8 +31,8 @@ var ( // IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. type IAVSDirectoryOperatorSet struct { - Avs common.Address - Id uint32 + Avs common.Address + OperatorSetId uint32 } // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. @@ -49,6 +49,17 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } +// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. +type IRewardsCoordinatorOperatorSetRewardsSubmission struct { + RewardType uint8 + OperatorSetId uint32 + StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier + Token common.Address + Amount *big.Int + StartTimestamp uint32 + Duration uint32 +} + // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -83,8 +94,8 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf struct { // RewardsCoordinatorMetaData contains all meta data concerning the RewardsCoordinator contract. var RewardsCoordinatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"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\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162004ac838038062004ac88339810160408190526200003591620002e4565b868686868686866200004885826200037e565b63ffffffff1615620000ed5760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b620000fc62015180866200037e565b63ffffffff16156200019d5760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a401620000e4565b6001600160a01b0396871661012052949095166101405263ffffffff92831660805290821660a052811660c05291821660e0521661010052620001df620001f2565b5050466101605250620003b09350505050565b600054610100900460ff16156200025c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000e4565b60005460ff9081161015620002af576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002c757600080fd5b50565b805163ffffffff81168114620002df57600080fd5b919050565b600080600080600080600060e0888a0312156200030057600080fd5b87516200030d81620002b1565b60208901519097506200032081620002b1565b95506200033060408901620002ca565b94506200034060608901620002ca565b93506200035060808901620002ca565b92506200036060a08901620002ca565b91506200037060c08901620002ca565b905092959891949750929550565b600063ffffffff80841680620003a457634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b60805160a05160c05160e0516101005161012051610140516101605161468162000447600039600061204f0152600081816104f70152612d01015260006107f40152600081816104210152612b3001526000818161034d0152612bdc0152600081816104d00152612adf01526000818161074001526128560152600081816106e60152818161290d01526129e801526146816000f3fe608060405234801561001057600080fd5b506004361061030b5760003560e01c80637adace911161019d578063c46db606116100e9578063f2fde38b116100a2578063f96abf2e1161007c578063f96abf2e14610844578063fabc1cbc14610857578063fbf1e2c11461086a578063fce36c7d1461087d57600080fd5b8063f2fde38b14610816578063f698da2514610829578063f8cd84481461083157600080fd5b8063c46db60614610775578063d4540a55146107a3578063de02e503146107b6578063e221b245146107c9578063e810ce21146107dc578063ea4d3c9b146107ef57600080fd5b80639104c31911610156578063a0169ddd11610130578063a0169ddd14610708578063bb7e451f1461071b578063bf21a8aa1461073b578063c336f19d1461076257600080fd5b80639104c319146106be5780639be3d4e4146106d95780639d45c281146106e157600080fd5b80637adace91146106225780637b8f8b0514610654578063863cb9a91461065c578063865c69531461066f578063886f11951461069a5780638da5cb5b146106ad57600080fd5b80633a8c07861161025c57806358baaa3e116102155780635c975abb116101ef5780635c975abb146105d15780635e9d8348146105d95780636d21117e146105ec578063715018a61461061a57600080fd5b806358baaa3e14610593578063595c6a67146105a65780635ac86ab7146105ae57600080fd5b80633a8c0786146105195780633c8fcf7c146105305780633ccc861d146105435780633efe1db6146105565780634d18cc35146105695780634d7a80d41461058057600080fd5b8063131433b4116102c95780632b9f64a4116102a35780632b9f64a41461047757806336af41fa146104b857806337838ed0146104cb57806339b70e38146104f257600080fd5b8063131433b41461041c578063136439dd14610443578063149bc8721461045657600080fd5b806218572c1461031057806304a0c50214610348578063092db007146103845780630e9a53cf146103ac5780630eb38345146103f457806310d67a2f14610409575b600080fd5b61033361031e366004613b8c565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61036f7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161033f565b60cb5461039990600160e01b900461ffff1681565b60405161ffff909116815260200161033f565b6103b4610890565b604080518251815260208084015163ffffffff9081169183019190915283830151169181019190915260609182015115159181019190915260800161033f565b610407610402366004613bb7565b61096f565b005b610407610417366004613b8c565b6109f1565b61036f7f000000000000000000000000000000000000000000000000000000000000000081565b610407610451366004613bf0565b610aad565b610469610464366004613c21565b610bec565b60405190815260200161033f565b6104a0610485366004613b8c565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161033f565b6104076104c6366004613c3d565b610c62565b61036f7f000000000000000000000000000000000000000000000000000000000000000081565b6104a07f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461036f90600160a01b900463ffffffff1681565b61036f61053e366004613cd8565b610e94565b610407610551366004613d2f565b611125565b610407610564366004613d8a565b6114e7565b60cb5461036f90600160c01b900463ffffffff1681565b61039961058e366004613db6565b6117b8565b6104076105a1366004613df3565b61196a565b61040761197b565b6103336105bc366004613e0e565b606654600160ff9092169190911b9081161490565b606654610469565b6103336105e7366004613e31565b611a42565b6103336105fa366004613e66565b60cf60209081526000928352604080842090915290825290205460ff1681565b610407611acf565b610635610630366004613e92565b611ae3565b6040805161ffff909316835263ffffffff90911660208301520161033f565b60ca54610469565b61040761066a366004613b8c565b611b4b565b61046961067d366004613efd565b60cd60209081526000928352604080842090915290825290205481565b6065546104a0906001600160a01b031681565b6033546001600160a01b03166104a0565b6104a073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103b4611b5c565b61036f7f000000000000000000000000000000000000000000000000000000000000000081565b610407610716366004613b8c565b611bfa565b610469610729366004613b8c565b60ce6020526000908152604090205481565b61036f7f000000000000000000000000000000000000000000000000000000000000000081565b610469610770366004613db6565b611c59565b610333610783366004613e66565b60d060209081526000928352604080842090915290825290205460ff1681565b6104076107b1366004613f2b565b611d0f565b6103b46107c4366004613bf0565b611e57565b6104076107d7366004613f9e565b611ee9565b61036f6107ea366004613bf0565b611efa565b6104a07f000000000000000000000000000000000000000000000000000000000000000081565b610407610824366004613b8c565b611fd5565b61046961204b565b61046961083f366004613c21565b612089565b610407610852366004613df3565b61209a565b610407610865366004613bf0565b6122d0565b60cb546104a0906001600160a01b031681565b61040761088b366004613c3d565b61242c565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b801561096b57600060ca6108cd600184613fcf565b815481106108dd576108dd613fe6565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16158015606083018190529192509061094d5750806040015163ffffffff164210155b156109585792915050565b508061096381613ffc565b9150506108b8565b5090565b6109776125a3565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a689190614013565b6001600160a01b0316336001600160a01b031614610aa15760405162461bcd60e51b8152600401610a9890614030565b60405180910390fd5b610aaa816125fd565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b19919061407a565b610b355760405162461bcd60e51b8152600401610a9890614097565b60665481811614610bae5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610a98565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610bfc6020840184613b8c565b8360200135604051602001610c459392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460019060029081161415610c8b5760405162461bcd60e51b8152600401610a98906140df565b33600090815260d1602052604090205460ff16610d2a5760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a401610a98565b60026097541415610d4d5760405162461bcd60e51b8152600401610a9890614116565b600260975560005b82811015610e895736848483818110610d7057610d70613fe6565b9050602002810190610d82919061414d565b33600081815260ce60209081526040808320549051949550939192610dad9290918591879101614292565b604051602081830303815290604052805190602001209050610dce836126f4565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610e019083906142c2565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610e499088906142da565b60405180910390a4610e7b333060408601803590610e6a9060208901613b8c565b6001600160a01b0316929190612ecc565b836001019350505050610d55565b505060016097555050565b600061271061ffff83161115610f205760405162461bcd60e51b815260206004820152604560248201527f52657761726473436f6f7264696e61746f722e7365744f70657261746f72436f60448201527f6d6d697373696f6e426970733a20636f6d6d697373696f6e4269707320746f6f606482015264040d0d2ced60db1b608482015260a401610a98565b610f2d62093a80426142c2565b33600090815260d26020908152604082209293509091908290610f5290880188613b8c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866020016020810190610f879190613df3565b63ffffffff1663ffffffff1681526020019081526020016000206000856001811115610fb557610fb56142ed565b6001811115610fc657610fc66142ed565b815260208101919091526040016000208054909150801580611021575063ffffffff831682610ff6600184613fcf565b8154811061100657611006613fe6565b60009182526020909120015462010000900463ffffffff1614155b15611084576040805180820190915261ffff808616825263ffffffff808616602080850191825286546001810188556000888152919091209451940180549151909216620100000265ffffffffffff1990911693909216929092171790556110c1565b8382611091600184613fcf565b815481106110a1576110a1613fe6565b6000918252602090912001805461ffff191661ffff929092169190911790555b856040516110cf9190614303565b6040518091039020336001600160a01b03167f811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba8787876040516111149392919061433b565b60405180910390a350509392505050565b6066546002906004908116141561114e5760405162461bcd60e51b8152600401610a98906140df565b600260975414156111715760405162461bcd60e51b8152600401610a9890614116565b6002609755600060ca6111876020860186613df3565b63ffffffff168154811061119d5761119d613fe6565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015290506111fe8482612f3d565b60006112106080860160608701613b8c565b6001600160a01b03808216600090815260cc602052604090205491925016806112365750805b336001600160a01b038216146112b45760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d6572000000006064820152608401610a98565b60005b6112c460a088018861437b565b90508110156114d957366112db60e08901896143cc565b838181106112eb576112eb613fe6565b6001600160a01b038716600090815260cd60209081526040808320930294909401945092909150829061132090850185613b8c565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050808260200135116113da5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a401610a98565b60006113ea826020850135613fcf565b6001600160a01b038716600090815260cd602090815260408220929350850180359291906114189087613b8c565b6001600160a01b031681526020808201929092526040016000209190915561145a908a90839061144a90870187613b8c565b6001600160a01b03169190613209565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061149e6020890189613b8c565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050806114d290614416565b90506112b7565b505060016097555050505050565b606654600390600890811614156115105760405162461bcd60e51b8152600401610a98906140df565b60cb546001600160a01b0316331461153a5760405162461bcd60e51b8152600401610a9890614431565b60cb5463ffffffff600160c01b9091048116908316116115d65760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a401610a98565b428263ffffffff161061166f5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a401610a98565b60ca5460cb5460009061168f90600160a01b900463ffffffff1642614485565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60cb546001600160a01b038416600090815260d26020908152604082209192600160e01b900461ffff1691839182906117f390880188613b8c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008660200160208101906118289190613df3565b63ffffffff1663ffffffff1681526020019081526020016000206000856001811115611856576118566142ed565b6001811115611867576118676142ed565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156118db576000848152602090819020604080518082019091529084015461ffff8116825262010000900463ffffffff1681830152825260019092019101611895565b5050825192935050505b801561195d5763ffffffff4216826118fe600184613fcf565b8151811061190e5761190e613fe6565b60200260200101516020015163ffffffff16116119545781611931600183613fcf565b8151811061194157611941613fe6565b602002602001015160000151925061195d565b600019016118e5565b50909150505b9392505050565b6119726125a3565b610aaa81613239565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e7919061407a565b611a035760405162461bcd60e51b8152600401610a9890614097565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000611ac78260ca611a576020830183613df3565b63ffffffff1681548110611a6d57611a6d613fe6565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612f3d565b506001919050565b611ad76125a3565b611ae160006132aa565b565b60d26020528460005260406000206020528360005260406000206020528260005260406000206020528160005260406000208181548110611b2357600080fd5b60009182526020909120015461ffff8116955062010000900463ffffffff1693508592505050565b611b536125a3565b610aaa816132fc565b60408051608081018252600080825260208201819052918101829052606081019190915260ca8054611b9090600190613fcf565b81548110611ba057611ba0613fe6565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b6001600160a01b038316600090815260d2602090815260408220908290611c8290860186613b8c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000846020016020810190611cb79190613df3565b63ffffffff1663ffffffff1681526020019081526020016000206000836001811115611ce557611ce56142ed565b6001811115611cf657611cf66142ed565b8152602081019190915260400160002054949350505050565b600054610100900460ff1615808015611d2f5750600054600160ff909116105b80611d495750303b158015611d49575060005460ff166001145b611dac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a98565b6000805460ff191660011790558015611dcf576000805461ff0019166101001790555b611dd7613358565b60c955611de486866133ef565b611ded876132aa565b611df6846132fc565b611dff83613239565b611e08826134d9565b8015611e4e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca8281548110611e8e57611e8e613fe6565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b611ef16125a3565b610aaa816134d9565b60ca546000905b63ffffffff811615611f66578260ca611f1b6001846144ad565b63ffffffff1681548110611f3157611f31613fe6565b9060005260206000209060020201600001541415611f54576119636001826144ad565b80611f5e816144d2565b915050611f01565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e640000000000000000006064820152608401610a98565b611fdd6125a3565b6001600160a01b0381166120425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a98565b610aaa816132aa565b60007f000000000000000000000000000000000000000000000000000000000000000046141561207c575060c95490565b612084613358565b905090565b60006001610bfc6020840184613b8c565b606654600390600890811614156120c35760405162461bcd60e51b8152600401610a98906140df565b60cb546001600160a01b031633146120ed5760405162461bcd60e51b8152600401610a9890614431565b60ca5463ffffffff83161061215e5760405162461bcd60e51b815260206004820152603160248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152700d2dcecc2d8d2c840e4dedee892dcc8caf607b1b6064820152608401610a98565b600060ca8363ffffffff168154811061217957612179613fe6565b906000526020600020906002020190508060010160089054906101000a900460ff16156122065760405162461bcd60e51b815260206004820152603560248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152741c9bdbdd08185b1c9958591e48191a5cd8589b1959605a1b6064820152608401610a98565b6001810154600160201b900463ffffffff1642106122855760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152751c9bdbdd08185b1c9958591e481858dd1a5d985d195960521b6064820152608401610a98565b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123479190614013565b6001600160a01b0316336001600160a01b0316146123775760405162461bcd60e51b8152600401610a9890614030565b6066541981196066541916146123f55760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610a98565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610be1565b606654600090600190811614156124555760405162461bcd60e51b8152600401610a98906140df565b600260975414156124785760405162461bcd60e51b8152600401610a9890614116565b600260975560005b82811015610e89573684848381811061249b5761249b613fe6565b90506020028101906124ad919061414d565b33600081815260ce602090815260408083205490519495509391926124d89290918591879101614292565b6040516020818303038152906040528051906020012090506124f9836126f4565b33600090815260cf602090815260408083208484529091529020805460ff1916600190811790915561252c9083906142c2565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906125749088906142da565b60405180910390a4612595333060408601803590610e6a9060208901613b8c565b836001019350505050612480565b6033546001600160a01b03163314611ae15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a98565b6001600160a01b03811661268b5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610a98565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b600061270082806143cc565b905011612765576040805162461bcd60e51b815260206004820152602481019190915260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a206e6f2073747261746567696573207365746064820152608401610a98565b60008160400135116127d75760405162461bcd60e51b8152602060048201526041602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a401610a98565b6f4b3b4ca85a86c47a098a223fffffffff8160400135111561284f5760405162461bcd60e51b815260206004820152603f602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c61726765006064820152608401610a98565b63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001661288660a0830160808401613df3565b63ffffffff16111561290b5760405162461bcd60e51b8152602060048201526054602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a401610a98565b7f000000000000000000000000000000000000000000000000000000000000000061293c60a0830160808401613df3565b6129469190614508565b63ffffffff16156129e65760405162461bcd60e51b815260206004820152606a602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c401610a98565b7f0000000000000000000000000000000000000000000000000000000000000000612a176080830160608401613df3565b612a219190614508565b63ffffffff1615612ac75760405162461bcd60e51b8152602060048201526070602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c401610a98565b612ad76080820160608301613df3565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1642612b0f9190613fcf565b11158015612b585750612b286080820160608301613df3565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b612bd25760405162461bcd60e51b8152602060048201526051602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a401610a98565b612c0263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016426142c2565b612c126080830160608401613df3565b63ffffffff161115612c965760405162461bcd60e51b8152602060048201526053602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a401610a98565b6000805b612ca483806143cc565b9050811015612ec7576000612cb984806143cc565b83818110612cc957612cc9613fe6565b612cdf9260206040909202019081019150613b8c565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015612d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6e919061407a565b80612d9557506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b612e085760405162461bcd60e51b815260206004820152604a602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a401610a98565b806001600160a01b0316836001600160a01b031610612eb55760405162461bcd60e51b8152602060048201526069602482015260008051602061462c83398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c401610a98565b9150612ec081614416565b9050612c9a565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052612f379085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613544565b50505050565b806060015115612f965760405162461bcd60e51b8152602060048201526030602482015260008051602061460c83398151915260448201526f1c9bdbdd081a5cc8191a5cd8589b195960821b6064820152608401610a98565b806040015163ffffffff16421015612ffd5760405162461bcd60e51b8152602060048201526036602482015260008051602061460c8339815191526044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b6064820152608401610a98565b61300a60c083018361437b565b905061301960a084018461437b565b9050146130915760405162461bcd60e51b815260206004820152604c602482015260008051602061460c83398151915260448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a401610a98565b61309e60e08301836143cc565b90506130ad60c084018461437b565b9050146131235760405162461bcd60e51b815260206004820152604a602482015260008051602061460c83398151915260448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610a98565b805161314f906131396040850160208601613df3565b613146604086018661452b565b86606001613616565b60005b61315f60a084018461437b565b9050811015612ec7576131f9608084013561317d60a086018661437b565b8481811061318d5761318d613fe6565b90506020020160208101906131a29190613df3565b6131af60c087018761437b565b858181106131bf576131bf613fe6565b90506020028101906131d1919061452b565b6131de60e08901896143cc565b878181106131ee576131ee613fe6565b90506040020161378a565b61320281614416565b9050613152565b6040516001600160a01b038316602482015260448101829052612ec790849063a9059cbb60e01b90606401612f00565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b031615801561341057506001600160a01b03821615155b6134925760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610a98565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26134d5826125fd565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b6000613599826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138db9092919063ffffffff16565b805190915015612ec757808060200190518101906135b7919061407a565b612ec75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a98565b613621602083614572565b6001901b8463ffffffff16106136ab5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a401610a98565b60006136b682610bec565b905061370184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff89166138f2565b6137825760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a401610a98565b505050505050565b613795602083614572565b6001901b8463ffffffff16106138135760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e646578000000006064820152608401610a98565b600061381e82612089565b905061386984848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff89166138f2565b6137825760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f66006064820152608401610a98565b60606138ea848460008561390a565b949350505050565b600083613900868585613a3b565b1495945050505050565b60608247101561396b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a98565b6001600160a01b0385163b6139c25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a98565b600080866001600160a01b031685876040516139de91906145b2565b60006040518083038185875af1925050503d8060008114613a1b576040519150601f19603f3d011682016040523d82523d6000602084013e613a20565b606091505b5091509150613a30828286613b3e565b979650505050505050565b600060208451613a4b91906145c4565b15613ad25760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610a98565b8260205b85518111613b3557613ae96002856145c4565b613b0a57816000528086015160205260406000209150600284049350613b23565b8086015160005281602052604060002091506002840493505b613b2e6020826142c2565b9050613ad6565b50949350505050565b60608315613b4d575081611963565b825115613b5d5782518084602001fd5b8160405162461bcd60e51b8152600401610a9891906145d8565b6001600160a01b0381168114610aaa57600080fd5b600060208284031215613b9e57600080fd5b813561196381613b77565b8015158114610aaa57600080fd5b60008060408385031215613bca57600080fd5b8235613bd581613b77565b91506020830135613be581613ba9565b809150509250929050565b600060208284031215613c0257600080fd5b5035919050565b600060408284031215613c1b57600080fd5b50919050565b600060408284031215613c3357600080fd5b6119638383613c09565b60008060208385031215613c5057600080fd5b823567ffffffffffffffff80821115613c6857600080fd5b818501915085601f830112613c7c57600080fd5b813581811115613c8b57600080fd5b8660208260051b8501011115613ca057600080fd5b60209290920196919550909350505050565b803560028110613cc157600080fd5b919050565b803561ffff81168114613cc157600080fd5b600080600060808486031215613ced57600080fd5b613cf78585613c09565b9250613d0560408501613cb2565b9150613d1360608501613cc6565b90509250925092565b60006101008284031215613c1b57600080fd5b60008060408385031215613d4257600080fd5b823567ffffffffffffffff811115613d5957600080fd5b613d6585828601613d1c565b9250506020830135613be581613b77565b803563ffffffff81168114613cc157600080fd5b60008060408385031215613d9d57600080fd5b82359150613dad60208401613d76565b90509250929050565b600080600060808486031215613dcb57600080fd5b8335613dd681613b77565b9250613de58560208601613c09565b9150613d1360608501613cb2565b600060208284031215613e0557600080fd5b61196382613d76565b600060208284031215613e2057600080fd5b813560ff8116811461196357600080fd5b600060208284031215613e4357600080fd5b813567ffffffffffffffff811115613e5a57600080fd5b6138ea84828501613d1c565b60008060408385031215613e7957600080fd5b8235613e8481613b77565b946020939093013593505050565b600080600080600060a08688031215613eaa57600080fd5b8535613eb581613b77565b94506020860135613ec581613b77565b9350613ed360408701613d76565b9250613ee160608701613cb2565b949793965091946080013592915050565b8035613cc181613b77565b60008060408385031215613f1057600080fd5b8235613f1b81613b77565b91506020830135613be581613b77565b60008060008060008060c08789031215613f4457600080fd5b8635613f4f81613b77565b95506020870135613f5f81613b77565b9450604087013593506060870135613f7681613b77565b9250613f8460808801613d76565b9150613f9260a08801613cc6565b90509295509295509295565b600060208284031215613fb057600080fd5b61196382613cc6565b634e487b7160e01b600052601160045260246000fd5b600082821015613fe157613fe1613fb9565b500390565b634e487b7160e01b600052603260045260246000fd5b60008161400b5761400b613fb9565b506000190190565b60006020828403121561402557600080fd5b815161196381613b77565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561408c57600080fd5b815161196381613ba9565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008235609e1983360301811261416357600080fd5b9190910192915050565b818352600060208085019450826000805b868110156141d257823561419181613b77565b6001600160a01b03168852828401356bffffffffffffffffffffffff81168082146141ba578384fd5b8986015250604097880197929092019160010161417e565b50959695505050505050565b60008135601e198336030181126141f457600080fd5b8201803567ffffffffffffffff81111561420d57600080fd5b8060061b360384131561421f57600080fd5b60a0855261423460a08601826020850161416d565b91505061424360208401613ef2565b6001600160a01b031660208501526040838101359085015261426760608401613d76565b63ffffffff16606085015261427e60808401613d76565b63ffffffff81166080860152509392505050565b60018060a01b03841681528260208201526060604082015260006142b960608301846141de565b95945050505050565b600082198211156142d5576142d5613fb9565b500190565b60208152600061196360208301846141de565b634e487b7160e01b600052602160045260246000fd5b6000823561431081613b77565b6001600160a01b0316825263ffffffff61432c60208501613d76565b16602083015250604001919050565b606081016002851061435d57634e487b7160e01b600052602160045260246000fd5b93815261ffff92909216602083015263ffffffff1660409091015290565b6000808335601e1984360301811261439257600080fd5b83018035915067ffffffffffffffff8211156143ad57600080fd5b6020019150600581901b36038213156143c557600080fd5b9250929050565b6000808335601e198436030181126143e357600080fd5b83018035915067ffffffffffffffff8211156143fe57600080fd5b6020019150600681901b36038213156143c557600080fd5b600060001982141561442a5761442a613fb9565b5060010190565b60208082526034908201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6040820152733a103a3432903932bbb0b93239aab83230ba32b960611b606082015260800190565b600063ffffffff8083168185168083038211156144a4576144a4613fb9565b01949350505050565b600063ffffffff838116908316818110156144ca576144ca613fb9565b039392505050565b600063ffffffff8216806144e8576144e8613fb9565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff8084168061451f5761451f6144f2565b92169190910692915050565b6000808335601e1984360301811261454257600080fd5b83018035915067ffffffffffffffff82111561455d57600080fd5b6020019150368190038213156143c557600080fd5b600082614581576145816144f2565b500490565b60005b838110156145a1578181015183820152602001614589565b83811115612f375750506000910152565b60008251614163818460208701614586565b6000826145d3576145d36144f2565b500690565b60208152600082518060208401526145f7816040850160208701614586565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2052657761726473436f6f7264696e61746f722e5f76616c696461746552657761a2646970667358221220d7afccc0db13e91ca036bb96c0a4c5201c43a88dd680365dbaef13011707d7b064736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"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\":\"_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", + Bin: "0x6101e06040523480156200001257600080fd5b506040516200511f3803806200511f8339810160408190526200003591620003c0565b898989898989898989896200004b878462000497565b63ffffffff1615620000f05760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b620000ff620151808862000497565b63ffffffff1615620001a05760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a401620000e7565b620001ac878362000497565b63ffffffff1615620002635760405162461bcd60e51b815260206004820152606d60248201527f52657761726473436f6f7264696e61746f723a204f50455241544f525f53455460448201527f5f47454e455349535f524557415244535f54494d455354414d50206d7573742060648201527f62652061206d756c7469706c65206f662043414c43554c4154494f4e5f494e5460848201526c455256414c5f5345434f4e445360981b60a482015260c401620000e7565b6001600160a01b03998a166101605297891661018052959097166101a05263ffffffff93841660805291831660a052821661010052811660c05292831660e0528216610120521661014052620002b8620002ce565b5050466101c05250620004c99650505050505050565b600054610100900460ff1615620003385760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000e7565b60005460ff90811610156200038b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620003a357600080fd5b50565b805163ffffffff81168114620003bb57600080fd5b919050565b6000806000806000806000806000806101408b8d031215620003e157600080fd5b8a51620003ee816200038d565b60208c0151909a5062000401816200038d565b60408c015190995062000414816200038d565b97506200042460608c01620003a6565b96506200043460808c01620003a6565b95506200044460a08c01620003a6565b94506200045460c08c01620003a6565b93506200046460e08c01620003a6565b9250620004756101008c01620003a6565b9150620004866101208c01620003a6565b90509295989b9194979a5092959850565b600063ffffffff80841680620004bd57634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614b896200059660003960006124e80152600081816106970152610e1c01526000818161059d01526130d9015260006108e801526000818161053c0152610f930152600081816108750152610fb4015260008181610576015261124701526000818161048d01526112680152600081816103b90152612fd601526000818161080d0152612cda0152600081816107b301528181612d8a0152612e540152614b896000f3fe608060405234801561001057600080fd5b50600436106103775760003560e01c8063715018a6116101d3578063c46db60611610104578063f2fde38b116100a2578063f96abf2e1161007c578063f96abf2e14610938578063fabc1cbc1461094b578063fbf1e2c11461095e578063fce36c7d1461097157600080fd5b8063f2fde38b1461090a578063f698da251461091d578063f8cd84481461092557600080fd5b8063de02e503116100de578063de02e503146108aa578063e221b245146108bd578063e810ce21146108d0578063ea4d3c9b146108e357600080fd5b8063c46db60614610842578063d11e9ae514610870578063d4540a551461089757600080fd5b80639104c31911610171578063a0169ddd1161014b578063a0169ddd146107d5578063bb7e451f146107e8578063bf21a8aa14610808578063c336f19d1461082f57600080fd5b80639104c3191461078b5780639be3d4e4146107a65780639d45c281146107ae57600080fd5b8063863cb9a9116101ad578063863cb9a914610729578063865c69531461073c578063886f1195146107675780638da5cb5b1461077a57600080fd5b8063715018a6146106e75780637adace91146106ef5780637b8f8b051461072157600080fd5b806339b70e38116102ad57806358baaa3e1161024b5780635c975abb116102255780635c975abb146106775780635e9d83481461067f5780636b3aa72e146106925780636d21117e146106b957600080fd5b806358baaa3e14610639578063595c6a671461064c5780635ac86ab71461065457600080fd5b80633ccc861d116102875780633ccc861d146105e95780633efe1db6146105fc5780634d18cc351461060f5780634d7a80d41461062657600080fd5b806339b70e38146105985780633a8c0786146105bf5780633c8fcf7c146105d657600080fd5b8063136439dd1161031a5780632c9c60cf116102f45780632c9c60cf146105245780633486e32e1461053757806336af41fa1461055e57806337838ed01461057157600080fd5b8063136439dd146104af578063149bc872146104c25780632b9f64a4146104e357600080fd5b80630e9a53cf116103565780630e9a53cf146104185780630eb383451461046057806310d67a2f14610475578063131433b41461048857600080fd5b806218572c1461037c57806304a0c502146103b4578063092db007146103f0575b600080fd5b61039f61038a366004613f70565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103ab565b60cb5461040590600160e01b900461ffff1681565b60405161ffff90911681526020016103ab565b610420610984565b604080518251815260208084015163ffffffff908116918301919091528383015116918101919091526060918201511515918101919091526080016103ab565b61047361046e366004613f9b565b610a63565b005b610473610483366004613f70565b610ae5565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736104bd366004613fd4565b610ba1565b6104d56104d0366004614005565b610ce0565b6040519081526020016103ab565b61050c6104f1366004613f70565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103ab565b61047361053236600461406d565b610d56565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61047361056c36600461406d565b61109e565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b60cb546103db90600160a01b900463ffffffff1681565b6103db6105e43660046140d5565b611336565b6104736105f736600461412c565b6115c4565b61047361060a366004614187565b611986565b60cb546103db90600160c01b900463ffffffff1681565b6104056106343660046141b3565b611c57565b6104736106473660046141f0565b611e06565b610473611e17565b61039f61066236600461420b565b606654600160ff9092169190911b9081161490565b6066546104d5565b61039f61068d36600461422e565b611ede565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b61039f6106c7366004614263565b60cf60209081526000928352604080842090915290825290205460ff1681565b610473611f6b565b6107026106fd36600461428f565b611f7f565b6040805161ffff909316835263ffffffff9091166020830152016103ab565b60ca546104d5565b610473610737366004613f70565b611fe7565b6104d561074a3660046142ef565b60cd60209081526000928352604080842090915290825290205481565b60655461050c906001600160a01b031681565b6033546001600160a01b031661050c565b61050c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610420611ff8565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736107e3366004613f70565b612096565b6104d56107f6366004613f70565b60ce6020526000908152604090205481565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104d561083d3660046141b3565b6120f5565b61039f610850366004614263565b60d060209081526000928352604080842090915290825290205460ff1681565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736108a536600461431d565b6121a8565b6104206108b8366004613fd4565b6122f0565b6104736108cb366004614390565b612382565b6103db6108de366004613fd4565b612393565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b610473610918366004613f70565b61246e565b6104d56124e4565b6104d5610933366004614005565b612522565b6104736109463660046141f0565b612533565b610473610959366004613fd4565b612769565b60cb5461050c906001600160a01b031681565b61047361097f36600461406d565b6128c5565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b8015610a5f57600060ca6109c16001846143c1565b815481106109d1576109d16143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610a415750806040015163ffffffff164210155b15610a4c5792915050565b5080610a57816143ee565b9150506109ac565b5090565b610a6b612a42565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5c9190614405565b6001600160a01b0316336001600160a01b031614610b955760405162461bcd60e51b8152600401610b8c90614422565b60405180910390fd5b610b9e81612a9c565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d919061446c565b610c295760405162461bcd60e51b8152600401610b8c90614489565b60665481811614610ca25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610cf06020840184613f70565b8360200135604051602001610d399392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460049060109081161415610d7f5760405162461bcd60e51b8152600401610b8c906144d1565b60026097541415610da25760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110610dc557610dc56143d8565b9050602002810190610dd7919061453f565b33600081815260ce60209081526040808320549051949550939192610e0292909185918791016146fc565b6040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166384d76f7b33856020016020810190610e5d91906141f0565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff166024820152604401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed0919061446c565b610f4c5760405162461bcd60e51b815260206004820152604160248201527f52657761726473436f6f7264696e61746f722e7265776172644f70657261746f60448201527f72536574466f7252616e67653a20696e76616c6964206f70657261746f7253656064820152601d60fa1b608482015260a401610b8c565b610fd8610f5c604085018561472c565b610f6c6080870160608801613f70565b6080870135610f8160c0890160a08a016141f0565b610f9160e08a0160c08b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260cf602090815260408083208484529091529020805460ff1916600190811790915561100b908390614776565b33600081815260ce602052604090819020929092559051829184917f29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b29061105390889061478e565b60405180910390a46110853330608086018035906110749060608901613f70565b6001600160a01b03169291906132ab565b836001019350505050610daa565b505060016097555050565b606654600190600290811614156110c75760405162461bcd60e51b8152600401610b8c906144d1565b33600090815260d1602052604090205460ff166111665760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a401610b8c565b600260975414156111895760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b8281101561109357368484838181106111ac576111ac6143d8565b90506020028101906111be91906147a1565b33600081815260ce602090815260408083205490519495509391926111e99290918591879101614836565b60408051601f198184030181529190528051602090910120905061128c611210848061472c565b6112206040870160208801613f70565b60408701356112356080890160608a016141f0565b61124560a08a0160808b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260d0602090815260408083208484529091529020805460ff191660019081179091556112bf908390614776565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf2704829061130790889061485d565b60405180910390a46113283330604086018035906110749060208901613f70565b836001019350505050611191565b600061271061ffff831611156113c25760405162461bcd60e51b815260206004820152604560248201527f52657761726473436f6f7264696e61746f722e7365744f70657261746f72436f60448201527f6d6d697373696f6e426970733a20636f6d6d697373696f6e4269707320746f6f606482015264040d0d2ced60db1b608482015260a401610b8c565b6113cf62093a8042614776565b33600090815260d360209081526040822092935090919082906113f490880188613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600086602001602081019061142991906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008560008111156114575761145761455f565b80156114655761146561455f565b8152602081019190915260400160002080549091508015806114c0575063ffffffff8316826114956001846143c1565b815481106114a5576114a56143d8565b60009182526020909120015462010000900463ffffffff1614155b15611523576040805180820190915261ffff808616825263ffffffff808616602080850191825286546001810188556000888152919091209451940180549151909216620100000265ffffffffffff199091169390921692909217179055611560565b83826115306001846143c1565b81548110611540576115406143d8565b6000918252602090912001805461ffff191661ffff929092169190911790555b8560405161156e9190614870565b6040518091039020336001600160a01b03167f811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba8787876040516115b3939291906148a8565b60405180910390a350509392505050565b606654600290600490811614156115ed5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156116105760405162461bcd60e51b8152600401610b8c90614508565b6002609755600060ca61162660208601866141f0565b63ffffffff168154811061163c5761163c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152905061169d848261331c565b60006116af6080860160608701613f70565b6001600160a01b03808216600090815260cc602052604090205491925016806116d55750805b336001600160a01b038216146117535760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d6572000000006064820152608401610b8c565b60005b61176360a08801886148d4565b9050811015611978573661177a60e089018961472c565b8381811061178a5761178a6143d8565b6001600160a01b038716600090815260cd6020908152604080832093029490940194509290915082906117bf90850185613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050808260200135116118795760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a401610b8c565b60006118898260208501356143c1565b6001600160a01b038716600090815260cd602090815260408220929350850180359291906118b79087613f70565b6001600160a01b03168152602080820192909252604001600020919091556118f9908a9083906118e990870187613f70565b6001600160a01b031691906135ed565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061193d6020890189613f70565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050806119719061491e565b9050611756565b505060016097555050505050565b606654600390600890811614156119af5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146119d95760405162461bcd60e51b8152600401610b8c90614939565b60cb5463ffffffff600160c01b909104811690831611611a755760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a401610b8c565b428263ffffffff1610611b0e5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a401610b8c565b60ca5460cb54600090611b2e90600160a01b900463ffffffff164261498d565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60cb546001600160a01b038416600090815260d36020908152604082209192600160e01b900461ffff169183918290611c9290880188613f70565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866020016020810190611cc791906141f0565b63ffffffff1663ffffffff1681526020019081526020016000206000856000811115611cf557611cf561455f565b8015611d0357611d0361455f565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611d77576000848152602090819020604080518082019091529084015461ffff8116825262010000900463ffffffff1681830152825260019092019101611d31565b5050825192935050505b8015611df95763ffffffff421682611d9a6001846143c1565b81518110611daa57611daa6143d8565b60200260200101516020015163ffffffff1611611df05781611dcd6001836143c1565b81518110611ddd57611ddd6143d8565b6020026020010151600001519250611df9565b60001901611d81565b50909150505b9392505050565b611e0e612a42565b610b9e8161361d565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e83919061446c565b611e9f5760405162461bcd60e51b8152600401610b8c90614489565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000611f638260ca611ef360208301836141f0565b63ffffffff1681548110611f0957611f096143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015261331c565b506001919050565b611f73612a42565b611f7d600061368e565b565b60d36020528460005260406000206020528360005260406000206020528260005260406000206020528160005260406000208181548110611fbf57600080fd5b60009182526020909120015461ffff8116955062010000900463ffffffff1693508592505050565b611fef612a42565b610b9e816136e0565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461202c906001906143c1565b8154811061203c5761203c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b6001600160a01b038316600090815260d360209081526040822090829061211e90860186613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600084602001602081019061215391906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008360008111156121815761218161455f565b801561218f5761218f61455f565b8152602081019190915260400160002054949350505050565b600054610100900460ff16158080156121c85750600054600160ff909116105b806121e25750303b1580156121e2575060005460ff166001145b6122455760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b8c565b6000805460ff191660011790558015612268576000805461ff0019166101001790555b61227061373c565b60c95561227d86866137d3565b6122868761368e565b61228f846136e0565b6122988361361d565b6122a1826138bd565b80156122e7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca8281548110612327576123276143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b61238a612a42565b610b9e816138bd565b60ca546000905b63ffffffff8116156123ff578260ca6123b46001846149b5565b63ffffffff16815481106123ca576123ca6143d8565b90600052602060002090600202016000015414156123ed57611dff6001826149b5565b806123f7816149da565b91505061239a565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e640000000000000000006064820152608401610b8c565b612476612a42565b6001600160a01b0381166124db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8c565b610b9e8161368e565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612515575060c95490565b61251d61373c565b905090565b60006001610cf06020840184613f70565b6066546003906008908116141561255c5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146125865760405162461bcd60e51b8152600401610b8c90614939565b60ca5463ffffffff8316106125f75760405162461bcd60e51b815260206004820152603160248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152700d2dcecc2d8d2c840e4dedee892dcc8caf607b1b6064820152608401610b8c565b600060ca8363ffffffff1681548110612612576126126143d8565b906000526020600020906002020190508060010160089054906101000a900460ff161561269f5760405162461bcd60e51b815260206004820152603560248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152741c9bdbdd08185b1c9958591e48191a5cd8589b1959605a1b6064820152608401610b8c565b6001810154600160201b900463ffffffff16421061271e5760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152751c9bdbdd08185b1c9958591e481858dd1a5d985d195960521b6064820152608401610b8c565b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190614405565b6001600160a01b0316336001600160a01b0316146128105760405162461bcd60e51b8152600401610b8c90614422565b60665419811960665419161461288e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610cd5565b606654600090600190811614156128ee5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156129115760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110612934576129346143d8565b905060200281019061294691906147a1565b33600081815260ce602090815260408083205490519495509391926129719290918591879101614836565b60408051601f1981840301815291905280516020909101209050612998611210848061472c565b33600090815260cf602090815260408083208484529091529020805460ff191660019081179091556129cb908390614776565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190612a1390889061485d565b60405180910390a4612a343330604086018035906110749060208901613f70565b836001019350505050612919565b6033546001600160a01b03163314611f7d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b8c565b6001600160a01b038116612b2a5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b8c565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b86612bf6576040805162461bcd60e51b8152602060048201526024810191909152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206e6f2073747261746567696573207365746064820152608401610b8c565b60008511612c645760405162461bcd60e51b81526020600482015260416024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a401610b8c565b6f4b3b4ca85a86c47a098a223fffffffff851115612cd85760405162461bcd60e51b815260206004820152603f6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c61726765006064820152608401610b8c565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168363ffffffff161115612d855760405162461bcd60e51b81526020600482015260546024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a401610b8c565b612daf7f000000000000000000000000000000000000000000000000000000000000000084614a10565b63ffffffff1615612e4f5760405162461bcd60e51b815260206004820152606a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c401610b8c565b612e797f000000000000000000000000000000000000000000000000000000000000000085614a10565b63ffffffff1615612f1f5760405162461bcd60e51b81526020600482015260706024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c401610b8c565b8363ffffffff168263ffffffff1642612f3891906143c1565b11158015612f5257508363ffffffff168163ffffffff1611155b612fcc5760405162461bcd60e51b81526020600482015260516024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a401610b8c565b612ffc63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001642614776565b8463ffffffff1611156130815760405162461bcd60e51b81526020600482015260536024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a401610b8c565b6000805b8881101561329f5760008a8a838181106130a1576130a16143d8565b6130b79260206040909202019081019150613f70565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015613122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613146919061446c565b8061316d57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b6131e05760405162461bcd60e51b815260206004820152604a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a401610b8c565b806001600160a01b0316836001600160a01b03161061328d5760405162461bcd60e51b81526020600482015260696024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c401610b8c565b91506132988161491e565b9050613085565b50505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526133169085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613928565b50505050565b8060600151156133755760405162461bcd60e51b81526020600482015260306024820152600080516020614b1483398151915260448201526f1c9bdbdd081a5cc8191a5cd8589b195960821b6064820152608401610b8c565b806040015163ffffffff164210156133dc5760405162461bcd60e51b81526020600482015260366024820152600080516020614b148339815191526044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b6064820152608401610b8c565b6133e960c08301836148d4565b90506133f860a08401846148d4565b9050146134705760405162461bcd60e51b815260206004820152604c6024820152600080516020614b1483398151915260448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a401610b8c565b61347d60e083018361472c565b905061348c60c08401846148d4565b9050146135025760405162461bcd60e51b815260206004820152604a6024820152600080516020614b1483398151915260448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610b8c565b805161352e9061351860408501602086016141f0565b6135256040860186614a33565b866060016139fa565b60005b61353e60a08401846148d4565b90508110156135e8576135d8608084013561355c60a08601866148d4565b8481811061356c5761356c6143d8565b905060200201602081019061358191906141f0565b61358e60c08701876148d4565b8581811061359e5761359e6143d8565b90506020028101906135b09190614a33565b6135bd60e089018961472c565b878181106135cd576135cd6143d8565b905060400201613b6e565b6135e18161491e565b9050613531565b505050565b6040516001600160a01b0383166024820152604481018290526135e890849063a9059cbb60e01b906064016132df565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156137f457506001600160a01b03821615155b6138765760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26138b982612a9c565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061397d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613cbf9092919063ffffffff16565b8051909150156135e8578080602001905181019061399b919061446c565b6135e85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b8c565b613a05602083614a7a565b6001901b8463ffffffff1610613a8f5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a401610b8c565b6000613a9a82610ce0565b9050613ae584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a401610b8c565b505050505050565b613b79602083614a7a565b6001901b8463ffffffff1610613bf75760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e646578000000006064820152608401610b8c565b6000613c0282612522565b9050613c4d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f66006064820152608401610b8c565b6060613cce8484600085613cee565b949350505050565b600083613ce4868585613e1f565b1495945050505050565b606082471015613d4f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b8c565b6001600160a01b0385163b613da65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b8c565b600080866001600160a01b03168587604051613dc29190614aba565b60006040518083038185875af1925050503d8060008114613dff576040519150601f19603f3d011682016040523d82523d6000602084013e613e04565b606091505b5091509150613e14828286613f22565b979650505050505050565b600060208451613e2f9190614acc565b15613eb65760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610b8c565b8260205b85518111613f1957613ecd600285614acc565b613eee57816000528086015160205260406000209150600284049350613f07565b8086015160005281602052604060002091506002840493505b613f12602082614776565b9050613eba565b50949350505050565b60608315613f31575081611dff565b825115613f415782518084602001fd5b8160405162461bcd60e51b8152600401610b8c9190614ae0565b6001600160a01b0381168114610b9e57600080fd5b600060208284031215613f8257600080fd5b8135611dff81613f5b565b8015158114610b9e57600080fd5b60008060408385031215613fae57600080fd5b8235613fb981613f5b565b91506020830135613fc981613f8d565b809150509250929050565b600060208284031215613fe657600080fd5b5035919050565b600060408284031215613fff57600080fd5b50919050565b60006040828403121561401757600080fd5b611dff8383613fed565b60008083601f84011261403357600080fd5b50813567ffffffffffffffff81111561404b57600080fd5b6020830191508360208260051b850101111561406657600080fd5b9250929050565b6000806020838503121561408057600080fd5b823567ffffffffffffffff81111561409757600080fd5b6140a385828601614021565b90969095509350505050565b8035600181106140be57600080fd5b919050565b803561ffff811681146140be57600080fd5b6000806000608084860312156140ea57600080fd5b6140f48585613fed565b9250614102604085016140af565b9150614110606085016140c3565b90509250925092565b60006101008284031215613fff57600080fd5b6000806040838503121561413f57600080fd5b823567ffffffffffffffff81111561415657600080fd5b61416285828601614119565b9250506020830135613fc981613f5b565b803563ffffffff811681146140be57600080fd5b6000806040838503121561419a57600080fd5b823591506141aa60208401614173565b90509250929050565b6000806000608084860312156141c857600080fd5b83356141d381613f5b565b92506141e28560208601613fed565b9150614110606085016140af565b60006020828403121561420257600080fd5b611dff82614173565b60006020828403121561421d57600080fd5b813560ff81168114611dff57600080fd5b60006020828403121561424057600080fd5b813567ffffffffffffffff81111561425757600080fd5b613cce84828501614119565b6000806040838503121561427657600080fd5b823561428181613f5b565b946020939093013593505050565b600080600080600060a086880312156142a757600080fd5b85356142b281613f5b565b945060208601356142c281613f5b565b93506142d060408701614173565b92506142de606087016140af565b949793965091946080013592915050565b6000806040838503121561430257600080fd5b823561430d81613f5b565b91506020830135613fc981613f5b565b60008060008060008060c0878903121561433657600080fd5b863561434181613f5b565b9550602087013561435181613f5b565b945060408701359350606087013561436881613f5b565b925061437660808801614173565b915061438460a088016140c3565b90509295509295509295565b6000602082840312156143a257600080fd5b611dff826140c3565b634e487b7160e01b600052601160045260246000fd5b6000828210156143d3576143d36143ab565b500390565b634e487b7160e01b600052603260045260246000fd5b6000816143fd576143fd6143ab565b506000190190565b60006020828403121561441757600080fd5b8151611dff81613f5b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561447e57600080fd5b8151611dff81613f8d565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000823560de1983360301811261455557600080fd5b9190910192915050565b634e487b7160e01b600052602160045260246000fd5b6001811061459357634e487b7160e01b600052602160045260246000fd5b9052565b6000808335601e198436030181126145ae57600080fd5b830160208101925035905067ffffffffffffffff8111156145ce57600080fd5b8060061b360383131561406657600080fd5b818352600060208085019450826000805b8681101561464557823561460481613f5b565b6001600160a01b03168852828401356bffffffffffffffffffffffff811680821461462d578384fd5b898601525060409788019792909201916001016145f1565b50959695505050505050565b6146638261465e836140af565b614575565b600061467160208301614173565b63ffffffff808216602086015261468b6040850185614597565b925060e060408701526146a260e0870184836145e0565b92505060608401356146b381613f5b565b6001600160a01b0316606086015260808481013590860152806146d860a08601614173565b1660a0860152806146eb60c08601614173565b1660c0860152508091505092915050565b60018060a01b03841681528260208201526060604082015260006147236060830184614651565b95945050505050565b6000808335601e1984360301811261474357600080fd5b83018035915067ffffffffffffffff82111561475e57600080fd5b6020019150600681901b360382131561406657600080fd5b60008219821115614789576147896143ab565b500190565b602081526000611dff6020830184614651565b60008235609e1983360301811261455557600080fd5b60006147c38283614597565b60a085526147d560a0860182846145e0565b91505060208301356147e681613f5b565b6001600160a01b031660208501526040838101359085015261480a60608401614173565b63ffffffff80821660608701528061482460808701614173565b16608087015250508091505092915050565b60018060a01b038416815282602082015260606040820152600061472360608301846147b7565b602081526000611dff60208301846147b7565b6000823561487d81613f5b565b6001600160a01b0316825263ffffffff61489960208501614173565b16602083015250604001919050565b606081016148b68286614575565b61ffff8416602083015263ffffffff83166040830152949350505050565b6000808335601e198436030181126148eb57600080fd5b83018035915067ffffffffffffffff82111561490657600080fd5b6020019150600581901b360382131561406657600080fd5b6000600019821415614932576149326143ab565b5060010190565b60208082526034908201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6040820152733a103a3432903932bbb0b93239aab83230ba32b960611b606082015260800190565b600063ffffffff8083168185168083038211156149ac576149ac6143ab565b01949350505050565b600063ffffffff838116908316818110156149d2576149d26143ab565b039392505050565b600063ffffffff8216806149f0576149f06143ab565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680614a2757614a276149fa565b92169190910692915050565b6000808335601e19843603018112614a4a57600080fd5b83018035915067ffffffffffffffff821115614a6557600080fd5b60200191503681900382131561406657600080fd5b600082614a8957614a896149fa565b500490565b60005b83811015614aa9578181015183820152602001614a91565b838111156133165750506000910152565b60008251614555818460208701614a8e565b600082614adb57614adb6149fa565b500690565b6020815260008251806020840152614aff816040850160208701614a8e565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2052657761726473436f6f7264696e61746f722e5f76616c696461746552657761a2646970667358221220dcff1a75da71b2f873d2eeb37b40f1e17231b2426cbcc1b471686c39cf2fc60e64736f6c634300080c0033", } // RewardsCoordinatorABI is the input ABI used to generate the binding from. @@ -96,7 +107,7 @@ var RewardsCoordinatorABI = RewardsCoordinatorMetaData.ABI var RewardsCoordinatorBin = RewardsCoordinatorMetaData.Bin // DeployRewardsCoordinator deploys a new Ethereum contract, binding an instance of RewardsCoordinator to it. -func DeployRewardsCoordinator(auth *bind.TransactOpts, backend bind.ContractBackend, _delegationManager common.Address, _strategyManager common.Address, _CALCULATION_INTERVAL_SECONDS uint32, _MAX_REWARDS_DURATION uint32, _MAX_RETROACTIVE_LENGTH uint32, _MAX_FUTURE_LENGTH uint32, __GENESIS_REWARDS_TIMESTAMP uint32) (common.Address, *types.Transaction, *RewardsCoordinator, error) { +func DeployRewardsCoordinator(auth *bind.TransactOpts, backend bind.ContractBackend, _delegationManager common.Address, _strategyManager common.Address, _avsDirectory common.Address, _CALCULATION_INTERVAL_SECONDS uint32, _MAX_REWARDS_DURATION uint32, _MAX_RETROACTIVE_LENGTH uint32, _MAX_FUTURE_LENGTH uint32, _GENESIS_REWARDS_TIMESTAMP uint32, _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP uint32, _OPERATOR_SET_MAX_RETROACTIVE_LENGTH uint32) (common.Address, *types.Transaction, *RewardsCoordinator, error) { parsed, err := RewardsCoordinatorMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -105,7 +116,7 @@ func DeployRewardsCoordinator(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(RewardsCoordinatorBin), backend, _delegationManager, _strategyManager, _CALCULATION_INTERVAL_SECONDS, _MAX_REWARDS_DURATION, _MAX_RETROACTIVE_LENGTH, _MAX_FUTURE_LENGTH, __GENESIS_REWARDS_TIMESTAMP) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RewardsCoordinatorBin), backend, _delegationManager, _strategyManager, _avsDirectory, _CALCULATION_INTERVAL_SECONDS, _MAX_REWARDS_DURATION, _MAX_RETROACTIVE_LENGTH, _MAX_FUTURE_LENGTH, _GENESIS_REWARDS_TIMESTAMP, _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, _OPERATOR_SET_MAX_RETROACTIVE_LENGTH) if err != nil { return common.Address{}, nil, nil, err } @@ -409,6 +420,68 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) MAXREWARDSDURATION() return _RewardsCoordinator.Contract.MAXREWARDSDURATION(&_RewardsCoordinator.CallOpts) } +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorCaller) OPERATORSETGENESISREWARDSTIMESTAMP(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _RewardsCoordinator.contract.Call(opts, &out, "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { + return _RewardsCoordinator.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinator.CallOpts) +} + +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { + return _RewardsCoordinator.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinator.CallOpts) +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorCaller) OPERATORSETMAXRETROACTIVELENGTH(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _RewardsCoordinator.contract.Call(opts, &out, "OPERATOR_SET_MAX_RETROACTIVE_LENGTH") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { + return _RewardsCoordinator.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinator.CallOpts) +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { + return _RewardsCoordinator.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinator.CallOpts) +} + // ActivationDelay is a free data retrieval call binding the contract method 0x3a8c0786. // // Solidity: function activationDelay() view returns(uint32) @@ -440,6 +513,37 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) ActivationDelay() (u return _RewardsCoordinator.Contract.ActivationDelay(&_RewardsCoordinator.CallOpts) } +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinator *RewardsCoordinatorCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RewardsCoordinator.contract.Call(opts, &out, "avsDirectory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinator *RewardsCoordinatorSession) AvsDirectory() (common.Address, error) { + return _RewardsCoordinator.Contract.AvsDirectory(&_RewardsCoordinator.CallOpts) +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinator *RewardsCoordinatorCallerSession) AvsDirectory() (common.Address, error) { + return _RewardsCoordinator.Contract.AvsDirectory(&_RewardsCoordinator.CallOpts) +} + // BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. // // Solidity: function beaconChainETHStrategy() view returns(address) @@ -1490,6 +1594,27 @@ func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) RenounceOwnershi return _RewardsCoordinator.Contract.RenounceOwnership(&_RewardsCoordinator.TransactOpts) } +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinator *RewardsCoordinatorTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinator.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinator *RewardsCoordinatorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinator.Contract.RewardOperatorSetForRange(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinator.Contract.RewardOperatorSetForRange(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) +} + // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -2892,6 +3017,169 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOperatorCommissionUp return event, nil } +// RewardsCoordinatorOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the RewardsCoordinator contract. +type RewardsCoordinatorOperatorSetRewardCreatedIterator struct { + Event *RewardsCoordinatorOperatorSetRewardCreated // 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 *RewardsCoordinatorOperatorSetRewardCreatedIterator) 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(RewardsCoordinatorOperatorSetRewardCreated) + 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(RewardsCoordinatorOperatorSetRewardCreated) + 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 *RewardsCoordinatorOperatorSetRewardCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RewardsCoordinatorOperatorSetRewardCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RewardsCoordinatorOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the RewardsCoordinator contract. +type RewardsCoordinatorOperatorSetRewardCreated struct { + Avs common.Address + SubmissionNonce *big.Int + RewardsSubmissionHash [32]byte + RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorOperatorSetRewardCreatedIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) + if err != nil { + return nil, err + } + return &RewardsCoordinatorOperatorSetRewardCreatedIterator{contract: _RewardsCoordinator.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil +} + +// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) + 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(RewardsCoordinatorOperatorSetRewardCreated) + if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", 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 +} + +// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOperatorSetRewardCreated(log types.Log) (*RewardsCoordinatorOperatorSetRewardCreated, error) { + event := new(RewardsCoordinatorOperatorSetRewardCreated) + if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // RewardsCoordinatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the RewardsCoordinator contract. type RewardsCoordinatorOwnershipTransferredIterator struct { Event *RewardsCoordinatorOwnershipTransferred // Event containing the contract specifics and raw log diff --git a/pkg/bindings/RewardsCoordinatorStorage/binding.go b/pkg/bindings/RewardsCoordinatorStorage/binding.go index 2e5ed3f4c..8df917060 100644 --- a/pkg/bindings/RewardsCoordinatorStorage/binding.go +++ b/pkg/bindings/RewardsCoordinatorStorage/binding.go @@ -31,8 +31,8 @@ var ( // IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. type IAVSDirectoryOperatorSet struct { - Avs common.Address - Id uint32 + Avs common.Address + OperatorSetId uint32 } // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. @@ -49,6 +49,17 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } +// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. +type IRewardsCoordinatorOperatorSetRewardsSubmission struct { + RewardType uint8 + OperatorSetId uint32 + StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier + Token common.Address + Amount *big.Int + StartTimestamp uint32 + Duration uint32 +} + // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -83,7 +94,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf 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\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"getCurrentDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", + 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\":\"OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", } // RewardsCoordinatorStorageABI is the input ABI used to generate the binding from. @@ -387,6 +398,68 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) MAXREW return _RewardsCoordinatorStorage.Contract.MAXREWARDSDURATION(&_RewardsCoordinatorStorage.CallOpts) } +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OPERATORSETGENESISREWARDSTIMESTAMP(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { + return _RewardsCoordinatorStorage.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinatorStorage.CallOpts) +} + +// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. +// +// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { + return _RewardsCoordinatorStorage.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinatorStorage.CallOpts) +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OPERATORSETMAXRETROACTIVELENGTH(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "OPERATOR_SET_MAX_RETROACTIVE_LENGTH") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { + return _RewardsCoordinatorStorage.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinatorStorage.CallOpts) +} + +// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. +// +// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { + return _RewardsCoordinatorStorage.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinatorStorage.CallOpts) +} + // ActivationDelay is a free data retrieval call binding the contract method 0x3a8c0786. // // Solidity: function activationDelay() view returns(uint32) @@ -418,6 +491,37 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) Activa return _RewardsCoordinatorStorage.Contract.ActivationDelay(&_RewardsCoordinatorStorage.CallOpts) } +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "avsDirectory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) AvsDirectory() (common.Address, error) { + return _RewardsCoordinatorStorage.Contract.AvsDirectory(&_RewardsCoordinatorStorage.CallOpts) +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) AvsDirectory() (common.Address, error) { + return _RewardsCoordinatorStorage.Contract.AvsDirectory(&_RewardsCoordinatorStorage.CallOpts) +} + // CalculateEarnerLeafHash is a free data retrieval call binding the contract method 0x149bc872. // // Solidity: function calculateEarnerLeafHash((address,bytes32) leaf) pure returns(bytes32) @@ -635,6 +739,37 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) Delega return _RewardsCoordinatorStorage.Contract.DelegationManager(&_RewardsCoordinatorStorage.CallOpts) } +// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. +// +// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) GetCurrentClaimableDistributionRoot(opts *bind.CallOpts) (IRewardsCoordinatorDistributionRoot, error) { + var out []interface{} + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "getCurrentClaimableDistributionRoot") + + if err != nil { + return *new(IRewardsCoordinatorDistributionRoot), err + } + + out0 := *abi.ConvertType(out[0], new(IRewardsCoordinatorDistributionRoot)).(*IRewardsCoordinatorDistributionRoot) + + return out0, err + +} + +// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. +// +// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) GetCurrentClaimableDistributionRoot() (IRewardsCoordinatorDistributionRoot, error) { + return _RewardsCoordinatorStorage.Contract.GetCurrentClaimableDistributionRoot(&_RewardsCoordinatorStorage.CallOpts) +} + +// GetCurrentClaimableDistributionRoot is a free data retrieval call binding the contract method 0x0e9a53cf. +// +// Solidity: function getCurrentClaimableDistributionRoot() view returns((bytes32,uint32,uint32,bool)) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) GetCurrentClaimableDistributionRoot() (IRewardsCoordinatorDistributionRoot, error) { + return _RewardsCoordinatorStorage.Contract.GetCurrentClaimableDistributionRoot(&_RewardsCoordinatorStorage.CallOpts) +} + // GetCurrentDistributionRoot is a free data retrieval call binding the contract method 0x9be3d4e4. // // Solidity: function getCurrentDistributionRoot() view returns((bytes32,uint32,uint32,bool)) @@ -1167,6 +1302,27 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) Pr return _RewardsCoordinatorStorage.Contract.ProcessClaim(&_RewardsCoordinatorStorage.TransactOpts, claim, recipient) } +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.Contract.RewardOperatorSetForRange(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) +} + +// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. +// +// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.Contract.RewardOperatorSetForRange(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) +} + // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -2372,6 +2528,169 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseOperat return event, nil } +// RewardsCoordinatorStorageOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageOperatorSetRewardCreatedIterator struct { + Event *RewardsCoordinatorStorageOperatorSetRewardCreated // 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 *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) 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(RewardsCoordinatorStorageOperatorSetRewardCreated) + 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(RewardsCoordinatorStorageOperatorSetRewardCreated) + 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 *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RewardsCoordinatorStorageOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageOperatorSetRewardCreated struct { + Avs common.Address + SubmissionNonce *big.Int + RewardsSubmissionHash [32]byte + RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorStorageOperatorSetRewardCreatedIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) + if err != nil { + return nil, err + } + return &RewardsCoordinatorStorageOperatorSetRewardCreatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil +} + +// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) + 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(RewardsCoordinatorStorageOperatorSetRewardCreated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorSetRewardCreated", 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 +} + +// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// +// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseOperatorSetRewardCreated(log types.Log) (*RewardsCoordinatorStorageOperatorSetRewardCreated, error) { + event := new(RewardsCoordinatorStorageOperatorSetRewardCreated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // RewardsCoordinatorStorageRewardsClaimedIterator is returned from FilterRewardsClaimed and is used to iterate over the raw logs and unpacked data for RewardsClaimed events raised by the RewardsCoordinatorStorage contract. type RewardsCoordinatorStorageRewardsClaimedIterator struct { Event *RewardsCoordinatorStorageRewardsClaimed // Event containing the contract specifics and raw log diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 4e4598c64..518ec7afd 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -18,12 +18,25 @@ contract AVSDirectory is { using EnumerableSet for EnumerableSet.Bytes32Set; using EnumerableSet for EnumerableSet.AddressSet; + using Checkpoints for Checkpoints.History; /// @dev Index for flag that pauses operator register/deregister to avs when set. uint8 internal constant PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS = 0; /// @dev Index for flag that pauses operator register/deregister to operator sets when set. uint8 internal constant PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS = 1; + /// @dev BIPS factor for slashable bips + uint256 internal constant BIPS_FACTOR = 10_000; + + /// @dev Delay before deallocations are completable and can be added back into freeMagnitude + uint32 public constant DEALLOCATION_DELAY = 17.5 days; + + /// @dev The initial total magnitude for an operator + uint64 public constant INITIAL_TOTAL_MAGNITUDE = 1 ether; + + /// @dev Maximum number of pending allocations AND deallocations for a single operator, operatorSet, strategy + uint256 public constant MAX_PENDING_UPDATES = 1; + /// @dev Returns the chain ID from the time the contract was deployed. uint256 internal immutable ORIGINAL_CHAIN_ID; @@ -204,36 +217,37 @@ contract AVSDirectory is uint32[] calldata operatorSetIds, ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature ) external override onlyWhenNotPaused(PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS) { - if (operatorSignature.signature.length == 0) { - require(msg.sender == operator, "AVSDirectory.forceDeregisterFromOperatorSets: caller must be operator"); - } else { - // Assert operator's signature has not expired. - require( - operatorSignature.expiry >= block.timestamp, - "AVSDirectory.forceDeregisterFromOperatorSets: operator signature expired" - ); - // Assert operator's signature `salt` has not already been spent. - require( - !operatorSaltIsSpent[operator][operatorSignature.salt], - "AVSDirectory.forceDeregisterFromOperatorSets: salt already spent" - ); - - // Assert that `operatorSignature.signature` is a valid signature for operator set deregistrations. - EIP1271SignatureUtils.checkSignature_EIP1271( - operator, - calculateOperatorSetForceDeregistrationTypehash({ - avs: avs, - operatorSetIds: operatorSetIds, - salt: operatorSignature.salt, - expiry: operatorSignature.expiry - }), - operatorSignature.signature - ); - - // Mutate `operatorSaltIsSpent` to `true` to prevent future respending. - operatorSaltIsSpent[operator][operatorSignature.salt] = true; - } - _deregisterFromOperatorSets(avs, operator, operatorSetIds); + // COMMENTED FOR CODESIZE + // if (operatorSignature.signature.length == 0) { + // require(msg.sender == operator, "AVSDirectory.forceDeregisterFromOperatorSets: caller must be operator"); + // } else { + // // Assert operator's signature has not expired. + // require( + // operatorSignature.expiry >= block.timestamp, + // "AVSDirectory.forceDeregisterFromOperatorSets: operator signature expired" + // ); + // // Assert operator's signature `salt` has not already been spent. + // require( + // !operatorSaltIsSpent[operator][operatorSignature.salt], + // "AVSDirectory.forceDeregisterFromOperatorSets: salt already spent" + // ); + + // // Assert that `operatorSignature.signature` is a valid signature for operator set deregistrations. + // EIP1271SignatureUtils.checkSignature_EIP1271( + // operator, + // calculateOperatorSetForceDeregistrationTypehash({ + // avs: avs, + // operatorSetIds: operatorSetIds, + // salt: operatorSignature.salt, + // expiry: operatorSignature.expiry + // }), + // operatorSignature.signature + // ); + + // // Mutate `operatorSaltIsSpent` to `true` to prevent future respending. + // operatorSaltIsSpent[operator][operatorSignature.salt] = true; + // } + // _deregisterFromOperatorSets(avs, operator, operatorSetIds); } /** @@ -251,6 +265,189 @@ contract AVSDirectory is _deregisterFromOperatorSets(msg.sender, operator, operatorSetIds); } + /** + * @notice Modifies the propotions of slashable stake allocated to a list of operatorSets for a set of strategies + * @param operator address to modify allocations for + * @param allocations array of magnitude adjustments for multiple strategies and corresponding operator sets + * @param operatorSignature signature of the operator if msg.sender is not the operator + * @dev Updates freeMagnitude for the updated strategies + * @dev Must be called by the operator or with a valid operator signature + * @dev For each allocation, allocation.operatorSets MUST be ordered in ascending order according to the + * encoding of the operatorSet. This is to prevent duplicate operatorSets being passed in. The easiest way to ensure + * ordering is to sort allocated operatorSets by address first, and then sort for each avs by ascending operatorSetIds. + */ + function modifyAllocations( + address operator, + MagnitudeAllocation[] calldata allocations, + SignatureWithSaltAndExpiry calldata operatorSignature + ) external { + if (msg.sender != operator) { + _verifyOperatorSignature(operator, allocations, operatorSignature); + } + require( + delegation.isOperator(operator), "AVSDirectory.modifyAllocations: operator not registered to EigenLayer yet" + ); + AllocationDelayDetails memory details = allocationDelay[operator]; + require( + details.isSet, + "AVSDirectory.modifyAllocations: operator must initialize allocation delay before modifying allocations" + ); + // effect timestamp for allocations to take effect. This is configurable by operators + uint32 effectTimestamp = uint32(block.timestamp) + details.allocationDelay; + // completable timestamp for deallocations + uint32 completableTimestamp = uint32(block.timestamp) + DEALLOCATION_DELAY; + + for (uint256 i = 0; i < allocations.length; ++i) { + // 1. For the given (operator,strategy) clear all pending free magnitude for the strategy and update freeMagnitude + _updateFreeMagnitude({ + operator: operator, + strategy: allocations[i].strategy, + numToComplete: type(uint16).max + }); + + // 2. Check current totalMagnitude matches expected value. This is to check for slashing race conditions + // where an operator gets slashed from an operatorSet and as a result all the configured allocations have larger + // proprtional magnitudes relative to eachother. This check prevents any surprising behavior. + uint64 currentTotalMagnitude = _getLatestTotalMagnitude(operator, allocations[i].strategy); + require( + currentTotalMagnitude == allocations[i].expectedTotalMagnitude, + "AVSDirectory.setAllocations: current total magnitude does not match expected" + ); + + // 3. set allocations for the strategy after updating freeMagnitude + _modifyAllocations({ + operator: operator, + allocation: allocations[i], + allocationEffectTimestamp: effectTimestamp, + deallocationCompletableTimestamp: completableTimestamp + }); + } + } + + /** + * @notice For all pending deallocations that have become completable, their pending free magnitude can be + * added back to the free magnitude of the (operator, strategy) amount. This function takes a list of strategies + * and adds all completable deallocations for each strategy, updating the freeMagnitudes of the operator + * + * @param operator address to complete deallocations for + * @param strategies a list of strategies to complete deallocations for + * @param numToComplete a list of number of pending free magnitude deallocations to complete for each strategy + * + * @dev can be called permissionlessly by anyone + */ + function updateFreeMagnitude( + address operator, + IStrategy[] calldata strategies, + uint16[] calldata numToComplete + ) external { + require( + delegation.isOperator(operator), + "AVSDirectory.updateFreeMagnitude: operator not registered to EigenLayer yet" + ); + require(strategies.length == numToComplete.length, "AVSDirectory.updateFreeMagnitude: array length mismatch"); + for (uint256 i = 0; i < strategies.length; ++i) { + _updateFreeMagnitude({operator: operator, strategy: strategies[i], numToComplete: numToComplete[i]}); + } + } + + /** + * @notice Called by an AVS to slash an operator for given operatorSetId, list of strategies, and bipsToSlash. + * For each given (operator, operatorSetId, strategy) tuple, bipsToSlash + * bips of the operatorSet's slashable stake allocation will be slashed + * + * @param operator the address to slash + * @param operatorSetId the ID of the operatorSet the operator is being slashed on behalf of + * @param strategies the set of strategies to slash + * @param bipsToSlash the number of bips to slash, this will be proportional to the + * operator's slashable stake allocation for the operatorSet + */ + function slashOperator( + address operator, + uint32 operatorSetId, + IStrategy[] calldata strategies, + uint16 bipsToSlash + ) external { + OperatorSet memory operatorSet = OperatorSet({avs: msg.sender, operatorSetId: operatorSetId}); + bytes32 operatorSetKey = _encodeOperatorSet(operatorSet); + require( + isOperatorSlashable(operator, operatorSet), + "AVSDirectory.slashOperator: operator not slashable for operatorSet" + ); + + for (uint256 i = 0; i < strategies.length; ++i) { + // 1. calculate slashed magnitude from current allocation + // update current and all following queued magnitude updates for (operator, strategy, operatorSetId) tuple + uint64 slashedMagnitude; + { + uint64 currentMagnitude = uint64( + _magnitudeUpdate[operator][strategies[i]][operatorSetKey].upperLookupRecent(uint32(block.timestamp)) + ); + // TODO: if we don't continue here we get into weird "total/free magnitude" not initialized cases. Is this ok? + if (currentMagnitude == 0) { + continue; + } + + /// TODO: add wrapping library for rounding up for slashing accounting + slashedMagnitude = uint64(uint256(bipsToSlash) * uint256(currentMagnitude) / BIPS_FACTOR); + + _magnitudeUpdate[operator][strategies[i]][operatorSetKey].decrementAtAndFutureCheckpoints({ + key: uint32(block.timestamp), + decrementValue: slashedMagnitude + }); + } + + // 2. if there are any pending deallocations then need to update and decrement if they fall within slashable window + // loop backwards through _queuedDeallocationIndices, each element contains an array index to + // corresponding deallocation to access in pendingFreeMagnitude + // if completable, then break + // (since ordered by completableTimestamps, older deallocations will also be completable and outside slashable window) + // if NOT completable, then add to slashed magnitude + { + uint256 queuedDeallocationIndicesLen = + _queuedDeallocationIndices[operator][strategies[i]][operatorSetKey].length; + for (uint256 j = queuedDeallocationIndicesLen; j > 0; --j) { + // index of pendingFreeMagnitude/deallocation to check for slashing + uint256 index = _queuedDeallocationIndices[operator][strategies[i]][operatorSetKey][j - 1]; + PendingFreeMagnitude storage pendingFreeMagnitude = + _pendingFreeMagnitude[operator][strategies[i]][index]; + + // Reached pendingFreeMagnitude/deallocation that is completable and not within slashability window, + // therefore older deallocations will also be completable. Since this is ordered by completableTimestamps break loop now + if (pendingFreeMagnitude.completableTimestamp >= uint32(block.timestamp)) { + break; + } + + // pending deallocation is still within slashable window, slash magnitudeDiff and add to slashedMagnitude + uint64 slashedAmount = + uint64(uint256(bipsToSlash) * uint256(pendingFreeMagnitude.magnitudeDiff) / BIPS_FACTOR); + pendingFreeMagnitude.magnitudeDiff -= slashedAmount; + slashedMagnitude += slashedAmount; + } + } + + // 3. update totalMagnitude, get total magnitude and subtract slashedMagnitude + _totalMagnitudeUpdate[operator][strategies[i]].push({ + key: uint32(block.timestamp), + value: _getLatestTotalMagnitude(operator, strategies[i]) - slashedMagnitude + }); + } + } + + /** + * @notice Called by operators to set their allocation delay one time + * @param delay the allocation delay in seconds + */ + function initializeAllocationDelay(uint32 delay) external { + require( + delegation.isOperator(msg.sender), + "AVSDirectory.initializeAllocationDelay: operator not registered to EigenLayer yet" + ); + require( + !allocationDelay[msg.sender].isSet, "AVSDirectory.initializeAllocationDelay: allocation delay already set" + ); + allocationDelay[msg.sender] = AllocationDelayDetails({isSet: true, allocationDelay: delay}); + } + /** * @notice Called by an AVS to emit an `AVSMetadataURIUpdated` event indicating the information has updated. * @@ -274,12 +471,14 @@ contract AVSDirectory is /** * - * LEGACY EXTERNAL FUNCTIONS - SUPPORT DEPRECATED BY SLASHING RELEASE + * LEGACY EXTERNAL FUNCTIONS - SUPPORT DEPRECATED IN FUTURE RELEASE AFTER SLASHING RELEASE * */ /** - * @notice Called by the AVS's service manager contract to register an operator with the AVS. + * @notice Legacy function called by the AVS's service manager contract + * to register an operator with the AVS. NOTE: this function will be deprecated in a future release + * after the slashing release. New AVSs should use `registerOperatorToOperatorSets` instead. * * @param operator The address of the operator to register. * @param operatorSignature The signature, salt, and expiry of the operator's signature. @@ -340,7 +539,9 @@ contract AVSDirectory is } /** - * @notice Called by an AVS to deregister an operator from the AVS. + * @notice Legacy function called by an AVS to deregister an operator from the AVS. + * NOTE: this function will be deprecated in a future release after the slashing release. + * New AVSs integrating should use `deregisterOperatorFromOperatorSets` instead. * * @param operator The address of the operator to deregister. * @@ -357,7 +558,10 @@ contract AVSDirectory is ); // Assert that the AVS is not an operator set AVS. - require(!isOperatorSetAVS[msg.sender], "AVSDirectory.deregisterOperatorFromAVS: AVS is an operator set AVS"); + require( + !isOperatorSetAVS[msg.sender], + "AVSDirectory.deregisterOperatorFromAVS: AVS is an operator set AVS" + ); // Set the operator as deregistered avsOperatorStatus[msg.sender][operator] = OperatorAVSRegistrationStatus.UNREGISTERED; @@ -396,6 +600,14 @@ contract AVSDirectory is _operatorSetMembers[encodedOperatorSet].add(operator); + OperatorSetRegistrationStatus storage registrationStatus = + operatorSetStatus[avs][operator][operatorSetIds[i]]; + require( + !registrationStatus.registered, + "AVSDirectory._registerOperatorToOperatorSets: operator already registered for operator set" + ); + registrationStatus.registered = true; + emit OperatorAddedToOperatorSet(operator, operatorSet); } } @@ -425,6 +637,211 @@ contract AVSDirectory is } } + /** + * @notice For a single strategy, update freeMagnitude by adding completable pending free magnitudes + * @param operator address to update freeMagnitude for + * @param strategy the strategy to update freeMagnitude for + * @param numToComplete the number of pending free magnitudes deallocations to complete + * @dev read through pending free magnitudes and add to freeMagnitude if completableTimestamp is >= block timestamp + * In addition to updating freeMagnitude, updates next starting index to read from for pending free magnitudes after completing + */ + function _updateFreeMagnitude(address operator, IStrategy strategy, uint16 numToComplete) internal { + (uint64 freeMagnitudeToAdd, uint256 nextIndex) = _getPendingFreeMagnitude(operator, strategy, numToComplete); + freeMagnitude[operator][strategy] += freeMagnitudeToAdd; + _nextPendingFreeMagnitudeIndex[operator][strategy] = nextIndex; + } + + /** + * @notice For a single strategy, modify magnitude allocations for each of the specified operatorSets + * @param operator address to modify allocations for + * @param allocation the magnitude allocations to modify for a single strategy + * @param allocationEffectTimestamp the timestamp when the allocations will take effect + * @param deallocationCompletableTimestamp the timestamp when the deallocations will be completable + * @dev For each allocation, allocation.operatorSets MUST be ordered in ascending order according to the + * encoding of the operatorSet. This is to prevent duplicate operatorSets being passed in. The easiest way to ensure + * ordering is to sort allocated operatorSets by address first, and then sort for each avs by ascending operatorSetIds. + */ + function _modifyAllocations( + address operator, + MagnitudeAllocation calldata allocation, + uint32 allocationEffectTimestamp, + uint32 deallocationCompletableTimestamp + ) internal { + require( + allocation.operatorSets.length == allocation.magnitudes.length, + "AVSDirectory._modifyAllocations: operatorSets and magnitudes length mismatch" + ); + uint64 newFreeMagnitude = freeMagnitude[operator][allocation.strategy]; + // OperatorSet[] calldata opSets = allocation.operatorSets; + + bytes32 prevOperatorSet = bytes32(0); + + for (uint256 i = 0; i < allocation.operatorSets.length; ++i) { + require( + isOperatorSet[allocation.operatorSets[i].avs][allocation.operatorSets[i].operatorSetId], + "AVSDirectory._modifyAllocations: operatorSet does not exist" + ); + // use encoding of operatorSet to ensure ordering and also used to use OperatorSet struct as key in mappings + bytes32 operatorSetKey = _encodeOperatorSet(allocation.operatorSets[i]); + require(prevOperatorSet < operatorSetKey, "AVSDirectory._modifyAllocations: operatorSets not ordered"); + prevOperatorSet = operatorSetKey; + + // Read current magnitude allocation including its respective array index and length. + // We'll use these values later to check the number of pending allocations/deallocations. + (uint224 currentMagnitude, uint256 pos, uint256 length) = _magnitudeUpdate[operator][allocation.strategy][operatorSetKey] + .upperLookupRecentWithPos(uint32(block.timestamp)); + + // Check that there is at MOST `MAX_PENDING_UPDATES` combined allocations & deallocations for the operator, operatorSet, strategy + { + uint256 numPendingAllocations = length - pos; + uint256 numPendingDeallocations = + _getNumQueuedDeallocations(operator, allocation.strategy, operatorSetKey); + + require( + numPendingAllocations + numPendingDeallocations < MAX_PENDING_UPDATES, + "AVSDirectory._modifyAllocations: Cannot set magnitude with a pending allocation or deallocation" + ); + } + + if (allocation.magnitudes[i] < uint64(currentMagnitude)) { + // Newly configured magnitude is less than current value. + // Therefore we handle this as a deallocation + + // 1. update and decrement current and future queued amounts in case any pending allocations exist + _magnitudeUpdate[operator][allocation.strategy][operatorSetKey].decrementAtAndFutureCheckpoints({ + key: uint32(block.timestamp), + decrementValue: uint64(currentMagnitude) - allocation.magnitudes[i] + }); + + // 2. push PendingFreeMagnitude and respective array index into (op,opSet,Strategy) queued deallocations + uint256 index = _pendingFreeMagnitude[operator][allocation.strategy].length; + _pendingFreeMagnitude[operator][allocation.strategy].push( + PendingFreeMagnitude({ + magnitudeDiff: uint64(currentMagnitude) - allocation.magnitudes[i], + completableTimestamp: deallocationCompletableTimestamp + }) + ); + _queuedDeallocationIndices[operator][allocation.strategy][operatorSetKey].push(index); + } else if (allocation.magnitudes[i] > uint64(currentMagnitude)) { + // Newly configured magnitude is greater than current value. + // Therefore we handle this as an allocation + + // 1. allocate magnitude which will take effect in the future 21 days from now + _magnitudeUpdate[operator][allocation.strategy][operatorSetKey].push({ + key: allocationEffectTimestamp, + value: allocation.magnitudes[i] + }); + + // 2. decrement free magnitude by incremented amount + require( + newFreeMagnitude >= allocation.magnitudes[i] - uint64(currentMagnitude), + "AVSDirectory._modifyAllocations: insufficient available free magnitude to allocate" + ); + newFreeMagnitude -= allocation.magnitudes[i] - uint64(currentMagnitude); + } + } + + // update freeMagnitude after all allocations. + // if provided allocations only resulted in deallocating, then this value would be unchanged + freeMagnitude[operator][allocation.strategy] = newFreeMagnitude; + } + + /** + * @notice Get the number of queued dealloations for the given (operator, strategy, operatorSetKey) tuple + * @param operator address to get queued deallocations for + * @param strategy the strategy to get queued deallocations for + * @param operatorSetKey the encoded operatorSet to get queued deallocations for + */ + function _getNumQueuedDeallocations( + address operator, + IStrategy strategy, + bytes32 operatorSetKey + ) internal view returns (uint256) { + uint256 numQueuedDeallocations; + + uint256 length = _queuedDeallocationIndices[operator][strategy][operatorSetKey].length; + + for (uint256 i = length; i > 0; --i) { + // index of pendingFreeMagnitude/deallocation to check for slashing + uint256 index = _queuedDeallocationIndices[operator][strategy][operatorSetKey][i - 1]; + PendingFreeMagnitude memory pendingFreeMagnitude = _pendingFreeMagnitude[operator][strategy][index]; + + // If completableTimestamp is greater than completeUntilTimestamp, break + if (pendingFreeMagnitude.completableTimestamp < uint32(block.timestamp)) { + ++numQueuedDeallocations; + } else { + break; + } + } + + return numQueuedDeallocations; + } + + /// @dev gets the latest total magnitude or overwrites it if it is not set + function _getLatestTotalMagnitude(address operator, IStrategy strategy) internal returns (uint64) { + (bool exists,, uint224 totalMagnitude) = _totalMagnitudeUpdate[operator][strategy].latestCheckpoint(); + if (!exists) { + totalMagnitude = INITIAL_TOTAL_MAGNITUDE; + _totalMagnitudeUpdate[operator][strategy].push({key: uint32(block.timestamp), value: totalMagnitude}); + freeMagnitude[operator][strategy] = INITIAL_TOTAL_MAGNITUDE; + } + + return uint64(totalMagnitude); + } + + /// @dev gets the pending free magnitude available to add by completing numToComplete pending deallocations + /// and returns the next index to start from if completed. + function _getPendingFreeMagnitude( + address operator, + IStrategy strategy, + uint16 numToComplete + ) internal view returns (uint64 freeMagnitudeToAdd, uint256 nextIndex) { + uint256 nextIndex = _nextPendingFreeMagnitudeIndex[operator][strategy]; + uint256 pendingFreeMagnitudeLength = _pendingFreeMagnitude[operator][strategy].length; + uint8 completed = 0; + uint64 freeMagnitudeToAdd = 0; + while (nextIndex < pendingFreeMagnitudeLength && completed < numToComplete) { + PendingFreeMagnitude memory pendingFreeMagnitude = _pendingFreeMagnitude[operator][strategy][nextIndex]; + // pendingFreeMagnitude is ordered by completableTimestamp. If we reach one that is not completable yet, then break + // loop until completableTimestamp is < block.timestamp + if (pendingFreeMagnitude.completableTimestamp < uint32(block.timestamp)) { + break; + } + + // pending free magnitude can be added to freeMagnitude + freeMagnitudeToAdd += pendingFreeMagnitude.magnitudeDiff; + ++nextIndex; + ++completed; + } + return (freeMagnitudeToAdd, nextIndex); + } + + /// @dev Verify operator's signature and spend salt + function _verifyOperatorSignature( + address operator, + MagnitudeAllocation[] calldata allocations, + SignatureWithSaltAndExpiry calldata operatorSignature + ) internal { + // check the signature expiry + require( + operatorSignature.expiry >= block.timestamp, + "AVSDirectory._verifyOperatorSignature: operator signature expired" + ); + // Assert operator's signature cannot be replayed. + require( + !operatorSaltIsSpent[operator][operatorSignature.salt], "AVSDirectory._verifyOperatorSignature: salt spent" + ); + + bytes32 digestHash = calculateMagnitudeAllocationDigestHash( + operator, allocations, operatorSignature.salt, operatorSignature.expiry + ); + + // Assert operator's signature is valid. + EIP1271SignatureUtils.checkSignature_EIP1271(operator, digestHash, operatorSignature.signature); + // Spend salt. + operatorSaltIsSpent[operator][operatorSignature.salt] = true; + } + /** * * VIEW FUNCTIONS @@ -513,6 +930,115 @@ contract AVSDirectory is return _operatorSetsMemberOf[operator].contains(_encodeOperatorSet(operatorSet)); } + /** + * @param operator the operator to get the slashable ppm for + * @param operatorSet the operatorSet to get the slashable ppm for + * @param strategies the strategies to get the slashable ppm for + * @param timestamp the timestamp to get the slashable ppm for for + * @param linear whether the search should be linear (from the most recent) or binary + * + * @return slashablePPM the slashable ppm of the given list of strategies allocated to + * the given OperatorSet for the given operator and timestamp + */ + function getSlashablePPM( + address operator, + OperatorSet calldata operatorSet, + IStrategy[] calldata strategies, + uint32 timestamp, + bool linear + ) public view returns (uint24[] memory) { + uint24[] memory slashablePPM = new uint24[](strategies.length); + for (uint256 i = 0; i < strategies.length; ++i) { + slashablePPM[i] = _getSlashablePPM(operator, operatorSet, strategies[i], timestamp, linear); + } + return slashablePPM; + } + + function _getSlashablePPM( + address operator, + OperatorSet calldata operatorSet, + IStrategy strategy, + uint32 timestamp, + bool linear + ) public view returns (uint24) { + uint64 totalMagnitude; + if (linear) { + totalMagnitude = uint64(_totalMagnitudeUpdate[operator][strategy].upperLookupLinear(timestamp)); + } else { + totalMagnitude = uint64(_totalMagnitudeUpdate[operator][strategy].upperLookup(timestamp)); + } + // return early if totalMagnitude is 0 + if (totalMagnitude == 0) { + return 0; + } + + uint64 currentMagnitude; + bytes32 operatorSetKey = _encodeOperatorSet(operatorSet); + if (linear) { + currentMagnitude = uint64(_magnitudeUpdate[operator][strategy][operatorSetKey].upperLookupLinear(timestamp)); + } else { + currentMagnitude = uint64(_magnitudeUpdate[operator][strategy][operatorSetKey].upperLookup(timestamp)); + } + + return uint16(currentMagnitude * 1e6 / totalMagnitude); + } + + /** + * @notice Get the allocatable magnitude for an operator and strategy based on number of pending deallocations + * that could be completed at the same time. This is the sum of freeMagnitude and the sum of all pending completable deallocations. + * @param operator the operator to get the allocatable magnitude for + * @param strategy the strategy to get the allocatable magnitude for + * @param numToComplete the number of pending free magnitudes deallocations to complete + */ + function getAllocatableMagnitude( + address operator, + IStrategy strategy, + uint16 numToComplete + ) public view returns (uint64) { + (uint64 freeMagnitudeToAdd,) = _getPendingFreeMagnitude(operator, strategy, numToComplete); + return freeMagnitude[operator][strategy] + freeMagnitudeToAdd; + } + + /** + * @notice Get the allocation delay (in seconds) for an operator. Can only be configured one-time + * from calling initializeAllocationDelay. + * @param operator the operator to get the allocation delay for + * @return isSet whether the allocation delay is set and the operator can call `modifyAllocations` + * @return allocationDelay the allocation delay in seconds + */ + function getAllocationDelay(address operator) public view returns (bool, uint32) { + AllocationDelayDetails memory details = allocationDelay[operator]; + return (details.isSet, details.allocationDelay); + } + + /// @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days + function isOperatorSlashable(address operator, OperatorSet memory operatorSet) public view returns (bool) { + OperatorSetRegistrationStatus memory registrationStatus = + operatorSetStatus[operatorSet.avs][operator][operatorSet.operatorSetId]; + return isMember(operator, operatorSet) + || registrationStatus.lastDeregisteredTimestamp + DEALLOCATION_DELAY >= block.timestamp; + } + + // /** + // * @notice fetches the minimum slashable shares for a certain operator and operatorSet for a list of strategies + // * from the current timestamp until the given timestamp + // * + // * @param operator the operator to get the minimum slashable shares for + // * @param operatorSet the operatorSet to get the minimum slashable shares for + // * @param strategies the strategies to get the minimum slashable shares for + // * @param timestamp the timestamp to the minimum slashable shares before + // * + // * @dev used to get the slashable stakes of operators to weigh over a given slashability window + // * + // * @return the list of share amounts for each strategy + // */ + // function getMinimumSlashableSharesBefore( + // address operator, + // OperatorSet calldata operatorSet, + // IStrategy[] calldata strategies, + // uint32 timestamp + // ) external view returns (uint256[] calldata) {} + /** * @notice Calculates the digest hash to be signed by an operator to register with an AVS. * @@ -569,6 +1095,24 @@ contract AVSDirectory is ); } + /** + * @notice Calculates the digest hash to be signed by an operator to modify magnitude allocations + * @param operator The operator to allocate or deallocate magnitude for. + * @param allocations The magnitude allocations/deallocations to be made. + * @param salt A unique and single use value associated with the approver signature. + * @param expiry Time after which the approver's signature becomes invalid. + */ + function calculateMagnitudeAllocationDigestHash( + address operator, + MagnitudeAllocation[] calldata allocations, + bytes32 salt, + uint256 expiry + ) public view returns (bytes32) { + return _calculateDigestHash( + keccak256(abi.encode(MAGNITUDE_ADJUSTMENT_TYPEHASH, operator, allocations, salt, expiry)) + ); + } + /// @notice Getter function for the current EIP-712 domain separator for this contract. /// @dev The domain separator will change in the event of a fork that changes the ChainID. function domainSeparator() public view override returns (bytes32) { diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index 8b8d57739..1b63ee59f 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/AVSDirectoryStorage.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "../interfaces/IAVSDirectory.sol"; -import "../interfaces/IDelegationManager.sol"; +import {Checkpoints} from "../libraries/Checkpoints.sol"; abstract contract AVSDirectoryStorage is IAVSDirectory { using EnumerableSet for EnumerableSet.Bytes32Set; @@ -26,6 +26,11 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { bytes32 public constant OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH = keccak256("OperatorSetForceDeregistration(address avs,uint32[] operatorSetIds,bytes32 salt,uint256 expiry)"); + /// @notice The EIP-712 typehash for the `MagnitudeAdjustments` struct used by the contract + bytes32 public constant MAGNITUDE_ADJUSTMENT_TYPEHASH = keccak256( + "MagnitudeAdjustments(address operator,MagnitudeAdjustment(address strategy, OperatorSet(address avs, uint32 operatorSetId)[], uint64[] magnitudeDiffs)[],bytes32 salt,uint256 expiry)" + ); + /// @notice The DelegationManager contract for EigenLayer IDelegationManager public immutable delegation; @@ -53,6 +58,33 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { /// @dev Each item is formatted as such: bytes32(abi.encodePacked(avs, uint96(operatorSetId))) mapping(address => EnumerableSet.Bytes32Set) internal _operatorSetsMemberOf; + /// @notice Mapping: operator => avs => operatorSetId => operator registration status + mapping(address => mapping(address => mapping(uint32 => OperatorSetRegistrationStatus))) public operatorSetStatus; + + /// @notice Mapping: operator => strategy => checkpointed totalMagnitude + /// Note that totalMagnitude is monotonically decreasing and only gets updated upon slashing + mapping(address => mapping(IStrategy => Checkpoints.History)) internal _totalMagnitudeUpdate; + + /// @notice Mapping: operator => strategy => operatorSet (encoded) => checkpointed magnitude + mapping(address => mapping(IStrategy => mapping(bytes32 => Checkpoints.History))) internal _magnitudeUpdate; + + /// @notice Mapping: operator => strategy => free available magnitude that can be allocated to operatorSets + /// Decrements whenever allocations take place and increments when deallocations are completed + mapping(address => mapping(IStrategy => uint64)) public freeMagnitude; + + /// @notice Mapping: operator => strategy => PendingFreeMagnitude[] to keep track of pending free magnitude from deallocations + mapping(address => mapping(IStrategy => PendingFreeMagnitude[])) internal _pendingFreeMagnitude; + + /// @notice Mapping: operator => strategy => index pointing to next pendingFreeMagnitude to complete and add to freeMagnitude + mapping(address => mapping(IStrategy => uint256)) internal _nextPendingFreeMagnitudeIndex; + + /// @notice Mapping: operator => strategy => operatorSet (encoded) => list of queuedDeallocation indices + mapping(address => mapping(IStrategy => mapping(bytes32 => uint256[]))) internal _queuedDeallocationIndices; + + /// @notice Mapping: operator => allocation delay (in seconds) for the operator. + /// This determines how long it takes for allocations to take in the future. Can only be set one time for each operator + mapping(address => AllocationDelayDetails) public allocationDelay; + /// @notice Mapping: operatorSet => List of operators that are registered to the operatorSet /// @dev Each key is formatted as such: bytes32(abi.encodePacked(avs, uint96(operatorSetId))) mapping(bytes32 => EnumerableSet.AddressSet) internal _operatorSetMembers; @@ -66,5 +98,5 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ - uint256[43] private __gap; + uint256[35] private __gap; } diff --git a/src/contracts/core/RewardsCoordinatorStorage.sol b/src/contracts/core/RewardsCoordinatorStorage.sol index db7b6f66b..5a8a677b1 100644 --- a/src/contracts/core/RewardsCoordinatorStorage.sol +++ b/src/contracts/core/RewardsCoordinatorStorage.sol @@ -97,9 +97,6 @@ abstract contract RewardsCoordinatorStorage is IRewardsCoordinator { /// @notice Mapping: address => bool to check if the address is permissioned to call createRewardsForAllSubmission mapping(address => bool) public isRewardsForAllSubmitter; - /// @notice Mapping: operator => avs => operatorSetId => OperatorCommissionUpdate history - mapping(address => mapping(address => mapping(uint32 => mapping(RewardType => OperatorCommissionUpdate[])))) public - operatorCommissionUpdates; /// @notice Mapping: avs => rewardsSubmissionForAllEarnersHash => bool to check /// if rewards submission hash for all stakers and operators has been submitted diff --git a/src/contracts/interfaces/IAVSDirectory.sol b/src/contracts/interfaces/IAVSDirectory.sol index dac8aa3c9..4961e2111 100644 --- a/src/contracts/interfaces/IAVSDirectory.sol +++ b/src/contracts/interfaces/IAVSDirectory.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.5.0; +import "./IDelegationManager.sol"; import "./ISignatureUtils.sol"; interface IAVSDirectory is ISignatureUtils { @@ -12,12 +13,58 @@ interface IAVSDirectory is ISignatureUtils { } + /** + * @notice Struct representing the registration status of an operator with an operator set. + * Keeps track of last deregistered timestamp for slashability concerns. + * @param registered whether the operator is registered with the operator set + * @param lastDeregisteredTimestamp the timestamp at which the operator was last deregistered + */ + struct OperatorSetRegistrationStatus { + bool registered; + uint32 lastDeregisteredTimestamp; + } + /// @notice Struct representing an operator set struct OperatorSet { address avs; uint32 operatorSetId; } + /** + * @notice struct used to modify the allocation of slashable magnitude to list of operatorSets + * @param strategy the strategy to allocate magnitude for + * @param expectedTotalMagnitude the expected total magnitude of the operator used to combat against race conditions with slashing + * @param operatorSets the operatorSets to allocate magnitude for + * @param magnitudes the magnitudes to allocate for each operatorSet + */ + struct MagnitudeAllocation { + IStrategy strategy; + uint64 expectedTotalMagnitude; + OperatorSet[] operatorSets; + uint64[] magnitudes; + } + + /** + * @notice struct used for pending free magnitude. Stored in (operator, strategy, operatorSet) mapping + * to be used in completeDeallocations. + * @param magnitudeDiff the amount of magnitude to deallocate + * @param completableTimestamp the timestamp at which the deallocation can be completed, 21 days from when queued + */ + struct PendingFreeMagnitude { + uint64 magnitudeDiff; + uint32 completableTimestamp; + } + + /** + * @notice struct used to store the allocation delay for an operator + * @param isSet whether the allocation delay is set. Can only be configured one time for each operator + * @param allocationDelay the delay in seconds for the operator's allocations + */ + struct AllocationDelayDetails { + bool isSet; + uint32 allocationDelay; + } + /// @notice Emitted when an operator set is created by an AVS. event OperatorSetCreated(OperatorSet operatorSet); @@ -45,6 +92,33 @@ interface IAVSDirectory is ISignatureUtils { /// @notice Emitted when an operator is migrated from M2 registration to operator sets. event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds); + /// @notice Emitted when an operator allocates slashable magnitude to an operator set + event MagnitudeAllocated( + address operator, + IStrategy strategy, + OperatorSet operatorSet, + uint64 magnitudeToAllocate, + uint32 effectTimestamp + ); + + /// @notice Emitted when an operator queues deallocations of slashable magnitude from an operator set + event MagnitudeQueueDeallocated( + address operator, + IStrategy strategy, + OperatorSet operatorSet, + uint64 magnitudeToDeallocate, + uint32 completableTimestamp + ); + + /// @notice Emitted when an operator completes deallocations of slashable magnitude from an operator set + /// and adds back magnitude to free allocatable magnitude + event MagnitudeDeallocationCompleted( + address operator, IStrategy strategy, OperatorSet operatorSet, uint64 freeMagnitudeAdded + ); + + /// @notice Emitted when an operator is slashed by an operator set for a strategy + event OperatorSlashed(address operator, uint32 operatorSetId, IStrategy strategy, uint16 bipsToSlash); + /** * * EXTERNAL FUNCTIONS @@ -129,7 +203,9 @@ interface IAVSDirectory is ISignatureUtils { ) external; /** - * @notice Called by the AVS's service manager contract to register an operator with the AVS. + * @notice Legacy function called by the AVS's service manager contract + * to register an operator with the AVS. NOTE: this function will be deprecated in a future release + * after the slashing release. New AVSs should use `registerOperatorToOperatorSets` instead. * * @param operator The address of the operator to register. * @param operatorSignature The signature, salt, and expiry of the operator's signature. @@ -143,7 +219,9 @@ interface IAVSDirectory is ISignatureUtils { ) external; /** - * @notice Called by an AVS to deregister an operator from the AVS. + * @notice Legacy function called by an AVS to deregister an operator from the AVS. + * NOTE: this function will be deprecated in a future release after the slashing release. + * New AVSs integrating should use `deregisterOperatorFromOperatorSets` instead. * * @param operator The address of the operator to deregister. * @@ -153,6 +231,60 @@ interface IAVSDirectory is ISignatureUtils { address operator ) external; + /** + * @notice Modifies the propotions of slashable stake allocated to a list of operatorSets for a set of strategies + * @param operator address to modify allocations for + * @param allocations array of magnitude adjustments for multiple strategies and corresponding operator sets + * @param operatorSignature signature of the operator if msg.sender is not the operator + * @dev updates freeMagnitude for the updated strategies + * @dev must be called by the operator + */ + function modifyAllocations( + address operator, + MagnitudeAllocation[] calldata allocations, + SignatureWithSaltAndExpiry calldata operatorSignature + ) external; + + /** + * @notice For all pending deallocations that have become completable, their pending free magnitude can be + * added back to the free magnitude of the (operator, strategy) amount. This function takes a list of strategies + * and adds all completable deallocations for each strategy, updating the freeMagnitudes of the operator + * + * @param operator address to complete deallocations for + * @param strategies a list of strategies to complete deallocations for + * + * @dev can be called permissionlessly by anyone + */ + function updateFreeMagnitude( + address operator, + IStrategy[] calldata strategies, + uint16[] calldata numToComplete + ) external; + + /** + * @notice Called by an AVS to slash an operator for given operatorSetId, list of strategies, and bipsToSlash. + * For each given (operator, operatorSetId, strategy) tuple, bipsToSlash + * bips of the operatorSet's slashable stake allocation will be slashed + * + * @param operator the address to slash + * @param operatorSetId the ID of the operatorSet the operator is being slashed on behalf of + * @param strategies the set of strategies to slash + * @param bipsToSlash the number of bips to slash, this will be proportional to the + * operator's slashable stake allocation for the operatorSet + */ + function slashOperator( + address operator, + uint32 operatorSetId, + IStrategy[] calldata strategies, + uint16 bipsToSlash + ) external; + + /** + * @notice Called by operators to set their allocation delay. Can only be set one time. + * @param delay the allocation delay in seconds + */ + function initializeAllocationDelay(uint32 delay) external; + /** * @notice Called by an AVS to emit an `AVSMetadataURIUpdated` event indicating the information has updated. * @@ -176,6 +308,58 @@ interface IAVSDirectory is ISignatureUtils { * VIEW FUNCTIONS * */ + + /// @dev The initial total magnitude for an operator + function INITIAL_TOTAL_MAGNITUDE() external view returns (uint64); + + /** + * @notice Get the allocatable magnitude for an operator and strategy based on number of pending deallocations + * that could be completed at the same time. This is the sum of freeMagnitude and the sum of all pending completable deallocations. + * @param operator the operator to get the allocatable magnitude for + * @param strategy the strategy to get the allocatable magnitude for + * @param numToComplete the number of pending free magnitudes deallocations to complete, 0 to complete all (uint8 max 256) + */ + function getAllocatableMagnitude( + address operator, + IStrategy strategy, + uint16 numToComplete + ) external view returns (uint64); + + /** + * @notice Get the allocation delay (in seconds) for an operator. Can only be configured one-time + * from calling initializeAllocationDelay. + * @param operator the operator to get the allocation delay for + * @return isSet whether the allocation delay is set and the operator can call `modifyAllocations` + * @return allocationDelay the allocation delay in seconds + */ + function getAllocationDelay(address operator) external view returns (bool, uint32); + + /** + * @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days + * @param operator the operator to check slashability for + * @param operatorSet the operatorSet to check slashability for + * @return bool if the operator is slashable by the operatorSet + */ + function isOperatorSlashable(address operator, OperatorSet memory operatorSet) external view returns (bool); + + /** + * @param operator the operator to get the slashable ppm for + * @param operatorSet the operatorSet to get the slashable ppm for + * @param strategies the strategies to get the slashable ppm for + * @param timestamp the timestamp to get the slashable ppm for for + * @param linear whether the search should be linear (from the most recent) or binary + * + * @return slashablePPM the slashable ppm of the given list of strategies allocated to + * the given OperatorSet for the given operator and timestamp + */ + function getSlashablePPM( + address operator, + OperatorSet calldata operatorSet, + IStrategy[] calldata strategies, + uint32 timestamp, + bool linear + ) external view returns (uint24[] memory); + function operatorSaltIsSpent(address operator, bytes32 salt) external view returns (bool); function isMember(address operator, OperatorSet memory operatorSet) external view returns (bool); @@ -184,6 +368,8 @@ interface IAVSDirectory is ISignatureUtils { function isOperatorSet(address avs, uint32 operatorSetId) external view returns (bool); + function operatorSetMemberCount(address avs, uint32 operatorSetId) external view returns (uint256); + /** * @notice Returns operator set an operator is registered to in the order they were registered. * @param operator The operator address to query. @@ -279,6 +465,20 @@ interface IAVSDirectory is ISignatureUtils { uint256 expiry ) external view returns (bytes32); + /** + * @notice Calculates the digest hash to be signed by an operator to modify magnitude allocations + * @param operator The operator to allocate or deallocate magnitude for. + * @param allocations The magnitude allocations/deallocations to be made. + * @param salt A unique and single use value associated with the approver signature. + * @param expiry Time after which the approver's signature becomes invalid. + */ + function calculateMagnitudeAllocationDigestHash( + address operator, + MagnitudeAllocation[] calldata allocations, + bytes32 salt, + uint256 expiry + ) external view returns (bytes32); + /// @notice Getter function for the current EIP-712 domain separator for this contract. /// @dev The domain separator will change in the event of a fork that changes the ChainID. function domainSeparator() external view returns (bytes32); diff --git a/src/contracts/interfaces/IRewardsCoordinator.sol b/src/contracts/interfaces/IRewardsCoordinator.sol index 75dcff01e..eefe1c6fe 100644 --- a/src/contracts/interfaces/IRewardsCoordinator.sol +++ b/src/contracts/interfaces/IRewardsCoordinator.sol @@ -137,17 +137,6 @@ interface IRewardsCoordinator { * using `OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP` instead of `GENESIS_REWARDS_TIMESTAMP` and * `OPERATOR_SET_MAX_RETROACTIVE_LENGTH` instead of `MAX_RETROACTIVE_LENGTH` */ - - struct OperatorSetRewardsSubmission { - RewardType rewardType; - uint32 operatorSetId; - StrategyAndMultiplier[] strategiesAndMultipliers; - IERC20 token; - uint256 amount; - uint32 startTimestamp; - uint32 duration; - } - struct OperatorSetRewardsSubmission { RewardType rewardType; uint32 operatorSetId; diff --git a/src/contracts/libraries/Checkpoints.sol b/src/contracts/libraries/Checkpoints.sol new file mode 100644 index 000000000..4c063b006 --- /dev/null +++ b/src/contracts/libraries/Checkpoints.sol @@ -0,0 +1,287 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "@openzeppelin-upgrades-v4.9.0/contracts/utils/math/MathUpgradeable.sol"; +import "@openzeppelin-upgrades-v4.9.0/contracts/utils/math/SafeCastUpgradeable.sol"; + +/** + * @title Library for handling checkpoints as part of allocating and slashing. + * @notice This library is using OpenZeppelin's CheckpointsUpgradeable library (v4.9.0) + * and removes structs and functions that are unessential. + * Interfaces and structs are renamed for clarity and usage (timestamps, etc). + * Some additional functions have also been added for convenience. + * @dev This library defines the `History` struct, for checkpointing values as they change at different points in + * time, and later looking up past values by block number. See {Votes} as an example. + * + * To create a history of checkpoints define a variable type `Checkpoints.History` in your contract, and store a new + * checkpoint for the current transaction block using the {push} function. + * + * _Available since v4.5._ + */ +library Checkpoints { + struct History { + Checkpoint[] _checkpoints; + } + + struct Checkpoint { + uint32 _key; + uint224 _value; + } + + /** + * @dev Pushes a (`key`, `value`) pair into a History so that it is stored as the checkpoint. + * + * Returns previous value and new value. + */ + function push(History storage self, uint32 key, uint224 value) internal returns (uint224, uint224) { + return _insert(self._checkpoints, key, value); + } + + /** + * @dev Returns the value in the first (oldest) checkpoint with key greater or equal than the search key, or zero if there is none. + */ + function lowerLookup(History storage self, uint32 key) internal view returns (uint224) { + uint256 len = self._checkpoints.length; + uint256 pos = _lowerBinaryLookup(self._checkpoints, key, 0, len); + return pos == len ? 0 : _unsafeAccess(self._checkpoints, pos)._value; + } + + /** + * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero if there is none. + */ + function upperLookup(History storage self, uint32 key) internal view returns (uint224) { + uint256 len = self._checkpoints.length; + uint256 pos = _upperBinaryLookup(self._checkpoints, key, 0, len); + return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value; + } + + /** + * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero if there is none. + * + * NOTE: This is a variant of {upperLookup} that is optimised to find "recent" checkpoint (checkpoints with high keys). + */ + function upperLookupRecent(History storage self, uint32 key) internal view returns (uint224) { + uint256 len = self._checkpoints.length; + + uint256 low = 0; + uint256 high = len; + + if (len > 5) { + uint256 mid = len - MathUpgradeable.sqrt(len); + if (key < _unsafeAccess(self._checkpoints, mid)._key) { + high = mid; + } else { + low = mid + 1; + } + } + + uint256 pos = _upperBinaryLookup(self._checkpoints, key, low, high); + + return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value; + } + + /** + * @dev Returns the value in the most recent checkpoint, or zero if there are no checkpoints. + */ + function latest(History storage self) internal view returns (uint224) { + uint256 pos = self._checkpoints.length; + return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value; + } + + /** + * @dev Returns whether there is a checkpoint in the structure (i.e. it is not empty), and if so the key and value + * in the most recent checkpoint. + */ + function latestCheckpoint(History storage self) internal view returns (bool exists, uint32 _key, uint224 _value) { + uint256 pos = self._checkpoints.length; + if (pos == 0) { + return (false, 0, 0); + } else { + Checkpoint memory ckpt = _unsafeAccess(self._checkpoints, pos - 1); + return (true, ckpt._key, ckpt._value); + } + } + + /** + * @dev Returns the number of checkpoint. + */ + function length(History storage self) internal view returns (uint256) { + return self._checkpoints.length; + } + + /** + * @dev Pushes a (`key`, `value`) pair into an ordered list of checkpoints, either by inserting a new checkpoint, + * or by updating the last one. + */ + function _insert(Checkpoint[] storage self, uint32 key, uint224 value) private returns (uint224, uint224) { + uint256 pos = self.length; + + if (pos > 0) { + // Copying to memory is important here. + Checkpoint memory last = _unsafeAccess(self, pos - 1); + + // Checkpoint keys must be non-decreasing. + require(last._key <= key, "Checkpoint: decreasing keys"); + + // Update or push new checkpoint + if (last._key == key) { + _unsafeAccess(self, pos - 1)._value = value; + } else { + self.push(Checkpoint({_key: key, _value: value})); + } + return (last._value, value); + } else { + self.push(Checkpoint({_key: key, _value: value})); + return (0, value); + } + } + + /** + * @dev Return the index of the last (most recent) checkpoint with key lower or equal than the search key, or `high` if there is none. + * `low` and `high` define a section where to do the search, with inclusive `low` and exclusive `high`. + * + * WARNING: `high` should not be greater than the array's length. + */ + function _upperBinaryLookup( + Checkpoint[] storage self, + uint32 key, + uint256 low, + uint256 high + ) private view returns (uint256) { + while (low < high) { + uint256 mid = MathUpgradeable.average(low, high); + if (_unsafeAccess(self, mid)._key > key) { + high = mid; + } else { + low = mid + 1; + } + } + return high; + } + + /** + * @dev Return the index of the first (oldest) checkpoint with key is greater or equal than the search key, or `high` if there is none. + * `low` and `high` define a section where to do the search, with inclusive `low` and exclusive `high`. + * + * WARNING: `high` should not be greater than the array's length. + */ + function _lowerBinaryLookup( + Checkpoint[] storage self, + uint32 key, + uint256 low, + uint256 high + ) private view returns (uint256) { + while (low < high) { + uint256 mid = MathUpgradeable.average(low, high); + if (_unsafeAccess(self, mid)._key < key) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + + /** + * @dev Access an element of the array without performing bounds check. The position is assumed to be within bounds. + */ + function _unsafeAccess( + Checkpoint[] storage self, + uint256 pos + ) private pure returns (Checkpoint storage result) { + assembly { + mstore(0, self.slot) + result.slot := add(keccak256(0, 0x20), pos) + } + } + + /** + * + * ADDITIONAL FUNCTIONS FROM EIGEN-LABS + * + */ + + /** + * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero if there is none. + * This function is a linear search for keys that are close to the end of the array. + */ + function upperLookupLinear(History storage self, uint32 key) internal view returns (uint224) { + uint256 len = self._checkpoints.length; + for (uint256 i = len; i > 0; --i) { + Checkpoint storage current = _unsafeAccess(self._checkpoints, i - 1); + if (current._key <= key) { + return current._value; + } + } + return 0; + } + + /** + * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero if there is none. + * In addition, returns the position of the checkpoint in the array. + * + * NOTE: That if value != 0 && pos == 0, then that means the value is the first checkpoint and actually exists + * a checkpoint DNE iff value == 0 && pos == 0 + */ + function upperLookupWithPos(History storage self, uint32 key) internal view returns (uint224, uint256) { + uint256 len = self._checkpoints.length; + uint256 pos = _upperBinaryLookup(self._checkpoints, key, 0, len); + return pos == 0 ? (0, 0) : (_unsafeAccess(self._checkpoints, pos - 1)._value, pos - 1); + } + + /** + * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero if there is none. + * In addition, returns the position of the checkpoint in the array. + * + * NOTE: This is a variant of {upperLookup} that is optimised to find "recent" checkpoint (checkpoints with high keys). + * NOTE: That if value != 0 && pos == 0, then that means the value is the first checkpoint and actually exists + * a checkpoint DNE iff value == 0 && pos == 0 => value == 0 + */ + function upperLookupRecentWithPos(History storage self, uint32 key) internal view returns (uint224, uint256, uint256) { + uint256 len = self._checkpoints.length; + + uint256 low = 0; + uint256 high = len; + + if (len > 5) { + uint256 mid = len - MathUpgradeable.sqrt(len); + if (key < _unsafeAccess(self._checkpoints, mid)._key) { + high = mid; + } else { + low = mid + 1; + } + } + + uint256 pos = _upperBinaryLookup(self._checkpoints, key, low, high); + + return pos == 0 ? (0, 0, len) : (_unsafeAccess(self._checkpoints, pos - 1)._value, pos - 1, len); + } + + /// @notice WARNING: this function is only used because of the invariant property + /// that from the current key, all future checkpointed magnitude values are strictly > current value. + /// Use function with extreme care for other situations. + function decrementAtAndFutureCheckpoints( + History storage self, + uint32 key, + uint224 decrementValue + ) internal { + (uint224 value, uint256 pos, uint256 len) = upperLookupRecentWithPos(self, key); + + // if there is no checkpoint, return + if (value == 0 && pos == 0) { + pos = type(uint256).max; + } + + while (pos < len) { + Checkpoint storage current = _unsafeAccess(self._checkpoints, pos); + + // reverts from underflow. Expected to never happen in our usage + current._value -= decrementValue; + + unchecked { + ++pos; + } + } + } +} diff --git a/src/test/mocks/AVSDirectoryMock.sol b/src/test/mocks/AVSDirectoryMock.sol index 1cd48c0fb..5523cb713 100644 --- a/src/test/mocks/AVSDirectoryMock.sol +++ b/src/test/mocks/AVSDirectoryMock.sol @@ -36,19 +36,62 @@ contract AVSDirectoryMock is IAVSDirectory, Test { function deregisterOperatorFromAVS(address operator) external {} + function modifyAllocations( + address operator, + MagnitudeAllocation[] calldata allocations, + SignatureWithSaltAndExpiry calldata operatorSignature + ) external {} + + function updateFreeMagnitude( + address operator, + IStrategy[] calldata strategies, + uint16[] calldata freeMagnitudes + ) external {} + + function initializeAllocationDelay( + uint32 delay + ) external {} + + function slashOperator( + address operator, + uint32 operatorSetId, + IStrategy[] calldata strategies, + uint16 bipsToSlash + ) external {} + function updateAVSMetadataURI(string calldata metadataURI) external {} function cancelSalt(bytes32 salt) external {} + function INITIAL_TOTAL_MAGNITUDE() external view returns (uint64) {} + function operatorSaltIsSpent(address operator, bytes32 salt) external view returns (bool) {} function isMember(address avs, address operator, uint32 operatorSetId) external view returns (bool) {} function isOperatorSetAVS(address avs) external view returns (bool) {} - function isOperatorSet(address avs, uint32 operatorSetId) external view returns (bool) { - return true; - } + function isOperatorSet(address avs, uint32 operatorSetId) external view returns (bool) {} + + function isOperatorSlashable(address operator, OperatorSet memory operatorSet) external view returns (bool) {} + + function operatorSetMemberCount(address avs, uint32 operatorSetId) external view returns (uint256) {} + + function getSlashablePPM( + address operator, + OperatorSet calldata operatorSet, + IStrategy[] calldata strategies, + uint32 timestamp, + bool linear + ) public view returns (uint24[] memory) {} + + function getAllocatableMagnitude( + address operator, + IStrategy strategy, + uint16 numToComplete + ) external view returns (uint64) {} + + function getAllocationDelay(address operator) external view returns (bool, uint32) {} function calculateOperatorAVSRegistrationDigestHash( address operator, @@ -71,6 +114,13 @@ contract AVSDirectoryMock is IAVSDirectory, Test { uint256 expiry ) external view returns (bytes32) {} + function calculateMagnitudeAllocationDigestHash( + address operator, + MagnitudeAllocation[] calldata allocations, + bytes32 salt, + uint256 expiry + ) external view returns (bytes32) {} + /// @notice Getter function for the current EIP-712 domain separator for this contract. /// @dev The domain separator will change in the event of a fork that changes the ChainID. function domainSeparator() external view returns (bytes32) {} From 275694fcbeef607b5afe956ddc914d1f29f1f85f Mon Sep 17 00:00:00 2001 From: Gautham Anant <32277907+gpsanant@users.noreply.github.com> Date: Tue, 27 Aug 2024 07:58:06 -0700 Subject: [PATCH 08/47] start on scaledShares (#695) * feat: set allocations * cleanup * fixes * fix perms on modifyAllocations * fix initialization issues * start on scaledShares * feat: scale shares on deposits into SM * chore: cleanup and comment out tests * feat: withdraws and using timestamps * chore: delete and comment test files * fix: descale timestamp fix descaledShares timestamp and added back deleted test files but commented out * chore: add back test files * fix: _delegate with scaledshares also removed scaling from strategymanager and added some additional view functions Note _delegate still has a pending todo * fix: _delegate scaled shares * feat: eigenpodManager scaled shares (#706) * feat: draft for scaled shares epm * chore: fix compile * chore: fmt * nit: comment * fix: add comment suggestion Co-authored-by: Gautham Anant <32277907+gpsanant@users.noreply.github.com> --------- Co-authored-by: Gautham Anant <32277907+gpsanant@users.noreply.github.com> * feat: move allocationDelay to delegationManager * fix: incorrect inequality check * chore: rename epm internal function to scaled * fix: external interface nits * chore: cleanup sharescaling lib * chore: fix variable naming nit --------- Co-authored-by: Michael Sun Co-authored-by: Michael Sun <35479365+8sunyuan@users.noreply.github.com> --- .../holesky/M2_Deploy_From_Scratch.s.sol | 2 +- script/deploy/local/Deploy_From_Scratch.s.sol | 2 +- script/deploy/mainnet/M1_Deploy.s.sol | 509 ++ script/deploy/mainnet/M2Deploy.s.sol | 327 + .../deploy/mainnet/M2_Mainnet_Upgrade.s.sol | 670 +- .../delegationFaucet/DelegationFaucet.sol | 216 - .../DelegationFaucetStaker.sol | 26 - .../DeployDelegationFaucet.sol | 84 - src/contracts/core/AVSDirectory.sol | 94 +- src/contracts/core/DelegationManager.sol | 532 +- .../core/DelegationManagerStorage.sol | 41 +- src/contracts/core/StrategyManager.sol | 147 +- src/contracts/core/StrategyManagerStorage.sol | 18 +- src/contracts/interfaces/IAVSDirectory.sol | 42 +- .../interfaces/IDelegationManager.sol | 115 +- src/contracts/interfaces/IEigenPodManager.sol | 7 +- src/contracts/interfaces/IStrategyManager.sol | 27 +- src/contracts/libraries/ShareScalingLib.sol | 121 + src/contracts/pods/EigenPodManager.sol | 147 +- src/contracts/pods/EigenPodManagerStorage.sol | 7 +- src/contracts/strategies/StrategyBase.sol | 6 +- src/test/Delegation.t.sol | 996 +-- src/test/DelegationFaucet.t.sol | 513 -- src/test/DepositWithdraw.t.sol | 986 +-- src/test/EigenLayerDeployer.t.sol | 545 +- src/test/EigenLayerTestHelper.t.sol | 1004 +-- src/test/Pausable.t.sol | 166 +- src/test/Strategy.t.sol | 110 +- src/test/Withdrawals.t.sol | 563 +- src/test/harnesses/EigenPodManagerWrapper.sol | 4 +- src/test/integration/IntegrationBase.t.sol | 8 +- src/test/integration/IntegrationChecks.t.sol | 4 +- .../integration/IntegrationDeployer.t.sol | 6 +- .../Deposit_Delegate_Queue_Complete.t.sol | 4 +- ...Deposit_Delegate_Redelegate_Complete.t.sol | 26 +- ...Deposit_Delegate_Undelegate_Complete.t.sol | 12 +- src/test/integration/users/User.t.sol | 24 +- src/test/mocks/AVSDirectoryMock.sol | 12 +- src/test/mocks/DelegationManagerMock.sol | 53 +- src/test/mocks/EigenPodManagerMock.sol | 10 +- src/test/mocks/StrategyManagerMock.sol | 13 +- src/test/unit/AVSDirectoryUnit.t.sol | 2 +- src/test/unit/DelegationUnit.t.sol | 6636 ++++++++--------- src/test/unit/EigenPodManagerUnit.t.sol | 102 +- src/test/unit/StrategyManagerUnit.t.sol | 134 +- 45 files changed, 7822 insertions(+), 7251 deletions(-) create mode 100644 script/deploy/mainnet/M1_Deploy.s.sol create mode 100644 script/deploy/mainnet/M2Deploy.s.sol delete mode 100644 script/whitelist/delegationFaucet/DelegationFaucet.sol delete mode 100644 script/whitelist/delegationFaucet/DelegationFaucetStaker.sol delete mode 100644 script/whitelist/delegationFaucet/DeployDelegationFaucet.sol create mode 100644 src/contracts/libraries/ShareScalingLib.sol delete mode 100644 src/test/DelegationFaucet.t.sol diff --git a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol index c03178c07..5b7fdc931 100644 --- a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol +++ b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol @@ -77,7 +77,7 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); avsDirectoryImplementation = new AVSDirectory(delegationManager); delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( IETHPOSDeposit(ETHPOSDepositAddress), diff --git a/script/deploy/local/Deploy_From_Scratch.s.sol b/script/deploy/local/Deploy_From_Scratch.s.sol index b03156972..cce88716b 100644 --- a/script/deploy/local/Deploy_From_Scratch.s.sol +++ b/script/deploy/local/Deploy_From_Scratch.s.sol @@ -216,7 +216,7 @@ contract DeployFromScratch is Script, Test { // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); - strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher); + strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher, avsDirectory); avsDirectoryImplementation = new AVSDirectory(delegation); slasherImplementation = new Slasher(strategyManager, delegation); eigenPodManagerImplementation = new EigenPodManager( diff --git a/script/deploy/mainnet/M1_Deploy.s.sol b/script/deploy/mainnet/M1_Deploy.s.sol new file mode 100644 index 000000000..546b6f31d --- /dev/null +++ b/script/deploy/mainnet/M1_Deploy.s.sol @@ -0,0 +1,509 @@ +// // SPDX-License-Identifier: BUSL-1.1 +// pragma solidity ^0.8.12; + +// import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; +// import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +// import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +// import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; + +// import "../../../src/contracts/interfaces/IETHPOSDeposit.sol"; + +// import "../../../src/contracts/core/StrategyManager.sol"; +// import "../../../src/contracts/core/Slasher.sol"; +// import "../../../src/contracts/core/DelegationManager.sol"; + +// import "../../../src/contracts/strategies/StrategyBaseTVLLimits.sol"; + +// import "../../../src/contracts/pods/EigenPod.sol"; +// import "../../../src/contracts/pods/EigenPodManager.sol"; + +// import "../../../src/contracts/permissions/PauserRegistry.sol"; + +// import "../../../src/test/mocks/EmptyContract.sol"; +// import "../../../src/test/mocks/ETHDepositMock.sol"; + +// import "forge-std/Script.sol"; +// import "forge-std/Test.sol"; + +// // # To load the variables in the .env file +// // source .env + +// // # To deploy and verify our contract +// // forge script script/M1_Deploy.s.sol:Deployer_M1 --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast -vvvv +// contract Deployer_M1 is Script, Test { +// Vm cheats = Vm(HEVM_ADDRESS); + +// // struct used to encode token info in config file +// struct StrategyConfig { +// uint256 maxDeposits; +// uint256 maxPerDeposit; +// address tokenAddress; +// string tokenSymbol; +// } + +// string public deployConfigPath = string(bytes("script/M1_deploy.config.json")); + +// // EigenLayer Contracts +// ProxyAdmin public eigenLayerProxyAdmin; +// PauserRegistry public eigenLayerPauserReg; +// Slasher public slasher; +// Slasher public slasherImplementation; +// DelegationManager public delegation; +// DelegationManager public delegationImplementation; +// StrategyManager public strategyManager; +// StrategyManager public strategyManagerImplementation; +// EigenPodManager public eigenPodManager; +// EigenPodManager public eigenPodManagerImplementation; +// UpgradeableBeacon public eigenPodBeacon; +// EigenPod public eigenPodImplementation; +// StrategyBase public baseStrategyImplementation; + +// EmptyContract public emptyContract; + +// address executorMultisig; +// address operationsMultisig; +// address pauserMultisig; + +// // the ETH2 deposit contract -- if not on mainnet, we deploy a mock as stand-in +// IETHPOSDeposit public ethPOSDeposit; + +// // strategies deployed +// StrategyBaseTVLLimits[] public deployedStrategyArray; + +// // IMMUTABLES TO SET +// uint256 REQUIRED_BALANCE_WEI; +// uint256 MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR; +// uint64 GOERLI_GENESIS_TIME = 1616508000; + +// // OTHER DEPLOYMENT PARAMETERS +// uint256 STRATEGY_MANAGER_INIT_PAUSED_STATUS; +// uint256 SLASHER_INIT_PAUSED_STATUS; +// uint256 DELEGATION_INIT_PAUSED_STATUS; +// uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS; +// uint256 EIGENPOD_MANAGER_MAX_PODS; + +// // one week in blocks -- 50400 +// uint32 STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS; + +// function run() external { +// // read and log the chainID +// uint256 chainId = block.chainid; +// emit log_named_uint("You are deploying on ChainID", chainId); + +// // READ JSON CONFIG DATA +// string memory config_data = vm.readFile(deployConfigPath); +// // bytes memory parsedData = vm.parseJson(config_data); + +// STRATEGY_MANAGER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".strategyManager.init_paused_status"); +// SLASHER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".slasher.init_paused_status"); +// DELEGATION_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".delegation.init_paused_status"); +// EIGENPOD_MANAGER_MAX_PODS = stdJson.readUint(config_data, ".eigenPodManager.max_pods"); +// EIGENPOD_MANAGER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".eigenPodManager.init_paused_status"); + +// STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS = uint32( +// stdJson.readUint(config_data, ".strategyManager.init_withdrawal_delay_blocks") +// ); + +// REQUIRED_BALANCE_WEI = stdJson.readUint(config_data, ".eigenPod.REQUIRED_BALANCE_WEI"); +// MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR = stdJson.readUint( +// config_data, +// ".eigenPod.MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR" +// ); + +// // tokens to deploy strategies for +// StrategyConfig[] memory strategyConfigs; + +// executorMultisig = stdJson.readAddress(config_data, ".multisig_addresses.executorMultisig"); +// operationsMultisig = stdJson.readAddress(config_data, ".multisig_addresses.operationsMultisig"); +// pauserMultisig = stdJson.readAddress(config_data, ".multisig_addresses.pauserMultisig"); +// // load token list +// bytes memory strategyConfigsRaw = stdJson.parseRaw(config_data, ".strategies"); +// strategyConfigs = abi.decode(strategyConfigsRaw, (StrategyConfig[])); + +// require(executorMultisig != address(0), "executorMultisig address not configured correctly!"); +// require(operationsMultisig != address(0), "operationsMultisig address not configured correctly!"); + +// // START RECORDING TRANSACTIONS FOR DEPLOYMENT +// vm.startBroadcast(); + +// // deploy proxy admin for ability to upgrade proxy contracts +// eigenLayerProxyAdmin = new ProxyAdmin(); + +// //deploy pauser registry +// { +// address[] memory pausers = new address[](3); +// pausers[0] = executorMultisig; +// pausers[1] = operationsMultisig; +// pausers[2] = pauserMultisig; +// eigenLayerPauserReg = new PauserRegistry(pausers, executorMultisig); +// } + +// /** +// * First, deploy upgradeable proxy contracts that **will point** to the implementations. Since the implementation contracts are +// * not yet deployed, we give these proxies an empty contract as the initial implementation, to act as if they have no code. +// */ +// emptyContract = new EmptyContract(); +// delegation = DelegationManager( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); +// strategyManager = StrategyManager( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); +// slasher = Slasher( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); +// eigenPodManager = EigenPodManager( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); + +// // 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, +// GOERLI_GENESIS_TIME +// ); + +// eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); + +// // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs +// delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); +// strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher, avsDirectory); +// slasherImplementation = new Slasher(strategyManager, delegation); +// eigenPodManagerImplementation = new EigenPodManager( +// ethPOSDeposit, +// eigenPodBeacon, +// strategyManager, +// slasher, +// delegation +// ); + +// // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(delegation))), +// address(delegationImplementation), +// abi.encodeWithSelector( +// DelegationManager.initialize.selector, +// executorMultisig, +// eigenLayerPauserReg, +// DELEGATION_INIT_PAUSED_STATUS +// ) +// ); +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(strategyManager))), +// address(strategyManagerImplementation), +// abi.encodeWithSelector( +// StrategyManager.initialize.selector, +// executorMultisig, +// operationsMultisig, +// eigenLayerPauserReg, +// STRATEGY_MANAGER_INIT_PAUSED_STATUS +// ) +// ); +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(slasher))), +// address(slasherImplementation), +// abi.encodeWithSelector( +// Slasher.initialize.selector, +// executorMultisig, +// eigenLayerPauserReg, +// SLASHER_INIT_PAUSED_STATUS +// ) +// ); +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(eigenPodManager))), +// address(eigenPodManagerImplementation), +// abi.encodeWithSelector( +// EigenPodManager.initialize.selector, +// executorMultisig, +// eigenLayerPauserReg, +// EIGENPOD_MANAGER_INIT_PAUSED_STATUS +// ) +// ); + +// // deploy StrategyBaseTVLLimits contract implementation +// baseStrategyImplementation = new StrategyBaseTVLLimits(strategyManager); +// // create upgradeable proxies that each point to the implementation and initialize them +// for (uint256 i = 0; i < strategyConfigs.length; ++i) { +// deployedStrategyArray.push( +// StrategyBaseTVLLimits( +// address( +// new TransparentUpgradeableProxy( +// address(baseStrategyImplementation), +// address(eigenLayerProxyAdmin), +// abi.encodeWithSelector( +// StrategyBaseTVLLimits.initialize.selector, +// strategyConfigs[i].maxPerDeposit, +// strategyConfigs[i].maxDeposits, +// IERC20(strategyConfigs[i].tokenAddress), +// eigenLayerPauserReg +// ) +// ) +// ) +// ) +// ); +// } + +// eigenLayerProxyAdmin.transferOwnership(executorMultisig); +// eigenPodBeacon.transferOwnership(executorMultisig); + +// // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT +// vm.stopBroadcast(); + +// // CHECK CORRECTNESS OF DEPLOYMENT +// _verifyContractsPointAtOneAnother( +// delegationImplementation, +// strategyManagerImplementation, +// slasherImplementation, +// eigenPodManagerImplementation +// ); +// _verifyContractsPointAtOneAnother( +// delegation, +// strategyManager, +// slasher, +// eigenPodManager +// ); +// _verifyImplementationsSetCorrectly(); +// _verifyInitialOwners(); +// _checkPauserInitializations(); +// _verifyInitializationParams(); + +// // WRITE JSON DATA +// string memory parent_object = "parent object"; + +// string memory deployed_strategies = "strategies"; +// for (uint256 i = 0; i < strategyConfigs.length; ++i) { +// vm.serializeAddress(deployed_strategies, strategyConfigs[i].tokenSymbol, address(deployedStrategyArray[i])); +// } +// string memory deployed_strategies_output = vm.serializeAddress( +// deployed_strategies, +// strategyConfigs[strategyConfigs.length - 1].tokenSymbol, +// address(deployedStrategyArray[strategyConfigs.length - 1]) +// ); + +// string memory deployed_addresses = "addresses"; +// vm.serializeAddress(deployed_addresses, "eigenLayerProxyAdmin", address(eigenLayerProxyAdmin)); +// vm.serializeAddress(deployed_addresses, "eigenLayerPauserReg", address(eigenLayerPauserReg)); +// vm.serializeAddress(deployed_addresses, "slasher", address(slasher)); +// vm.serializeAddress(deployed_addresses, "slasherImplementation", address(slasherImplementation)); +// vm.serializeAddress(deployed_addresses, "delegation", address(delegation)); +// vm.serializeAddress(deployed_addresses, "delegationImplementation", address(delegationImplementation)); +// vm.serializeAddress(deployed_addresses, "strategyManager", address(strategyManager)); +// vm.serializeAddress( +// deployed_addresses, +// "strategyManagerImplementation", +// address(strategyManagerImplementation) +// ); +// vm.serializeAddress(deployed_addresses, "eigenPodManager", address(eigenPodManager)); +// vm.serializeAddress( +// deployed_addresses, +// "eigenPodManagerImplementation", +// address(eigenPodManagerImplementation) +// ); +// vm.serializeAddress(deployed_addresses, "eigenPodBeacon", address(eigenPodBeacon)); +// vm.serializeAddress(deployed_addresses, "eigenPodImplementation", address(eigenPodImplementation)); +// vm.serializeAddress(deployed_addresses, "baseStrategyImplementation", address(baseStrategyImplementation)); +// vm.serializeAddress(deployed_addresses, "emptyContract", address(emptyContract)); +// string memory deployed_addresses_output = vm.serializeString( +// deployed_addresses, +// "strategies", +// deployed_strategies_output +// ); + +// string memory parameters = "parameters"; +// vm.serializeAddress(parameters, "executorMultisig", executorMultisig); +// string memory parameters_output = vm.serializeAddress(parameters, "operationsMultisig", operationsMultisig); + +// string memory chain_info = "chainInfo"; +// vm.serializeUint(chain_info, "deploymentBlock", block.number); +// string memory chain_info_output = vm.serializeUint(chain_info, "chainId", chainId); + +// // serialize all the data +// vm.serializeString(parent_object, deployed_addresses, deployed_addresses_output); +// vm.serializeString(parent_object, chain_info, chain_info_output); +// string memory finalJson = vm.serializeString(parent_object, parameters, parameters_output); +// vm.writeJson(finalJson, "script/output/M1_deployment_data.json"); +// } + +// function _verifyContractsPointAtOneAnother( +// DelegationManager delegationContract, +// StrategyManager strategyManagerContract, +// Slasher slasherContract, +// EigenPodManager eigenPodManagerContract +// ) internal view { +// require(delegationContract.slasher() == slasher, "delegation: slasher address not set correctly"); +// require( +// delegationContract.strategyManager() == strategyManager, +// "delegation: strategyManager address not set correctly" +// ); + +// require(strategyManagerContract.slasher() == slasher, "strategyManager: slasher address not set correctly"); +// require( +// strategyManagerContract.delegation() == delegation, +// "strategyManager: delegation address not set correctly" +// ); +// require( +// strategyManagerContract.eigenPodManager() == eigenPodManager, +// "strategyManager: eigenPodManager address not set correctly" +// ); + +// require(slasherContract.strategyManager() == strategyManager, "slasher: strategyManager not set correctly"); +// require(slasherContract.delegation() == delegation, "slasher: delegation not set correctly"); + +// require( +// eigenPodManagerContract.ethPOS() == ethPOSDeposit, +// " eigenPodManager: ethPOSDeposit contract address not set correctly" +// ); +// require( +// eigenPodManagerContract.eigenPodBeacon() == eigenPodBeacon, +// "eigenPodManager: eigenPodBeacon contract address not set correctly" +// ); +// require( +// eigenPodManagerContract.strategyManager() == strategyManager, +// "eigenPodManager: strategyManager contract address not set correctly" +// ); +// require( +// eigenPodManagerContract.slasher() == slasher, +// "eigenPodManager: slasher contract address not set correctly" +// ); +// } + +// function _verifyImplementationsSetCorrectly() internal view { +// require( +// eigenLayerProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(delegation)))) == +// address(delegationImplementation), +// "delegation: implementation set incorrectly" +// ); +// require( +// eigenLayerProxyAdmin.getProxyImplementation( +// TransparentUpgradeableProxy(payable(address(strategyManager))) +// ) == address(strategyManagerImplementation), +// "strategyManager: implementation set incorrectly" +// ); +// require( +// eigenLayerProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(slasher)))) == +// address(slasherImplementation), +// "slasher: implementation set incorrectly" +// ); +// require( +// eigenLayerProxyAdmin.getProxyImplementation( +// TransparentUpgradeableProxy(payable(address(eigenPodManager))) +// ) == address(eigenPodManagerImplementation), +// "eigenPodManager: implementation set incorrectly" +// ); + +// for (uint256 i = 0; i < deployedStrategyArray.length; ++i) { +// require( +// eigenLayerProxyAdmin.getProxyImplementation( +// TransparentUpgradeableProxy(payable(address(deployedStrategyArray[i]))) +// ) == address(baseStrategyImplementation), +// "strategy: implementation set incorrectly" +// ); +// } + +// require( +// eigenPodBeacon.implementation() == address(eigenPodImplementation), +// "eigenPodBeacon: implementation set incorrectly" +// ); +// } + +// function _verifyInitialOwners() internal view { +// require(strategyManager.owner() == executorMultisig, "strategyManager: owner not set correctly"); +// require(delegation.owner() == executorMultisig, "delegation: owner not set correctly"); +// require(slasher.owner() == executorMultisig, "slasher: owner not set correctly"); +// require(eigenPodManager.owner() == executorMultisig, "delegation: owner not set correctly"); + +// require(eigenLayerProxyAdmin.owner() == executorMultisig, "eigenLayerProxyAdmin: owner not set correctly"); +// require(eigenPodBeacon.owner() == executorMultisig, "eigenPodBeacon: owner not set correctly"); +// } + +// function _checkPauserInitializations() internal view { +// require(delegation.pauserRegistry() == eigenLayerPauserReg, "delegation: pauser registry not set correctly"); +// require( +// strategyManager.pauserRegistry() == eigenLayerPauserReg, +// "strategyManager: pauser registry not set correctly" +// ); +// require(slasher.pauserRegistry() == eigenLayerPauserReg, "slasher: pauser registry not set correctly"); +// require( +// eigenPodManager.pauserRegistry() == eigenLayerPauserReg, +// "eigenPodManager: pauser registry not set correctly" +// ); + +// require(eigenLayerPauserReg.isPauser(operationsMultisig), "pauserRegistry: operationsMultisig is not pauser"); +// require(eigenLayerPauserReg.isPauser(executorMultisig), "pauserRegistry: executorMultisig is not pauser"); +// require(eigenLayerPauserReg.isPauser(pauserMultisig), "pauserRegistry: pauserMultisig is not pauser"); +// require(eigenLayerPauserReg.unpauser() == executorMultisig, "pauserRegistry: unpauser not set correctly"); + +// for (uint256 i = 0; i < deployedStrategyArray.length; ++i) { +// require( +// deployedStrategyArray[i].pauserRegistry() == eigenLayerPauserReg, +// "StrategyBaseTVLLimits: pauser registry not set correctly" +// ); +// require( +// deployedStrategyArray[i].paused() == 0, +// "StrategyBaseTVLLimits: init paused status set incorrectly" +// ); +// } + +// // // pause *nothing* +// // uint256 STRATEGY_MANAGER_INIT_PAUSED_STATUS = 0; +// // // pause *everything* +// // uint256 SLASHER_INIT_PAUSED_STATUS = type(uint256).max; +// // // pause *everything* +// // uint256 DELEGATION_INIT_PAUSED_STATUS = type(uint256).max; +// // // pause *all of the proof-related functionality* (everything that can be paused other than creation of EigenPods) +// // uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS = (2**1) + (2**2) + (2**3) + (2**4); /* = 30 */ +// // // pause *nothing* +// require(strategyManager.paused() == 0, "strategyManager: init paused status set incorrectly"); +// require(slasher.paused() == type(uint256).max, "slasher: init paused status set incorrectly"); +// require(delegation.paused() == type(uint256).max, "delegation: init paused status set incorrectly"); +// require(eigenPodManager.paused() == 30, "eigenPodManager: init paused status set incorrectly"); +// } + +// function _verifyInitializationParams() internal { +// // // one week in blocks -- 50400 +// // uint32 STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS = 7 days / 12 seconds; +// // require(strategyManager.withdrawalDelayBlocks() == 7 days / 12 seconds, +// // "strategyManager: withdrawalDelayBlocks initialized incorrectly"); +// // uint256 REQUIRED_BALANCE_WEI = 32 ether; + +// require( +// strategyManager.strategyWhitelister() == operationsMultisig, +// "strategyManager: strategyWhitelister address not set correctly" +// ); + +// require( +// baseStrategyImplementation.strategyManager() == strategyManager, +// "baseStrategyImplementation: strategyManager set incorrectly" +// ); + +// require( +// eigenPodImplementation.ethPOS() == ethPOSDeposit, +// "eigenPodImplementation: ethPOSDeposit contract address not set correctly" +// ); +// require( +// eigenPodImplementation.eigenPodManager() == eigenPodManager, +// " eigenPodImplementation: eigenPodManager contract address not set correctly" +// ); + +// string memory config_data = vm.readFile(deployConfigPath); +// for (uint i = 0; i < deployedStrategyArray.length; i++) { +// uint256 maxPerDeposit = stdJson.readUint( +// config_data, +// string.concat(".strategies[", vm.toString(i), "].max_per_deposit") +// ); +// uint256 maxDeposits = stdJson.readUint( +// config_data, +// string.concat(".strategies[", vm.toString(i), "].max_deposits") +// ); +// (uint256 setMaxPerDeposit, uint256 setMaxDeposits) = deployedStrategyArray[i].getTVLLimits(); +// require(setMaxPerDeposit == maxPerDeposit, "setMaxPerDeposit not set correctly"); +// require(setMaxDeposits == maxDeposits, "setMaxDeposits not set correctly"); +// } +// } +// } diff --git a/script/deploy/mainnet/M2Deploy.s.sol b/script/deploy/mainnet/M2Deploy.s.sol new file mode 100644 index 000000000..d0a64dcd1 --- /dev/null +++ b/script/deploy/mainnet/M2Deploy.s.sol @@ -0,0 +1,327 @@ +// // SPDX-License-Identifier: BUSL-1.1 +// pragma solidity ^0.8.12; + +// import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; +// import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +// import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +// import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; + +// import "../../../src/contracts/interfaces/IETHPOSDeposit.sol"; + +// import "../../../src/contracts/core/StrategyManager.sol"; +// import "../../../src/contracts/core/Slasher.sol"; +// import "../../../src/contracts/core/DelegationManager.sol"; + +// import "../../../src/contracts/pods/EigenPod.sol"; +// import "../../../src/contracts/pods/EigenPodManager.sol"; + +// import "../../../src/contracts/permissions/PauserRegistry.sol"; + +// import "forge-std/Script.sol"; +// import "forge-std/Test.sol"; + +// // # To load the variables in the .env file +// // source .env + +// // # To deploy and verify our contract +// // forge script script/milestone/M2Deploy.s.sol:M2Deploy --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast -vvvv +// contract M2Deploy is Script, Test { +// Vm cheats = Vm(HEVM_ADDRESS); + +// string public m1DeploymentOutputPath; +// string public m2DeploymentOutputPath; + +// // EigenLayer core contracts +// ISlasher public slasher; +// IDelegationManager public delegation; +// DelegationManager public delegationImplementation; +// IStrategyManager public strategyManager; +// StrategyManager public strategyManagerImplementation; +// IEigenPodManager public eigenPodManager; +// EigenPodManager public eigenPodManagerImplementation; +// IBeacon public eigenPodBeacon; +// EigenPod public eigenPodImplementation; + +// // Eigenlayer Proxy Admin +// ProxyAdmin public eigenLayerProxyAdmin; + +// // BeaconChain deposit contract +// IETHPOSDeposit public ethPOS; + +// // RPC url to fork from for pre-upgrade state change tests +// string public rpcUrl; + +// // Pre-upgrade values to check post-upgrade +// address public strategyWhitelister; +// bytes32 public withdrawalDelayBlocksStorageSlot = bytes32(uint256(204)); // 0xcc == 204 +// uint256 public withdrawalsQueuedStorageSlot = 208; //0xd0 = 208 +// uint256 public withdrawalDelayBlocks; +// bytes32 public delegationManagerDomainSeparator; +// uint256 public numPods; + +// // Pointers to pre-upgrade values for lstDepositor +// address public lstDepositor; +// uint256 public stakerStrategyListLength; +// uint256[] public stakerStrategyShares; // Array of shares in each strategy +// IStrategy[] public stakerStrategyList; // Array of strategies staker has deposited into +// IERC20[] public tokensToWithdraw; + +// // Pointers to pre-upgrade values for eigenPodDepositor +// address public eigenPodDepositor; +// IEigenPod public eigenPod; +// address public eigenPodOwner; +// bool public hasPod; +// uint64 public mostRecentWithdrawalBlock; + +// function run() external { +// // Read and log the chain ID +// uint256 chainId = block.chainid; +// emit log_named_uint("You are deploying on ChainID", chainId); + +// // Update deployment path addresses if on mainnet +// if (chainId == 1) { +// m1DeploymentOutputPath = string(bytes("script/output/M1_deployment_mainnet_2023_6_9.json")); +// m2DeploymentOutputPath = "script/output/M2_deployment_data_mainnet.json"; +// rpcUrl = "RPC_MAINNET"; +// } else if (chainId == 5) { +// m1DeploymentOutputPath = string(bytes("script/output/M1_deployment_goerli_2023_3_23.json")); +// m2DeploymentOutputPath = "script/output/M2_deployment_data_goerli.json"; +// rpcUrl = "RPC_GOERLI"; +// } else { +// revert("Chain not supported"); +// } + +// // Read json data +// string memory deployment_data = vm.readFile(m1DeploymentOutputPath); +// slasher = Slasher(stdJson.readAddress(deployment_data, ".addresses.slasher")); +// delegation = slasher.delegation(); +// strategyManager = slasher.strategyManager(); +// eigenPodManager = strategyManager.eigenPodManager(); +// eigenPodBeacon = eigenPodManager.eigenPodBeacon(); +// ethPOS = eigenPodManager.ethPOS(); + +// eigenLayerProxyAdmin = ProxyAdmin(stdJson.readAddress(deployment_data, ".addresses.eigenLayerProxyAdmin")); + +// // Store pre-upgrade values to check against later +// strategyWhitelister = strategyManager.strategyWhitelister(); +// delegationManagerDomainSeparator = IDelegationManagerV0(address(delegation)).DOMAIN_SEPARATOR(); +// numPods = eigenPodManager.numPods(); + +// // Set chain-specific values +// IStrategy[] memory strategyArray = new IStrategy[](1); +// uint256[] memory shareAmounts = new uint256[](1); +// if (chainId == 1) { +// // no-op for now +// } else if (chainId == 5) { +// // Set LST Depositor values +// lstDepositor = 0x01e453D2465cEC1BD2ac9aed06115Fbf28482b33; +// strategyArray[0] = IStrategy(0x879944A8cB437a5f8061361f82A6d4EED59070b5); +// shareAmounts[0] = 188647761812080108; +// tokensToWithdraw.push(IERC20(0x178E141a0E3b34152f73Ff610437A7bf9B83267A)); + +// // Set eigenPod owner values +// eigenPodDepositor = 0xE9D04433bac1bd584B0493cbaBa170CCCBDA8F00; +// } else { +// revert("chain ID not supported"); +// } + +// // Store LST depositor pre-upgrade values +// stakerStrategyListLength = strategyManager.stakerStrategyListLength(lstDepositor); +// (stakerStrategyList, stakerStrategyShares) = strategyManager.getDeposits(lstDepositor); + +// // Store eigenPod owner pre-ugprade values +// eigenPod = eigenPodManager.ownerToPod(eigenPodDepositor); +// require(address(eigenPod).balance > 0, "eigenPod to test has balance of 0"); +// hasPod = eigenPodManager.hasPod(eigenPodDepositor); +// eigenPodOwner = eigenPod.podOwner(); +// mostRecentWithdrawalBlock = m1EigenPod(address(eigenPod)).mostRecentWithdrawalBlockNumber(); + +// // Begin deployment +// vm.startBroadcast(); + +// // Deploy new implmementation contracts +// delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); +// strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher); +// eigenPodManagerImplementation = new EigenPodManager( +// ethPOS, +// eigenPodBeacon, +// strategyManager, +// slasher, +// delegation +// ); +// eigenPodImplementation = new EigenPod({ +// _ethPOS: ethPOS, +// _eigenPodManager: eigenPodManager, +// _GENESIS_TIME: 1616508000 +// }); + +// vm.stopBroadcast(); + +// // Write json data out +// string memory parent_object = "parent object"; +// string memory deployed_addresses = "addresses"; + +// // Serialize proxy and non-deployed addresses +// vm.serializeAddress(deployed_addresses, "slasher", address(slasher)); +// vm.serializeAddress(deployed_addresses, "delegation", address(delegation)); +// vm.serializeAddress(deployed_addresses, "strategyManager", address(strategyManager)); +// vm.serializeAddress(deployed_addresses, "eigenPodManager", address(eigenPodManager)); +// vm.serializeAddress(deployed_addresses, "eigenPodBeacon", address(eigenPodBeacon)); +// vm.serializeAddress(deployed_addresses, "ethPOS", address(ethPOS)); + +// // Serialize new implementation addresses +// vm.serializeAddress(deployed_addresses, "delegationImplementation", address(delegationImplementation)); +// vm.serializeAddress( +// deployed_addresses, +// "strategyManagerImplementation", +// address(strategyManagerImplementation) +// ); +// vm.serializeAddress( +// deployed_addresses, +// "eigenPodManagerImplementation", +// address(eigenPodManagerImplementation) +// ); +// string memory deployed_addresses_output = vm.serializeAddress( +// deployed_addresses, +// "eigenPodImplementation", +// address(eigenPodImplementation) +// ); + +// // Add chain info +// string memory chain_info = "chainInfo"; +// vm.serializeUint(chain_info, "deploymentBlock", block.number); +// string memory chain_info_output = vm.serializeUint(chain_info, "chainId", chainId); + +// // Save addresses +// vm.serializeString(parent_object, deployed_addresses, deployed_addresses_output); +// string memory finalJson = vm.serializeString(parent_object, chain_info, chain_info_output); + +// // Write output to file +// vm.writeJson(finalJson, m2DeploymentOutputPath); + +// // Perform post-upgrade tests +// simulatePerformingUpgrade(); +// checkUpgradeCorrectness(); +// } + +// function simulatePerformingUpgrade() public { +// cheats.startPrank(eigenLayerProxyAdmin.owner()); +// eigenLayerProxyAdmin.upgrade( +// TransparentUpgradeableProxy(payable(address(delegation))), +// address(delegationImplementation) +// ); +// eigenLayerProxyAdmin.upgrade( +// TransparentUpgradeableProxy(payable(address(strategyManager))), +// address(strategyManagerImplementation) +// ); +// eigenLayerProxyAdmin.upgrade( +// TransparentUpgradeableProxy(payable(address(eigenPodManager))), +// address(eigenPodManagerImplementation) +// ); +// cheats.stopPrank(); + +// // Upgrade beacon +// cheats.prank(UpgradeableBeacon(address(eigenPodBeacon)).owner()); +// UpgradeableBeacon(address(eigenPodBeacon)).upgradeTo(address(eigenPodImplementation)); +// } + +// function checkUpgradeCorrectness() public { +// _verifyStorageSlots(); + +// _verifyContractsInitialized(); + +// _verifyEigenPodCorrectness(); +// } + +// // Call contracts to ensure that all simple view functions return the same values (e.g. the return value of `StrategyManager.delegation()` hasn’t changed) +// // StrategyManager: delegation, eigenPodManager, slasher, strategyWhitelister, withdrawalDelayBlocks all unchanged +// // DelegationManager: DOMAIN_SEPARATOR, strategyManager, slasher, eigenPodManager all unchanged +// // EigenPodManager: ethPOS, eigenPodBeacon, strategyManager, slasher, numPods all unchanged +// // delegationManager is now correct (added immutable) +// // Call contracts to make sure they are still “initialized” (ensure that trying to call initializer reverts) +// function _verifyStorageSlots() internal view { +// // StrategyManager: Check view functions return pre-upgraded values +// require(strategyManager.delegation() == delegation, "strategyManager.delegation incorrect"); +// require(strategyManager.eigenPodManager() == eigenPodManager, "strategyManager.eigenPodManager incorrect"); +// require(strategyManager.slasher() == slasher, "strategyManager.slasher incorrect"); +// require( +// strategyManager.strategyWhitelister() == strategyWhitelister, +// "strategyManager.strategyWhitelister incorrect" +// ); +// require( +// cheats.load(address(strategyManager), withdrawalDelayBlocksStorageSlot) == bytes32(withdrawalDelayBlocks), +// "strategyManager.withdrawalDelayBlocks incorrect" +// ); +// // DelegationManager: Check view functions return pre-upgraded values +// require(DelegationManagerStorage(address(delegation)).strategyManager() == strategyManager, "delegation.strategyManager incorrect"); +// require( +// delegation.domainSeparator() == delegationManagerDomainSeparator, +// "delegation.domainSeparator incorrect" +// ); +// require(DelegationManagerStorage(address(delegation)).slasher() == slasher, "delegation.slasher incorrect"); +// require(DelegationManagerStorage(address(delegation)).eigenPodManager() == eigenPodManager, "delegation.eigenPodManager incorrect"); +// // EigenPodManager: check view functions return pre-upgraded values +// require(eigenPodManager.ethPOS() == ethPOS, "eigenPodManager.ethPOS incorrect"); +// require(eigenPodManager.eigenPodBeacon() == eigenPodBeacon, "eigenPodManager.eigenPodBeacon incorrect"); +// require(eigenPodManager.strategyManager() == strategyManager, "eigenPodManager.strategyManager incorrect"); +// require(eigenPodManager.slasher() == slasher, "eigenPodManager.slasher incorrect"); +// require(eigenPodManager.numPods() == numPods, "eigenPodManager.numPods incorrect"); +// require(EigenPodManagerStorage(address(eigenPodManager)).delegationManager() == delegation, "eigenPodManager.delegationManager incorrect"); +// } + +// function _verifyContractsInitialized() internal { +// // Check that contracts are unable to be re-initialized +// cheats.expectRevert(bytes("Initializable: contract is already initialized")); +// StrategyManager(address(strategyManager)).initialize( +// address(this), +// address(this), +// PauserRegistry(address(this)), +// 0 +// ); + +// IStrategy[] memory strategyArray = new IStrategy[](0); +// uint256[] memory withdrawalDelayBlocksArray = new uint256[](0); +// cheats.expectRevert(bytes("Initializable: contract is already initialized")); +// DelegationManager(address(delegation)).initialize( +// address(this), +// PauserRegistry(address(this)), +// 0, // initialPausedStatus +// 0, // minWithdrawalDelayBLocks +// strategyArray, +// withdrawalDelayBlocksArray +// ); + +// cheats.expectRevert(bytes("Initializable: contract is already initialized")); +// EigenPodManager(address(eigenPodManager)).initialize( +// address(this), +// PauserRegistry(address(this)), +// 0 +// ); +// } + +// function _verifyEigenPodCorrectness() public { +// // Check that state is correct +// require( +// address(eigenPodManager.ownerToPod(eigenPodDepositor)) == address(eigenPod), +// "eigenPodManager.ownerToPod incorrect" +// ); +// require(eigenPodManager.hasPod(eigenPodDepositor) == hasPod, "eigenPodManager.hasPod incorrect"); +// require(eigenPod.podOwner() == eigenPodOwner, "eigenPod.podOwner incorrect"); + +// // Unpause eigenpods verify credentials +// uint256 paused = IPausable(address(eigenPodManager)).paused(); +// cheats.prank(IPauserRegistry(IPausable(address(eigenPodManager)).pauserRegistry()).unpauser()); +// IPausable(address(eigenPodManager)).unpause(paused ^ (1 << 2)); // eigenpods verify credentials on 2nd bit + +// cheats.prank(eigenPodOwner); +// eigenPod.startCheckpoint(false); +// } +// } + +// interface IDelegationManagerV0 { +// function DOMAIN_SEPARATOR() external view returns (bytes32); +// } + +// interface m1EigenPod { +// function mostRecentWithdrawalBlockNumber() external view returns (uint64); +// } diff --git a/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol b/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol index 7bf101485..7192f442c 100644 --- a/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol +++ b/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol @@ -1,335 +1,335 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "../../utils/ExistingDeploymentParser.sol"; -import "../../utils/TimelockEncoding.sol"; -import "../../utils/Multisend.sol"; - -/** - * @notice Script used for the first deployment of EigenLayer core contracts to Holesky - * anvil --fork-url $RPC_MAINNET - * forge script script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol:M2_Mainnet_Upgrade --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv - * - * forge script script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol:M2_Mainnet_Upgrade --rpc-url $RPC_MAINNET --private-key $PRIVATE_KEY --broadcast -vvvv - * - */ -contract M2_Mainnet_Upgrade is ExistingDeploymentParser { - function run() external virtual { - _parseDeployedContracts("script/output/mainnet/M1_deployment_mainnet_2023_6_9.json"); - _parseInitialDeploymentParams("script/configs/mainnet/M2_mainnet_upgrade.config.json"); - - // START RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.startBroadcast(); - - emit log_named_address("Deployer Address", msg.sender); - - _deployImplementationContracts(); - - // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.stopBroadcast(); - - // Simulate upgrade of contracts to new implementations - _simulateUpgrade(); - - // Sanity Checks - _verifyContractPointers(); - _verifyImplementations(); - _verifyContractsInitialized(); - _verifyInitializationParams(); - - logAndOutputContractAddresses("script/output/mainnet/M2_mainnet_upgrade.output.json"); - } - - /** - * @notice Deploy EigenLayer contracts from scratch for Holesky - */ - function _deployImplementationContracts() internal { - // 1. Deploy New TUPS - avsDirectoryImplementation = new AVSDirectory(delegationManager); - avsDirectory = AVSDirectory( - address( - new TransparentUpgradeableProxy( - address(avsDirectoryImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector( - AVSDirectory.initialize.selector, - executorMultisig, // initialOwner - eigenLayerPauserReg, - AVS_DIRECTORY_INIT_PAUSED_STATUS - ) - ) - ) - ); - - // 2. Deploy Implementations - eigenPodImplementation = new EigenPod( - IETHPOSDeposit(ETHPOSDepositAddress), - eigenPodManager, - EIGENPOD_GENESIS_TIME - ); - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); - slasherImplementation = new Slasher(strategyManager, delegationManager); - eigenPodManagerImplementation = new EigenPodManager( - IETHPOSDeposit(ETHPOSDepositAddress), - eigenPodBeacon, - strategyManager, - slasher, - delegationManager - ); - } - - function _simulateUpgrade() internal { - - vm.startPrank(executorMultisig); - - // First, upgrade the proxy contracts to point to the implementations - // AVSDirectory - // eigenLayerProxyAdmin.upgrade( - // TransparentUpgradeableProxy(payable(address(avsDirectory))), - // address(avsDirectoryImplementation) - // ); - // DelegationManager - eigenLayerProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(delegationManager))), - address(delegationManagerImplementation) - ); - // StrategyManager - eigenLayerProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(strategyManager))), - address(strategyManagerImplementation) - ); - // Slasher - eigenLayerProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(slasher))), - address(slasherImplementation) - ); - // EigenPodManager - eigenLayerProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(eigenPodManager))), - address(eigenPodManagerImplementation) - ); - - // Second, configure additional settings and paused statuses - delegationManager.setMinWithdrawalDelayBlocks(DELEGATION_MANAGER_MIN_WITHDRAWAL_DELAY_BLOCKS); - delegationManager.unpause(0); - eigenPodManager.unpause(0); - - eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); - - vm.stopPrank(); - } -} - -// forge t --mt test_queueUpgrade --fork-url $RPC_MAINNET -vvvv -contract Queue_M2_Upgrade is M2_Mainnet_Upgrade, TimelockEncoding { - Vm cheats = Vm(HEVM_ADDRESS); - - // Thurs Apr 08 2024 12:00:00 GMT-0700 (Pacific Daylight Time) - uint256 timelockEta = 1712559600; - - function test_queueUpgrade() external { - _parseDeployedContracts("script/output/mainnet/M2_mainnet_upgrade.output.json"); - _parseInitialDeploymentParams("script/configs/mainnet/M2_mainnet_upgrade.config.json"); - - Tx[] memory txs = new Tx[](11); - // upgrade the DelegationManager, Slasher, StrategyManager, DelayedWithdrawalRouter, EigenPodManager, & EigenPod contracts - txs[0] = Tx( - address(eigenLayerProxyAdmin), - 0, - abi.encodeWithSelector( - ProxyAdmin.upgrade.selector, - TransparentUpgradeableProxy(payable(address(delegationManager))), - delegationManagerImplementation - ) - ); - - txs[1] = Tx( - address(eigenLayerProxyAdmin), - 0, - abi.encodeWithSelector( - ProxyAdmin.upgrade.selector, - TransparentUpgradeableProxy(payable(address(slasher))), - slasherImplementation - ) - ); - - txs[2] = Tx( - address(eigenLayerProxyAdmin), - 0, - abi.encodeWithSelector( - ProxyAdmin.upgrade.selector, - TransparentUpgradeableProxy(payable(address(strategyManager))), - strategyManagerImplementation - ) - ); - - // txs[3] = Tx( - // address(eigenLayerProxyAdmin), - // 0, - // abi.encodeWithSelector( - // ProxyAdmin.upgrade.selector, - // TransparentUpgradeableProxy(payable(address(delayedWithdrawalRouter))), - // delayedWithdrawalRouterImplementation - // ) - // ); - - txs[4] = Tx( - address(eigenLayerProxyAdmin), - 0, - abi.encodeWithSelector( - ProxyAdmin.upgrade.selector, - TransparentUpgradeableProxy(payable(address(eigenPodManager))), - eigenPodManagerImplementation - ) - ); - - txs[5] = Tx( - address(eigenPodBeacon), - 0, - abi.encodeWithSelector( - UpgradeableBeacon.upgradeTo.selector, - eigenPodImplementation - ) - ); - - // set the min withdrawal delay blocks on the DelegationManager - txs[6] = Tx( - address(delegationManager), - 0, // value - abi.encodeWithSelector(DelegationManager.setMinWithdrawalDelayBlocks.selector, DELEGATION_MANAGER_MIN_WITHDRAWAL_DELAY_BLOCKS) - ); - - // set beacon chain oracle on EigenPodManager - // txs[7] = Tx( - // address(eigenPodManager), - // 0, // value - // abi.encodeWithSelector(EigenPodManager.updateBeaconChainOracle.selector, beaconOracle) - // ); - - // set Deneb fork timestamp on EigenPodManager - // txs[8] = Tx( - // address(eigenPodManager), - // 0, // value - // abi.encodeWithSelector(EigenPodManager.setDenebForkTimestamp.selector, EIGENPOD_MANAGER_DENEB_FORK_TIMESTAMP) - // ); - - // unpause everything on DelegationManager - txs[9] = Tx( - address(delegationManager), - 0, // value - abi.encodeWithSelector(Pausable.unpause.selector, 0) - ); - - // unpause everything on EigenPodManager - txs[10] = Tx( - address(eigenPodManager), - 0, // value - abi.encodeWithSelector(Pausable.unpause.selector, 0) - ); - - bytes memory calldata_to_multisend_contract = abi.encodeWithSelector(MultiSendCallOnly.multiSend.selector, encodeMultisendTxs(txs)); - emit log_named_bytes("calldata_to_multisend_contract", calldata_to_multisend_contract); - - bytes memory final_calldata_to_executor_multisig = encodeForExecutor({ - // call to executor will be from the timelock - from: timelock, - // performing many operations at the same time - to: multiSendCallOnly, - // value to send in tx - value: 0, - // calldata for the operation - data: calldata_to_multisend_contract, - // operation type (for performing many operations at the same time) - operation: ISafe.Operation.DelegateCall - }); - - (bytes memory calldata_to_timelock_queuing_action, bytes memory calldata_to_timelock_executing_action) = encodeForTimelock({ - // address to be called from the timelock - to: executorMultisig, - // value to send in tx - value: 0, - // calldata for the operation - data: final_calldata_to_executor_multisig, - // time at which the tx will become executable - timelockEta: timelockEta - }); - - bytes32 expectedTxHash = getTxHash({ - target: executorMultisig, - _value: 0, - _data: final_calldata_to_executor_multisig, - eta: timelockEta - }); - emit log_named_bytes32("expectedTxHash", expectedTxHash); - - cheats.prank(operationsMultisig); - (bool success, ) = timelock.call(calldata_to_timelock_queuing_action); - require(success, "call to timelock queuing action failed"); - - require(ITimelock(timelock).queuedTransactions(expectedTxHash), "expectedTxHash not queued"); - - // test performing the upgrade - cheats.warp(timelockEta); - cheats.prank(operationsMultisig); - (success, ) = timelock.call(calldata_to_timelock_executing_action); - require(success, "call to timelock executing action failed"); - - // Check correctness after upgrade - _verifyContractPointers(); - _verifyImplementations(); - _verifyContractsInitialized(); - _verifyInitializationParams(); - _postUpgradeChecks(); - } - - function _postUpgradeChecks() internal { - // check that LST deposits are paused - address rETH = 0xae78736Cd615f374D3085123A210448E74Fc6393; - address rETH_Strategy = 0x1BeE69b7dFFfA4E2d53C2a2Df135C388AD25dCD2; - uint256 amount = 1e18; - cheats.prank(rETH); - // this works because rETH has more than 1 ETH of its own token at its address :) - IERC20(rETH).transfer(address(this), amount); - IERC20(rETH).approve(address(strategyManager), amount); - cheats.expectRevert("Pausable: index is paused"); - strategyManager.depositIntoStrategy({ - strategy: IStrategy(rETH_Strategy), - token: IERC20(rETH), - amount: amount - }); - - // unpause LST deposits and check that a deposit works - cheats.prank(executorMultisig); - strategyManager.unpause(0); - strategyManager.depositIntoStrategy({ - strategy: IStrategy(rETH_Strategy), - token: IERC20(rETH), - amount: amount - }); - - // check that EigenPod proofs are live (although this still reverts later in the call) - EigenPod existingEigenPod = EigenPod(payable(0x0b347D5E38296277E829CE1D8C6b82e4c63C2Df3)); - BeaconChainProofs.StateRootProof memory stateRootProof; - uint40[] memory validatorIndices; - bytes[] memory validatorFieldsProofs; - bytes32[][] memory validatorFields; - cheats.startPrank(existingEigenPod.podOwner()); - existingEigenPod.startCheckpoint(false); - cheats.expectRevert("EigenPodManager.getBlockRootAtTimestamp: state root at timestamp not yet finalized"); - existingEigenPod.verifyWithdrawalCredentials( - uint64(block.timestamp), - stateRootProof, - validatorIndices, - validatorFieldsProofs, - validatorFields - ); - } - - function getTxHash(address target, uint256 _value, bytes memory _data, uint256 eta) public pure returns (bytes32) { - // empty bytes - bytes memory signature; - bytes32 txHash = keccak256(abi.encode(target, _value, signature, _data, eta)); - return txHash; - } -} +// // SPDX-License-Identifier: BUSL-1.1 +// pragma solidity ^0.8.12; + +// import "../../utils/ExistingDeploymentParser.sol"; +// import "../../utils/TimelockEncoding.sol"; +// import "../../utils/Multisend.sol"; + +// /** +// * @notice Script used for the first deployment of EigenLayer core contracts to Holesky +// * anvil --fork-url $RPC_MAINNET +// * forge script script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol:M2_Mainnet_Upgrade --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv +// * +// * forge script script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol:M2_Mainnet_Upgrade --rpc-url $RPC_MAINNET --private-key $PRIVATE_KEY --broadcast -vvvv +// * +// */ +// contract M2_Mainnet_Upgrade is ExistingDeploymentParser { +// function run() external virtual { +// _parseDeployedContracts("script/output/mainnet/M1_deployment_mainnet_2023_6_9.json"); +// _parseInitialDeploymentParams("script/configs/mainnet/M2_mainnet_upgrade.config.json"); + +// // START RECORDING TRANSACTIONS FOR DEPLOYMENT +// vm.startBroadcast(); + +// emit log_named_address("Deployer Address", msg.sender); + +// _deployImplementationContracts(); + +// // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT +// vm.stopBroadcast(); + +// // Simulate upgrade of contracts to new implementations +// _simulateUpgrade(); + +// // Sanity Checks +// _verifyContractPointers(); +// _verifyImplementations(); +// _verifyContractsInitialized(); +// _verifyInitializationParams(); + +// logAndOutputContractAddresses("script/output/mainnet/M2_mainnet_upgrade.output.json"); +// } + +// /** +// * @notice Deploy EigenLayer contracts from scratch for Holesky +// */ +// function _deployImplementationContracts() internal { +// // 1. Deploy New TUPS +// avsDirectoryImplementation = new AVSDirectory(delegationManager); +// avsDirectory = AVSDirectory( +// address( +// new TransparentUpgradeableProxy( +// address(avsDirectoryImplementation), +// address(eigenLayerProxyAdmin), +// abi.encodeWithSelector( +// AVSDirectory.initialize.selector, +// executorMultisig, // initialOwner +// eigenLayerPauserReg, +// AVS_DIRECTORY_INIT_PAUSED_STATUS +// ) +// ) +// ) +// ); + +// // 2. Deploy Implementations +// eigenPodImplementation = new EigenPod( +// IETHPOSDeposit(ETHPOSDepositAddress), +// eigenPodManager, +// EIGENPOD_GENESIS_TIME +// ); +// delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); +// strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); +// slasherImplementation = new Slasher(strategyManager, delegationManager); +// eigenPodManagerImplementation = new EigenPodManager( +// IETHPOSDeposit(ETHPOSDepositAddress), +// eigenPodBeacon, +// strategyManager, +// slasher, +// delegationManager +// ); +// } + +// function _simulateUpgrade() internal { + +// vm.startPrank(executorMultisig); + +// // First, upgrade the proxy contracts to point to the implementations +// // AVSDirectory +// // eigenLayerProxyAdmin.upgrade( +// // TransparentUpgradeableProxy(payable(address(avsDirectory))), +// // address(avsDirectoryImplementation) +// // ); +// // DelegationManager +// eigenLayerProxyAdmin.upgrade( +// TransparentUpgradeableProxy(payable(address(delegationManager))), +// address(delegationManagerImplementation) +// ); +// // StrategyManager +// eigenLayerProxyAdmin.upgrade( +// TransparentUpgradeableProxy(payable(address(strategyManager))), +// address(strategyManagerImplementation) +// ); +// // Slasher +// eigenLayerProxyAdmin.upgrade( +// TransparentUpgradeableProxy(payable(address(slasher))), +// address(slasherImplementation) +// ); +// // EigenPodManager +// eigenLayerProxyAdmin.upgrade( +// TransparentUpgradeableProxy(payable(address(eigenPodManager))), +// address(eigenPodManagerImplementation) +// ); + +// // Second, configure additional settings and paused statuses +// delegationManager.setMinWithdrawalDelayBlocks(DELEGATION_MANAGER_MIN_WITHDRAWAL_DELAY_BLOCKS); +// delegationManager.unpause(0); +// eigenPodManager.unpause(0); + +// eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); + +// vm.stopPrank(); +// } +// } + +// // forge t --mt test_queueUpgrade --fork-url $RPC_MAINNET -vvvv +// contract Queue_M2_Upgrade is M2_Mainnet_Upgrade, TimelockEncoding { +// Vm cheats = Vm(HEVM_ADDRESS); + +// // Thurs Apr 08 2024 12:00:00 GMT-0700 (Pacific Daylight Time) +// uint256 timelockEta = 1712559600; + +// function test_queueUpgrade() external { +// _parseDeployedContracts("script/output/mainnet/M2_mainnet_upgrade.output.json"); +// _parseInitialDeploymentParams("script/configs/mainnet/M2_mainnet_upgrade.config.json"); + +// Tx[] memory txs = new Tx[](11); +// // upgrade the DelegationManager, Slasher, StrategyManager, DelayedWithdrawalRouter, EigenPodManager, & EigenPod contracts +// txs[0] = Tx( +// address(eigenLayerProxyAdmin), +// 0, +// abi.encodeWithSelector( +// ProxyAdmin.upgrade.selector, +// TransparentUpgradeableProxy(payable(address(delegationManager))), +// delegationManagerImplementation +// ) +// ); + +// txs[1] = Tx( +// address(eigenLayerProxyAdmin), +// 0, +// abi.encodeWithSelector( +// ProxyAdmin.upgrade.selector, +// TransparentUpgradeableProxy(payable(address(slasher))), +// slasherImplementation +// ) +// ); + +// txs[2] = Tx( +// address(eigenLayerProxyAdmin), +// 0, +// abi.encodeWithSelector( +// ProxyAdmin.upgrade.selector, +// TransparentUpgradeableProxy(payable(address(strategyManager))), +// strategyManagerImplementation +// ) +// ); + +// // txs[3] = Tx( +// // address(eigenLayerProxyAdmin), +// // 0, +// // abi.encodeWithSelector( +// // ProxyAdmin.upgrade.selector, +// // TransparentUpgradeableProxy(payable(address(delayedWithdrawalRouter))), +// // delayedWithdrawalRouterImplementation +// // ) +// // ); + +// txs[4] = Tx( +// address(eigenLayerProxyAdmin), +// 0, +// abi.encodeWithSelector( +// ProxyAdmin.upgrade.selector, +// TransparentUpgradeableProxy(payable(address(eigenPodManager))), +// eigenPodManagerImplementation +// ) +// ); + +// txs[5] = Tx( +// address(eigenPodBeacon), +// 0, +// abi.encodeWithSelector( +// UpgradeableBeacon.upgradeTo.selector, +// eigenPodImplementation +// ) +// ); + +// // set the min withdrawal delay blocks on the DelegationManager +// txs[6] = Tx( +// address(delegationManager), +// 0, // value +// abi.encodeWithSelector(DelegationManager.setMinWithdrawalDelayBlocks.selector, DELEGATION_MANAGER_MIN_WITHDRAWAL_DELAY_BLOCKS) +// ); + +// // set beacon chain oracle on EigenPodManager +// // txs[7] = Tx( +// // address(eigenPodManager), +// // 0, // value +// // abi.encodeWithSelector(EigenPodManager.updateBeaconChainOracle.selector, beaconOracle) +// // ); + +// // set Deneb fork timestamp on EigenPodManager +// // txs[8] = Tx( +// // address(eigenPodManager), +// // 0, // value +// // abi.encodeWithSelector(EigenPodManager.setDenebForkTimestamp.selector, EIGENPOD_MANAGER_DENEB_FORK_TIMESTAMP) +// // ); + +// // unpause everything on DelegationManager +// txs[9] = Tx( +// address(delegationManager), +// 0, // value +// abi.encodeWithSelector(Pausable.unpause.selector, 0) +// ); + +// // unpause everything on EigenPodManager +// txs[10] = Tx( +// address(eigenPodManager), +// 0, // value +// abi.encodeWithSelector(Pausable.unpause.selector, 0) +// ); + +// bytes memory calldata_to_multisend_contract = abi.encodeWithSelector(MultiSendCallOnly.multiSend.selector, encodeMultisendTxs(txs)); +// emit log_named_bytes("calldata_to_multisend_contract", calldata_to_multisend_contract); + +// bytes memory final_calldata_to_executor_multisig = encodeForExecutor({ +// // call to executor will be from the timelock +// from: timelock, +// // performing many operations at the same time +// to: multiSendCallOnly, +// // value to send in tx +// value: 0, +// // calldata for the operation +// data: calldata_to_multisend_contract, +// // operation type (for performing many operations at the same time) +// operation: ISafe.Operation.DelegateCall +// }); + +// (bytes memory calldata_to_timelock_queuing_action, bytes memory calldata_to_timelock_executing_action) = encodeForTimelock({ +// // address to be called from the timelock +// to: executorMultisig, +// // value to send in tx +// value: 0, +// // calldata for the operation +// data: final_calldata_to_executor_multisig, +// // time at which the tx will become executable +// timelockEta: timelockEta +// }); + +// bytes32 expectedTxHash = getTxHash({ +// target: executorMultisig, +// _value: 0, +// _data: final_calldata_to_executor_multisig, +// eta: timelockEta +// }); +// emit log_named_bytes32("expectedTxHash", expectedTxHash); + +// cheats.prank(operationsMultisig); +// (bool success, ) = timelock.call(calldata_to_timelock_queuing_action); +// require(success, "call to timelock queuing action failed"); + +// require(ITimelock(timelock).queuedTransactions(expectedTxHash), "expectedTxHash not queued"); + +// // test performing the upgrade +// cheats.warp(timelockEta); +// cheats.prank(operationsMultisig); +// (success, ) = timelock.call(calldata_to_timelock_executing_action); +// require(success, "call to timelock executing action failed"); + +// // Check correctness after upgrade +// _verifyContractPointers(); +// _verifyImplementations(); +// _verifyContractsInitialized(); +// _verifyInitializationParams(); +// _postUpgradeChecks(); +// } + +// function _postUpgradeChecks() internal { +// // check that LST deposits are paused +// address rETH = 0xae78736Cd615f374D3085123A210448E74Fc6393; +// address rETH_Strategy = 0x1BeE69b7dFFfA4E2d53C2a2Df135C388AD25dCD2; +// uint256 amount = 1e18; +// cheats.prank(rETH); +// // this works because rETH has more than 1 ETH of its own token at its address :) +// IERC20(rETH).transfer(address(this), amount); +// IERC20(rETH).approve(address(strategyManager), amount); +// cheats.expectRevert("Pausable: index is paused"); +// strategyManager.depositIntoStrategy({ +// strategy: IStrategy(rETH_Strategy), +// token: IERC20(rETH), +// amount: amount +// }); + +// // unpause LST deposits and check that a deposit works +// cheats.prank(executorMultisig); +// strategyManager.unpause(0); +// strategyManager.depositIntoStrategy({ +// strategy: IStrategy(rETH_Strategy), +// token: IERC20(rETH), +// amount: amount +// }); + +// // check that EigenPod proofs are live (although this still reverts later in the call) +// EigenPod existingEigenPod = EigenPod(payable(0x0b347D5E38296277E829CE1D8C6b82e4c63C2Df3)); +// BeaconChainProofs.StateRootProof memory stateRootProof; +// uint40[] memory validatorIndices; +// bytes[] memory validatorFieldsProofs; +// bytes32[][] memory validatorFields; +// cheats.startPrank(existingEigenPod.podOwner()); +// existingEigenPod.startCheckpoint(false); +// cheats.expectRevert("EigenPodManager.getBlockRootAtTimestamp: state root at timestamp not yet finalized"); +// existingEigenPod.verifyWithdrawalCredentials( +// uint64(block.timestamp), +// stateRootProof, +// validatorIndices, +// validatorFieldsProofs, +// validatorFields +// ); +// } + +// function getTxHash(address target, uint256 _value, bytes memory _data, uint256 eta) public pure returns (bytes32) { +// // empty bytes +// bytes memory signature; +// bytes32 txHash = keccak256(abi.encode(target, _value, signature, _data, eta)); +// return txHash; +// } +// } diff --git a/script/whitelist/delegationFaucet/DelegationFaucet.sol b/script/whitelist/delegationFaucet/DelegationFaucet.sol deleted file mode 100644 index 0466fa686..000000000 --- a/script/whitelist/delegationFaucet/DelegationFaucet.sol +++ /dev/null @@ -1,216 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "src/contracts/interfaces/IStrategyManager.sol"; -import "src/contracts/interfaces/IStrategy.sol"; -import "src/contracts/interfaces/IDelegationManager.sol"; -import "src/contracts/interfaces/IDelegationFaucet.sol"; -import "script/whitelist/delegationFaucet/DelegationFaucetStaker.sol"; - -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; -import "@openzeppelin/contracts/utils/Create2.sol"; -import "@openzeppelin/contracts/utils/Address.sol"; - -import "../ERC20PresetMinterPauser.sol"; - -/** - * @title DelegationFaucet for M2 - * @author Layr Labs, Inc. - * @notice Faucet contract setup with a dummy ERC20 token and strategy for M2 testnet release. - * Each operator address gets a staker contract assigned to them deterministically. - * This contract assumes minting role of the ERC20 token and that the ERC20 token has a whitelisted strategy. - */ -contract DelegationFaucet is IDelegationFaucet, Ownable { - IStrategyManager immutable strategyManager; - ERC20PresetMinterPauser immutable stakeToken; - IStrategy immutable stakeStrategy; - IDelegationManager immutable delegation; - - uint256 public constant DEFAULT_AMOUNT = 100e18; - - constructor( - IStrategyManager _strategyManager, - IDelegationManager _delegation, - ERC20PresetMinterPauser _token, - IStrategy _strategy - ) { - strategyManager = _strategyManager; - delegation = _delegation; - stakeToken = _token; - stakeStrategy = _strategy; - } - - /** - * Deploys a DelegationFaucetStaker contract if not already deployed for operator. DelegationFaucetStaker gets minted _depositAmount or - * DEFAULT_AMOUNT if _depositAmount is 0. Then DelegationFaucetStaker contract deposits into the strategy and delegates to operator. - * @param _operator The operator to delegate to - * @param _approverSignatureAndExpiry Verifies the operator approves of this delegation - * @param _approverSalt A unique single use value tied to an individual signature. - * @param _depositAmount The amount to deposit into the strategy - */ - function mintDepositAndDelegate( - address _operator, - IDelegationManager.SignatureWithExpiry memory _approverSignatureAndExpiry, - bytes32 _approverSalt, - uint256 _depositAmount - ) public onlyOwner { - // Operator must be registered - require(delegation.isOperator(_operator), "DelegationFaucet: Operator not registered"); - address staker = getStaker(_operator); - // Set deposit amount - if (_depositAmount == 0) { - _depositAmount = DEFAULT_AMOUNT; - } - - // Deploy staker address if not already deployed, staker constructor will approve the StrategyManager to spend the stakeToken - if (!Address.isContract(staker)) { - Create2.deploy( - 0, - bytes32(uint256(uint160(_operator))), - abi.encodePacked(type(DelegationFaucetStaker).creationCode, abi.encode(strategyManager, stakeToken)) - ); - } - - // mint stakeToken to staker - stakeToken.mint(staker, _depositAmount); - // deposit into stakeToken strategy, which will increase delegated shares to operator if already delegated - _depositIntoStrategy(staker, stakeStrategy, stakeToken, _depositAmount); - // delegateTo operator if not delegated - if (!delegation.isDelegated(staker)) { - delegateTo(_operator, _approverSignatureAndExpiry, _approverSalt); - } - } - - /** - * Calls staker contract to deposit into designated strategy, mints staked token if stakeToken and stakeStrategy - * are specified. - * @param _staker address of staker contract for operator - * @param _strategy StakeToken strategy contract - * @param _token StakeToken - * @param _amount amount to get minted and to deposit - */ - function depositIntoStrategy( - address _staker, - IStrategy _strategy, - IERC20 _token, - uint256 _amount - ) public onlyOwner returns (bytes memory) { - // mint stakeToken to staker - if (_token == stakeToken && _strategy == stakeStrategy) { - stakeToken.mint(_staker, _amount); - } - return _depositIntoStrategy(_staker, _strategy, _token, _amount); - } - - /** - * Call staker to delegate to operator - * @param _operator operator to get staker address from and delegate to - * @param _approverSignatureAndExpiry Verifies the operator approves of this delegation - * @param _approverSalt A unique single use value tied to an individual signature. - */ - function delegateTo( - address _operator, - IDelegationManager.SignatureWithExpiry memory _approverSignatureAndExpiry, - bytes32 _approverSalt - ) public onlyOwner returns (bytes memory) { - bytes memory data = abi.encodeWithSelector( - IDelegationManager.delegateTo.selector, - _operator, - _approverSignatureAndExpiry, - _approverSalt - ); - return DelegationFaucetStaker(getStaker(_operator)).callAddress(address(delegation), data); - } - - /** - * Call queueWithdrawal through staker contract - */ - function queueWithdrawal( - address staker, - IDelegationManager.QueuedWithdrawalParams[] calldata queuedWithdrawalParams - ) public onlyOwner returns (bytes memory) { - bytes memory data = abi.encodeWithSelector( - IDelegationManager.queueWithdrawals.selector, - queuedWithdrawalParams - ); - return DelegationFaucetStaker(staker).callAddress(address(delegation), data); - } - - /** - * Call completeQueuedWithdrawal through staker contract - */ - function completeQueuedWithdrawal( - address staker, - IDelegationManager.Withdrawal calldata queuedWithdrawal, - IERC20[] calldata tokens, - uint256 middlewareTimesIndex, - bool receiveAsTokens - ) public onlyOwner returns (bytes memory) { - bytes memory data = abi.encodeWithSelector( - IDelegationManager.completeQueuedWithdrawal.selector, - queuedWithdrawal, - tokens, - middlewareTimesIndex, - receiveAsTokens - ); - return DelegationFaucetStaker(staker).callAddress(address(delegation), data); - } - - /** - * Transfers tokens from staker contract to designated address - * @param staker staker contract to transfer from - * @param token ERC20 token - * @param to the to address - * @param amount transfer amount - */ - function transfer( - address staker, - address token, - address to, - uint256 amount - ) public onlyOwner returns (bytes memory) { - bytes memory data = abi.encodeWithSelector(IERC20.transfer.selector, to, amount); - return DelegationFaucetStaker(staker).callAddress(token, data); - } - - function callAddress(address to, bytes memory data) public payable onlyOwner returns (bytes memory) { - (bool ok, bytes memory res) = payable(to).call{value: msg.value}(data); - if (!ok) { - revert(string(res)); - } - return res; - } - - /** - * @notice Returns the deterministic staker contract address for the operator - * @param _operator The operator to get the staker contract address for - */ - function getStaker(address _operator) public view returns (address) { - return - Create2.computeAddress( - bytes32(uint256(uint160(_operator))), //salt - keccak256( - abi.encodePacked(type(DelegationFaucetStaker).creationCode, abi.encode(strategyManager, stakeToken)) - ) - ); - } - - /** - * @notice Internal function to deposit into a strategy, has same function signature as StrategyManager.depositIntoStrategy - */ - function _depositIntoStrategy( - address _staker, - IStrategy _strategy, - IERC20 _token, - uint256 _amount - ) internal returns (bytes memory) { - bytes memory data = abi.encodeWithSelector( - IStrategyManager.depositIntoStrategy.selector, - _strategy, - _token, - _amount - ); - return DelegationFaucetStaker(_staker).callAddress(address(strategyManager), data); - } -} diff --git a/script/whitelist/delegationFaucet/DelegationFaucetStaker.sol b/script/whitelist/delegationFaucet/DelegationFaucetStaker.sol deleted file mode 100644 index 8eed644a6..000000000 --- a/script/whitelist/delegationFaucet/DelegationFaucetStaker.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "src/contracts/interfaces/IStrategyManager.sol"; - -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; -import "forge-std/Test.sol"; - -contract DelegationFaucetStaker is Ownable { - constructor(IStrategyManager strategyManager, IERC20 token) Ownable() { - token.approve(address(strategyManager), type(uint256).max); - } - - function callAddress(address implementation, bytes memory data) external onlyOwner returns (bytes memory) { - uint256 length = data.length; - bytes memory returndata; - assembly { - let result := call(gas(), implementation, callvalue(), add(data, 32), length, 0, 0) - mstore(returndata, returndatasize()) - returndatacopy(add(returndata, 32), 0, returndatasize()) - } - - return returndata; - } -} diff --git a/script/whitelist/delegationFaucet/DeployDelegationFaucet.sol b/script/whitelist/delegationFaucet/DeployDelegationFaucet.sol deleted file mode 100644 index f901c7e51..000000000 --- a/script/whitelist/delegationFaucet/DeployDelegationFaucet.sol +++ /dev/null @@ -1,84 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "src/contracts/interfaces/IDelegationManager.sol"; -import "src/contracts/interfaces/IStrategyManager.sol"; -import "src/contracts/strategies/StrategyBase.sol"; -import "src/contracts/permissions/PauserRegistry.sol"; - -import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; - -import "./DelegationFaucet.sol"; - -import "forge-std/Script.sol"; -import "forge-std/StdJson.sol"; - -/** - * @notice Deploys the following contracts: - * - ERC20 Dummy token for testing - * - StrategyBase to be added to the StrategyManager whitelist - * - DelegationFaucet contract - */ -contract DeployDelegationFaucet is Script, DSTest { - // EigenLayer contracts - ProxyAdmin public eigenLayerProxyAdmin; - PauserRegistry public eigenLayerPauserReg; - IDelegationManager public delegation; - IStrategyManager public strategyManager; - - DelegationFaucet public delegationFaucet; - - // M2 testing/mock contracts - ERC20PresetMinterPauser public stakeToken; - StrategyBase public stakeTokenStrat; - StrategyBase public baseStrategyImplementation; - - address eigenLayerProxyAdminAddress; - address eigenLayerPauserRegAddress; - address delegationAddress; - address strategyManagerAddress; - address operationsMultisig; - address executorMultisig; - - bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); - - function run() external { - string memory goerliDeploymentConfig = vm.readFile("script/output/M1_deployment_goerli_2023_3_23.json"); - _setAddresses(goerliDeploymentConfig); - - vm.startBroadcast(); - // Deploy ERC20 stakeToken - stakeToken = new ERC20PresetMinterPauser("StakeToken", "STK"); - - // Deploy StrategyBase for stakeToken & whitelist it - baseStrategyImplementation = new StrategyBase(strategyManager); - stakeTokenStrat = StrategyBase( - address( - new TransparentUpgradeableProxy( - address(baseStrategyImplementation), - eigenLayerProxyAdminAddress, - abi.encodeWithSelector(StrategyBase.initialize.selector, stakeToken, eigenLayerPauserRegAddress) - ) - ) - ); - - // Needs to be strategyManager.strategyWhitelister() to add STK strategy - // IStrategy[] memory _strategy = new IStrategy[](1); - // _strategy[0] = stakeTokenStrat; - // strategyManager.addStrategiesToDepositWhitelist(_strategy); - - // Deploy DelegationFaucet, grant it admin/mint/pauser roles, etc. - delegationFaucet = new DelegationFaucet(strategyManager, delegation, stakeToken, stakeTokenStrat); - stakeToken.grantRole(MINTER_ROLE, address(delegationFaucet)); - vm.stopBroadcast(); - } - - function _setAddresses(string memory config) internal { - eigenLayerProxyAdminAddress = stdJson.readAddress(config, ".addresses.eigenLayerProxyAdmin"); - eigenLayerPauserRegAddress = stdJson.readAddress(config, ".addresses.eigenLayerPauserReg"); - delegationAddress = stdJson.readAddress(config, ".addresses.delegation"); - strategyManagerAddress = stdJson.readAddress(config, ".addresses.strategyManager"); - operationsMultisig = stdJson.readAddress(config, ".parameters.operationsMultisig"); - executorMultisig = stdJson.readAddress(config, ".parameters.executorMultisig"); - } -} diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 518ec7afd..a43d7c9c3 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -7,6 +7,7 @@ import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol import "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; +import "../libraries/ShareScalingLib.sol"; import "./AVSDirectoryStorage.sol"; contract AVSDirectory is @@ -31,10 +32,7 @@ contract AVSDirectory is /// @dev Delay before deallocations are completable and can be added back into freeMagnitude uint32 public constant DEALLOCATION_DELAY = 17.5 days; - /// @dev The initial total magnitude for an operator - uint64 public constant INITIAL_TOTAL_MAGNITUDE = 1 ether; - - /// @dev Maximum number of pending allocations AND deallocations for a single operator, operatorSet, strategy + /// @dev Maximum number of pending updates that can be queued for allocations/deallocations uint256 public constant MAX_PENDING_UPDATES = 1; /// @dev Returns the chain ID from the time the contract was deployed. @@ -287,7 +285,7 @@ contract AVSDirectory is require( delegation.isOperator(operator), "AVSDirectory.modifyAllocations: operator not registered to EigenLayer yet" ); - AllocationDelayDetails memory details = allocationDelay[operator]; + IDelegationManager.AllocationDelayDetails memory details = delegation.operatorAllocationDelay(operator); require( details.isSet, "AVSDirectory.modifyAllocations: operator must initialize allocation delay before modifying allocations" @@ -311,7 +309,7 @@ contract AVSDirectory is uint64 currentTotalMagnitude = _getLatestTotalMagnitude(operator, allocations[i].strategy); require( currentTotalMagnitude == allocations[i].expectedTotalMagnitude, - "AVSDirectory.setAllocations: current total magnitude does not match expected" + "AVSDirectory.modifyAllocations: current total magnitude does not match expected" ); // 3. set allocations for the strategy after updating freeMagnitude @@ -433,21 +431,6 @@ contract AVSDirectory is } } - /** - * @notice Called by operators to set their allocation delay one time - * @param delay the allocation delay in seconds - */ - function initializeAllocationDelay(uint32 delay) external { - require( - delegation.isOperator(msg.sender), - "AVSDirectory.initializeAllocationDelay: operator not registered to EigenLayer yet" - ); - require( - !allocationDelay[msg.sender].isSet, "AVSDirectory.initializeAllocationDelay: allocation delay already set" - ); - allocationDelay[msg.sender] = AllocationDelayDetails({isSet: true, allocationDelay: delay}); - } - /** * @notice Called by an AVS to emit an `AVSMetadataURIUpdated` event indicating the information has updated. * @@ -781,9 +764,12 @@ contract AVSDirectory is function _getLatestTotalMagnitude(address operator, IStrategy strategy) internal returns (uint64) { (bool exists,, uint224 totalMagnitude) = _totalMagnitudeUpdate[operator][strategy].latestCheckpoint(); if (!exists) { - totalMagnitude = INITIAL_TOTAL_MAGNITUDE; - _totalMagnitudeUpdate[operator][strategy].push({key: uint32(block.timestamp), value: totalMagnitude}); - freeMagnitude[operator][strategy] = INITIAL_TOTAL_MAGNITUDE; + totalMagnitude = ShareScalingLib.INITIAL_TOTAL_MAGNITUDE; + _totalMagnitudeUpdate[operator][strategy].push({ + key: uint32(block.timestamp), + value: totalMagnitude + }); + freeMagnitude[operator][strategy] = ShareScalingLib.INITIAL_TOTAL_MAGNITUDE; } return uint64(totalMagnitude); @@ -994,23 +980,11 @@ contract AVSDirectory is address operator, IStrategy strategy, uint16 numToComplete - ) public view returns (uint64) { + ) external view returns (uint64) { (uint64 freeMagnitudeToAdd,) = _getPendingFreeMagnitude(operator, strategy, numToComplete); return freeMagnitude[operator][strategy] + freeMagnitudeToAdd; } - /** - * @notice Get the allocation delay (in seconds) for an operator. Can only be configured one-time - * from calling initializeAllocationDelay. - * @param operator the operator to get the allocation delay for - * @return isSet whether the allocation delay is set and the operator can call `modifyAllocations` - * @return allocationDelay the allocation delay in seconds - */ - function getAllocationDelay(address operator) public view returns (bool, uint32) { - AllocationDelayDetails memory details = allocationDelay[operator]; - return (details.isSet, details.allocationDelay); - } - /// @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days function isOperatorSlashable(address operator, OperatorSet memory operatorSet) public view returns (bool) { OperatorSetRegistrationStatus memory registrationStatus = @@ -1019,6 +993,52 @@ contract AVSDirectory is || registrationStatus.lastDeregisteredTimestamp + DEALLOCATION_DELAY >= block.timestamp; } + /// @notice Returns the total magnitude of an operator for a given set of strategies + function getTotalMagnitudes(address operator, IStrategy[] calldata strategies) external view returns (uint64[] memory) { + uint64[] memory totalMagnitudes = new uint64[](strategies.length); + for (uint256 i = 0; i < strategies.length;) { + (bool exists, uint32 key, uint224 value) = _totalMagnitudeUpdate[operator][strategies[i]].latestCheckpoint(); + if (!exists) { + totalMagnitudes[i] = ShareScalingLib.INITIAL_TOTAL_MAGNITUDE; + } else { + totalMagnitudes[i] = uint64(value); + } + + unchecked { + ++i; + } + } + return totalMagnitudes; + } + + /// @notice Returns the total magnitude of an operator for a given set of strategies at a given timestamp + function getTotalMagnitudesAtTimestamp( + address operator, + IStrategy[] calldata strategies, + uint32 timestamp + ) external view returns (uint64[] memory) { + uint64[] memory totalMagnitudes = new uint64[](strategies.length); + for (uint256 i = 0; i < strategies.length;) { + ( + uint224 value, + uint256 pos, + uint256 length + ) = _totalMagnitudeUpdate[operator][strategies[i]].upperLookupRecentWithPos(timestamp); + + // if there is no existing total magnitude checkpoint + if (value != 0 || pos != 0) { + totalMagnitudes[i] = ShareScalingLib.INITIAL_TOTAL_MAGNITUDE; + } else { + totalMagnitudes[i] = uint64(value); + } + + unchecked { + ++i; + } + } + return totalMagnitudes; + } + // /** // * @notice fetches the minimum slashable shares for a certain operator and operatorSet for a list of strategies // * from the current timestamp until the given timestamp diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 930684abc..6a5cd103e 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -6,6 +6,7 @@ import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol"; import "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; +import "../libraries/ShareScalingLib.sol"; import "./DelegationManagerStorage.sol"; /** @@ -40,6 +41,12 @@ contract DelegationManager is // @dev Maximum Value for `stakerOptOutWindowBlocks`. Approximately equivalent to 6 months in blocks. uint256 public constant MAX_STAKER_OPT_OUT_WINDOW_BLOCKS = (180 days) / 12; + // The max configurable withdrawal delay per strategy. Set to 30 days in seconds + uint256 public constant MAX_WITHDRAWAL_DELAY = 30 days; + + // the number of 12-second blocks in 30 days (60 * 60 * 24 * 30 / 12 = 216,000) + uint256 public constant MAX_WITHDRAWAL_DELAY_BLOCKS = MAX_WITHDRAWAL_DELAY / 12; + /// @notice Canonical, virtual beacon chain ETH strategy IStrategy public constant beaconChainETHStrategy = IStrategy(0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0); @@ -95,6 +102,7 @@ contract DelegationManager is /** * @notice Registers the caller as an operator in EigenLayer. * @param registeringOperatorDetails is the `OperatorDetails` for the operator. + * @param allocationDelay is a one-time configurable delay for the operator when performing slashable magnitude allocations. * @param metadataURI is a URI for the operator's metadata, i.e. a link providing more details on the operator. * * @dev Once an operator is registered, they cannot 'deregister' as an operator, and they will forever be considered "delegated to themself". @@ -103,6 +111,7 @@ contract DelegationManager is */ function registerAsOperator( OperatorDetails calldata registeringOperatorDetails, + uint32 allocationDelay, string calldata metadataURI ) external { require(!isDelegated(msg.sender), AlreadyDelegated()); @@ -110,11 +119,22 @@ contract DelegationManager is SignatureWithExpiry memory emptySignatureAndExpiry; // delegate from the operator to themselves _delegate(msg.sender, msg.sender, emptySignatureAndExpiry, bytes32(0)); + // set the allocation delay + _initializeAllocationDelay(allocationDelay); // emit events emit OperatorRegistered(msg.sender, registeringOperatorDetails); emit OperatorMetadataURIUpdated(msg.sender, metadataURI); } + /** + * @notice Called by operators to set their allocation delay one time. Cannot be updated + * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. + * @param delay the allocation delay in seconds + */ + function initializeAllocationDelay(uint32 delay) external { + _initializeAllocationDelay(delay); + } + /** * @notice Updates an operator's stored `OperatorDetails`. * @param newOperatorDetails is the updated `OperatorDetails` for the operator, to replace their current OperatorDetails`. @@ -225,9 +245,9 @@ contract DelegationManager is UnauthorizedCaller() ); - // Gather strategies and shares to remove from staker/operator during undelegation + // Gather strategies and scaled shares to remove from staker/operator during undelegation // Undelegation removes ALL currently-active strategies and shares - (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableShares(staker); + (IStrategy[] memory strategies, uint256[] memory scaledShares) = getDelegatableScaledShares(staker); // emit an event if this action was not initiated by the staker themselves if (msg.sender != staker) { @@ -245,16 +265,16 @@ contract DelegationManager is withdrawalRoots = new bytes32[](strategies.length); for (uint256 i = 0; i < strategies.length; i++) { IStrategy[] memory singleStrategy = new IStrategy[](1); - uint256[] memory singleShare = new uint256[](1); + uint256[] memory singleScaledShare = new uint256[](1); singleStrategy[0] = strategies[i]; - singleShare[0] = shares[i]; + singleScaledShare[0] = scaledShares[i]; withdrawalRoots[i] = _removeSharesAndQueueWithdrawal({ staker: staker, operator: operator, withdrawer: staker, strategies: singleStrategy, - shares: singleShare + scaledShares: singleScaledShare }); } } @@ -282,6 +302,15 @@ contract DelegationManager is ); require(queuedWithdrawalParams[i].withdrawer == msg.sender, WithdrawerNotStaker()); + // Withdrawer inputs the number of real Strategy shares they expect to withdraw, + // convert accordingly to scaledShares in storage + uint256[] memory scaledShares = ShareScalingLib.scaleShares( + avsDirectory, + operator, + queuedWithdrawalParams[i].strategies, + queuedWithdrawalParams[i].shares + ); + // Remove shares from staker's strategies and place strategies/shares in queue. // If the staker is delegated to an operator, the operator's delegated shares are also reduced // NOTE: This will fail if the staker doesn't have the shares implied by the input parameters @@ -290,7 +319,7 @@ contract DelegationManager is operator: operator, withdrawer: queuedWithdrawalParams[i].withdrawer, strategies: queuedWithdrawalParams[i].strategies, - shares: queuedWithdrawalParams[i].shares + scaledShares: scaledShares }); } return withdrawalRoots; @@ -300,12 +329,9 @@ contract DelegationManager is * @notice Used to complete the specified `withdrawal`. The caller must match `withdrawal.withdrawer` * @param withdrawal The Withdrawal to complete. * @param tokens Array in which the i-th entry specifies the `token` input to the 'withdraw' function of the i-th Strategy in the `withdrawal.strategies` array. - * This input can be provided with zero length if `receiveAsTokens` is set to 'false' (since in that case, this input will be unused) - * @param middlewareTimesIndex is the index in the operator that the staker who triggered the withdrawal was delegated to's middleware times array * @param receiveAsTokens If true, the shares specified in the withdrawal will be withdrawn from the specified strategies themselves * and sent to the caller, through calls to `withdrawal.strategies[i].withdraw`. If false, then the shares in the specified strategies * will simply be transferred to the caller directly. - * @dev middlewareTimesIndex is unused, but will be used in the Slasher eventually * @dev beaconChainETHStrategy shares are non-transferrable, so if `receiveAsTokens = false` and `withdrawal.withdrawer != withdrawal.staker`, note that * any beaconChainETHStrategy shares in the `withdrawal` will be _returned to the staker_, rather than transferred to the withdrawer, unlike shares in * any other strategies, which will be transferred to the withdrawer. @@ -313,10 +339,9 @@ contract DelegationManager is function completeQueuedWithdrawal( Withdrawal calldata withdrawal, IERC20[] calldata tokens, - uint256 middlewareTimesIndex, bool receiveAsTokens ) external onlyWhenNotPaused(PAUSED_EXIT_WITHDRAWAL_QUEUE) nonReentrant { - _completeQueuedWithdrawal(withdrawal, tokens, middlewareTimesIndex, receiveAsTokens); + _completeQueuedWithdrawal(withdrawal, tokens, receiveAsTokens); } /** @@ -324,69 +349,67 @@ contract DelegationManager is * Used to complete the specified `withdrawals`. The function caller must match `withdrawals[...].withdrawer` * @param withdrawals The Withdrawals to complete. * @param tokens Array of tokens for each Withdrawal. See `completeQueuedWithdrawal` for the usage of a single array. - * @param middlewareTimesIndexes One index to reference per Withdrawal. See `completeQueuedWithdrawal` for the usage of a single index. * @param receiveAsTokens Whether or not to complete each withdrawal as tokens. See `completeQueuedWithdrawal` for the usage of a single boolean. * @dev See `completeQueuedWithdrawal` for relevant dev tags */ function completeQueuedWithdrawals( Withdrawal[] calldata withdrawals, IERC20[][] calldata tokens, - uint256[] calldata middlewareTimesIndexes, bool[] calldata receiveAsTokens ) external onlyWhenNotPaused(PAUSED_EXIT_WITHDRAWAL_QUEUE) nonReentrant { for (uint256 i = 0; i < withdrawals.length; ++i) { - _completeQueuedWithdrawal(withdrawals[i], tokens[i], middlewareTimesIndexes[i], receiveAsTokens[i]); + _completeQueuedWithdrawal(withdrawals[i], tokens[i], receiveAsTokens[i]); } } /** * @notice Increases a staker's delegated share balance in a strategy. - * @param staker The address to increase the delegated shares for their operator. - * @param strategy The strategy in which to increase the delegated shares. - * @param shares The number of shares to increase. + * @param staker The address to increase the delegated scaled shares for their operator. + * @param strategy The strategy in which to increase the delegated scaled shares. + * @param scaledShares The number of scaled shares to increase. * - * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated shares in `strategy` by `shares`. Otherwise does nothing. + * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated shares in `strategy` by `scaledShares`. Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ - function increaseDelegatedShares( + function increaseDelegatedScaledShares( address staker, IStrategy strategy, - uint256 shares + uint256 scaledShares ) external onlyStrategyManagerOrEigenPodManager { // if the staker is delegated to an operator if (isDelegated(staker)) { address operator = delegatedTo[staker]; // add strategy shares to delegate's shares - _increaseOperatorShares({operator: operator, staker: staker, strategy: strategy, shares: shares}); + _increaseOperatorScaledShares({operator: operator, staker: staker, strategy: strategy, scaledShares: scaledShares}); } } /** * @notice Decreases a staker's delegated share balance in a strategy. - * @param staker The address to increase the delegated shares for their operator. - * @param strategy The strategy in which to decrease the delegated shares. - * @param shares The number of shares to decrease. + * @param staker The address to increase the delegated scaled shares for their operator. + * @param strategy The strategy in which to decrease the delegated scaled shares. + * @param scaledShares The number of scaled shares to decrease. * - * @dev *If the staker is actively delegated*, then decreases the `staker`'s delegated shares in `strategy` by `shares`. Otherwise does nothing. + * @dev *If the staker is actively delegated*, then decreases the `staker`'s delegated scaled shares in `strategy` by `scaledShares`. Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ - function decreaseDelegatedShares( + function decreaseDelegatedScaledShares( address staker, IStrategy strategy, - uint256 shares + uint256 scaledShares ) external onlyStrategyManagerOrEigenPodManager { // if the staker is delegated to an operator if (isDelegated(staker)) { address operator = delegatedTo[staker]; // forgefmt: disable-next-item - // subtract strategy shares from delegate's shares - _decreaseOperatorShares({ + // subtract strategy shares from delegated scaled shares + _decreaseOperatorScaledShares({ operator: operator, staker: staker, strategy: strategy, - shares: shares + scaledShares: scaledShares }); } } @@ -415,6 +438,20 @@ contract DelegationManager is _setStrategyWithdrawalDelayBlocks(strategies, withdrawalDelayBlocks); } + /** + * @notice Called by owner to set the minimum withdrawal delay for each passed in strategy + * Note that the min number of blocks to complete a withdrawal of a strategy is + * MAX(minWithdrawalDelay, strategyWithdrawalDelay[strategy]) + * @param strategies The strategies to set the minimum withdrawal delay for + * @param withdrawalDelays The minimum withdrawal delay (in seconds) to set for each strategy + */ + function setStrategyWithdrawalDelay( + IStrategy[] calldata strategies, + uint256[] calldata withdrawalDelays + ) external onlyOwner { + _setStrategyWithdrawalDelay(strategies, withdrawalDelays); + } + /** * * INTERNAL FUNCTIONS @@ -439,6 +476,26 @@ contract DelegationManager is emit OperatorDetailsModified(msg.sender, newOperatorDetails); } + /** + * @notice Called by operators to set their allocation delay one time. Cannot be updated + * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. + * @param delay the allocation delay in seconds + */ + function _initializeAllocationDelay(uint32 delay) internal { + require( + isOperator(msg.sender), + "DelegationManager._initializeAllocationDelay: operator not registered to EigenLayer yet" + ); + require( + !_operatorAllocationDelay[msg.sender].isSet, + "DelegationManager._initializeAllocationDelay: allocation delay already set" + ); + _operatorAllocationDelay[msg.sender] = AllocationDelayDetails({ + isSet: true, + allocationDelay: delay + }); + } + /** * @notice Delegates *from* a `staker` *to* an `operator`. * @param staker The address to delegate *from* -- this address is delegating control of its own assets. @@ -495,17 +552,41 @@ contract DelegationManager is delegatedTo[staker] = operator; emit StakerDelegated(staker, operator); - (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableShares(staker); + (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableScaledShares(staker); + + // NOTE: technically the function above returns scaled shares, so it needs to be descaled before scaling to the + // the new operator according to their totalMagnitude. However, since the staker is not delegated, + // scaledShares = shares so we can skip descaling and read these as descaled shares. + uint256[] memory scaledShares = ShareScalingLib.scaleShares(avsDirectory, operator, strategies, shares); for (uint256 i = 0; i < strategies.length;) { // forgefmt: disable-next-item - _increaseOperatorShares({ + _increaseOperatorScaledShares({ operator: operator, staker: staker, strategy: strategies[i], - shares: shares[i] + scaledShares: scaledShares[i] }); + // stakerStrategyScaledShares(staker, strategies[i]) needs to be updated to be equal to newly scaled shares. + // we take the difference between the shares and the scaledShares to update the staker's scaledShares. The key property + // here is that scaledShares should be >= shares and can never be less than shares due to totalMagnitude being + // a monotonically decreasing value (see ShareScalingLib.scaleShares for more info). + // The exact same property applies to the EigenPodManager and podOwnerScaledShares where real ETH shares are scaled based on + // the delegated operator (if any) prior to being stored as scaledShares in the EigenPodManager. + if (shares[i] < scaledShares[i]) { + if (strategies[i] == beaconChainETHStrategy) { + eigenPodManager.addScaledShares(staker, scaledShares[i] - shares[i]); + } else { + strategyManager.addScaledShares( + staker, + strategies[i].underlyingToken(), //TODO possibly remove this from the interface + strategies[i], + scaledShares[i] - shares[i] + ); + } + } + unchecked { ++i; } @@ -513,121 +594,174 @@ contract DelegationManager is } /** - * @dev commented-out param (middlewareTimesIndex) is the index in the operator that the staker who triggered the withdrawal was delegated to's middleware times array - * This param is intended to be passed on to the Slasher contract, but is unused in the M2 release of these contracts, and is thus commented-out. + * @dev This function "descales" the scaledShares according to the totalMagnitude at the time of withdrawal completion. + * This will apply any slashing that has occurred since the scaledShares were initially set in storage. + * If receiveAsTokens is true, then these descaled shares will be withdrawn as tokens. + * If receiveAsTokens is false, then they will be rescaled according to the current operator the staker is delegated to, and added back to the operator's scaledShares. */ function _completeQueuedWithdrawal( Withdrawal calldata withdrawal, IERC20[] calldata tokens, - uint256, /*middlewareTimesIndex*/ bool receiveAsTokens ) internal { bytes32 withdrawalRoot = calculateWithdrawalRoot(withdrawal); - require(pendingWithdrawals[withdrawalRoot], WithdrawalDoesNotExist()); - - require(withdrawal.startBlock + minWithdrawalDelayBlocks <= block.number, WithdrawalDelayNotElapsed()); + require( + pendingWithdrawals[withdrawalRoot], "DelegationManager._completeQueuedWithdrawal: action is not in queue" + ); + require( + withdrawal.startTimestamp + minWithdrawalDelay <= block.number, + "DelegationManager._completeQueuedWithdrawal: minWithdrawalDelay period has not yet passed" + ); + require( + msg.sender == withdrawal.withdrawer, + "DelegationManager._completeQueuedWithdrawal: only withdrawer can complete action" + ); + require( + tokens.length == withdrawal.strategies.length, + "DelegationManager._completeQueuedWithdrawal: input length mismatch" + ); - require(msg.sender == withdrawal.withdrawer, UnauthorizedCaller()); + // read delegated operator for scaling and adding shares back if needed + address currentOperator = delegatedTo[msg.sender]; + // descale shares to get the "real" strategy share values of the withdrawal + uint256[] memory descaledShares = ShareScalingLib.descaleSharesAtTimestamp( + avsDirectory, + withdrawal.delegatedTo, + withdrawal.strategies, + withdrawal.scaledShares, + withdrawal.startTimestamp + avsDirectory.DEALLOCATION_DELAY() + ); if (receiveAsTokens) { - require(tokens.length == withdrawal.strategies.length, InputArrayLengthMismatch()); + // complete the withdrawal by converting descaled shares to tokens + _completeReceiveAsTokens( + withdrawal, + tokens, + descaledShares + ); + } else { + // Award shares back in StrategyManager/EigenPodManager. + _completeReceiveAsShares( + withdrawal, + tokens, + descaledShares + ); } // Remove `withdrawalRoot` from pending roots delete pendingWithdrawals[withdrawalRoot]; + emit WithdrawalCompleted(withdrawalRoot); + } - if (receiveAsTokens) { - // Finalize action by converting shares to tokens for each strategy, or - // by re-awarding shares in each strategy. - for (uint256 i = 0; i < withdrawal.strategies.length;) { - require( - withdrawal.startBlock + strategyWithdrawalDelayBlocks[withdrawal.strategies[i]] <= block.number, - WithdrawalDelayNotElapsed() - ); + /// TODO: natspec + function _completeReceiveAsTokens( + Withdrawal calldata withdrawal, + IERC20[] calldata tokens, + uint256[] memory descaledShares + ) internal { + // Finalize action by converting scaled shares to tokens for each strategy, or + // by re-awarding shares in each strategy. + for (uint256 i = 0; i < withdrawal.strategies.length;) { + require( + withdrawal.startTimestamp + strategyWithdrawalDelays[withdrawal.strategies[i]] <= block.timestamp, + "DelegationManager._completeReceiveAsTokens: withdrawalDelay period has not yet passed for this strategy" + ); - _withdrawSharesAsTokens({ - staker: withdrawal.staker, - withdrawer: msg.sender, - strategy: withdrawal.strategies[i], - shares: withdrawal.shares[i], - token: tokens[i] - }); - unchecked { - ++i; - } + _withdrawSharesAsTokens({ + staker: withdrawal.staker, + withdrawer: msg.sender, + strategy: withdrawal.strategies[i], + shares: descaledShares[i], + token: tokens[i] + }); + unchecked { + ++i; } - // Award shares back in StrategyManager/EigenPodManager. If withdrawer is delegated, increase the shares delegated to the operator - } else { - // Award shares back in StrategyManager/EigenPodManager. - // If withdrawer is delegated, increase the shares delegated to the operator. - address currentOperator = delegatedTo[msg.sender]; - for (uint256 i = 0; i < withdrawal.strategies.length;) { - require( - withdrawal.startBlock + strategyWithdrawalDelayBlocks[withdrawal.strategies[i]] <= block.number, - WithdrawalDelayNotElapsed() - ); + } + } + /// TODO: natspec + function _completeReceiveAsShares( + Withdrawal calldata withdrawal, + IERC20[] calldata tokens, + uint256[] memory descaledShares + ) internal { + // read delegated operator for scaling and adding shares back if needed + address currentOperator = delegatedTo[msg.sender]; + // We scale shares again to the new totalMagnitude of the currentOperator. + uint256[] memory scaledShares = ShareScalingLib.scaleShares( + avsDirectory, + currentOperator, + withdrawal.strategies, + descaledShares + ); + + for (uint256 i = 0; i < withdrawal.strategies.length;) { + require( + withdrawal.startTimestamp + strategyWithdrawalDelays[withdrawal.strategies[i]] <= block.number, + "DelegationManager._completeReceiveAsShares: withdrawalDelay period has not yet passed for this strategy" + ); + + /** + * When awarding podOwnerShares in EigenPodManager, we need to be sure to only give them back to the original podOwner. + * Other strategy shares can + will be awarded to the withdrawer. + */ + if (withdrawal.strategies[i] == beaconChainETHStrategy) { + address staker = withdrawal.staker; /** - * When awarding podOwnerShares in EigenPodManager, we need to be sure to only give them back to the original podOwner. - * Other strategy shares can + will be awarded to the withdrawer. + * Update shares amount depending upon the returned value. + * The return value will be lower than the input value in the case where the staker has an existing share deficit */ - if (withdrawal.strategies[i] == beaconChainETHStrategy) { - address staker = withdrawal.staker; - /** - * Update shares amount depending upon the returned value. - * The return value will be lower than the input value in the case where the staker has an existing share deficit - */ - uint256 increaseInDelegateableShares = - eigenPodManager.addShares({podOwner: staker, shares: withdrawal.shares[i]}); - address podOwnerOperator = delegatedTo[staker]; - // Similar to `isDelegated` logic - if (podOwnerOperator != address(0)) { - _increaseOperatorShares({ - operator: podOwnerOperator, - // the 'staker' here is the address receiving new shares - staker: staker, - strategy: withdrawal.strategies[i], - shares: increaseInDelegateableShares - }); - } - } else { - strategyManager.addShares(msg.sender, tokens[i], withdrawal.strategies[i], withdrawal.shares[i]); - // Similar to `isDelegated` logic - if (currentOperator != address(0)) { - _increaseOperatorShares({ - operator: currentOperator, - // the 'staker' here is the address receiving new shares - staker: msg.sender, - strategy: withdrawal.strategies[i], - shares: withdrawal.shares[i] - }); - } + uint256 increaseInDelegateableScaledShares = + eigenPodManager.addScaledShares({podOwner: staker, scaledShares: scaledShares[i]}); + address podOwnerOperator = delegatedTo[staker]; + // Similar to `isDelegated` logic + if (podOwnerOperator != address(0)) { + _increaseOperatorScaledShares({ + operator: podOwnerOperator, + // the 'staker' here is the address receiving new shares + staker: staker, + strategy: withdrawal.strategies[i], + scaledShares: increaseInDelegateableScaledShares + }); } - unchecked { - ++i; + } else { + strategyManager.addScaledShares(msg.sender, tokens[i], withdrawal.strategies[i], scaledShares[i]); + // Similar to `isDelegated` logic + if (currentOperator != address(0)) { + _increaseOperatorScaledShares({ + operator: currentOperator, + // the 'staker' here is the address receiving new shares + staker: msg.sender, + strategy: withdrawal.strategies[i], + scaledShares: scaledShares[i] + }); } } + unchecked { + ++i; + } } - - emit WithdrawalCompleted(withdrawalRoot); } - // @notice Increases `operator`s delegated shares in `strategy` by `shares` and emits an `OperatorSharesIncreased` event - function _increaseOperatorShares(address operator, address staker, IStrategy strategy, uint256 shares) internal { - operatorShares[operator][strategy] += shares; - emit OperatorSharesIncreased(operator, staker, strategy, shares); + // @notice Increases `operator`s delegated scaled shares in `strategy` by `scaledShares` and emits an `OperatorSharesIncreased` event + function _increaseOperatorScaledShares(address operator, address staker, IStrategy strategy, uint256 scaledShares) internal { + operatorScaledShares[operator][strategy] += scaledShares; + // TODO: What to do about event wrt scaling? + emit OperatorSharesIncreased(operator, staker, strategy, scaledShares); } - // @notice Decreases `operator`s delegated shares in `strategy` by `shares` and emits an `OperatorSharesDecreased` event - function _decreaseOperatorShares(address operator, address staker, IStrategy strategy, uint256 shares) internal { + // @notice Decreases `operator`s delegated scaled shares in `strategy` by `scaledShares` and emits an `OperatorSharesDecreased` event + function _decreaseOperatorScaledShares(address operator, address staker, IStrategy strategy, uint256 scaledShares) internal { // This will revert on underflow, so no check needed - operatorShares[operator][strategy] -= shares; - emit OperatorSharesDecreased(operator, staker, strategy, shares); + operatorScaledShares[operator][strategy] -= scaledShares; + // TODO: What to do about event wrt scaling? + emit OperatorSharesDecreased(operator, staker, strategy, scaledShares); } /** - * @notice Removes `shares` in `strategies` from `staker` who is currently delegated to `operator` and queues a withdrawal to the `withdrawer`. + * @notice Removes `scaledShares` in `strategies` from `staker` who is currently delegated to `operator` and queues a withdrawal to the `withdrawer`. * @dev If the `operator` is indeed an operator, then the operator's delegated shares in the `strategies` are also decreased appropriately. * @dev If `withdrawer` is not the same address as `staker`, then thirdPartyTransfersForbidden[strategy] must be set to false in the StrategyManager. */ @@ -636,7 +770,7 @@ contract DelegationManager is address operator, address withdrawer, IStrategy[] memory strategies, - uint256[] memory shares + uint256[] memory scaledShares ) internal returns (bytes32) { require(staker != address(0), InputAddressZero()); require(strategies.length != 0, InputArrayLengthZero()); @@ -647,11 +781,11 @@ contract DelegationManager is // Similar to `isDelegated` logic if (operator != address(0)) { // forgefmt: disable-next-item - _decreaseOperatorShares({ + _decreaseOperatorScaledShares({ operator: operator, staker: staker, strategy: strategies[i], - shares: shares[i] + scaledShares: scaledShares[i] }); } @@ -663,15 +797,15 @@ contract DelegationManager is * shares from the operator to whom the staker is delegated. * It will also revert if the share amount being withdrawn is not a whole Gwei amount. */ - eigenPodManager.removeShares(staker, shares[i]); + eigenPodManager.removeScaledShares(staker, scaledShares[i]); } else { // If thirdPartyTransfersForbidden is set, withdrawer and staker must be the same address require( staker == withdrawer || !strategyManager.thirdPartyTransfersForbidden(strategies[i]), WithdrawerNotStaker() ); - // this call will revert if `shares[i]` exceeds the Staker's current shares in `strategies[i]` - strategyManager.removeShares(staker, strategies[i], shares[i]); + // this call will revert if `scaledShares[i]` exceeds the Staker's current shares in `strategies[i]` + strategyManager.removeScaledShares(staker, strategies[i], scaledShares[i]); } unchecked { @@ -688,9 +822,9 @@ contract DelegationManager is delegatedTo: operator, withdrawer: withdrawer, nonce: nonce, - startBlock: uint32(block.number), + startTimestamp: uint32(block.timestamp), strategies: strategies, - shares: shares + scaledShares: scaledShares }); bytes32 withdrawalRoot = calculateWithdrawalRoot(withdrawal); @@ -713,6 +847,7 @@ contract DelegationManager is uint256 shares, IERC20 token ) internal { + // TODO: rename params if (strategy == beaconChainETHStrategy) { eigenPodManager.withdrawSharesAsTokens({podOwner: staker, destination: withdrawer, shares: shares}); } else { @@ -752,6 +887,36 @@ contract DelegationManager is } } + /** + * @notice Sets the withdrawal delay (in seconds) for each strategy in `_strategies` to `_withdrawalDelay`. + * gets called when initializing contract or by calling `setStrategyWithdrawalDelay` + */ + function _setStrategyWithdrawalDelay( + IStrategy[] calldata _strategies, + uint256[] calldata _withdrawalDelays + ) internal { + require( + _strategies.length == _withdrawalDelays.length, + "DelegationManager._setStrategyWithdrawalDelay: input length mismatch" + ); + uint256 numStrats = _strategies.length; + for (uint256 i = 0; i < numStrats; ++i) { + IStrategy strategy = _strategies[i]; + uint256 prevStrategyWithdrawalDelay = strategyWithdrawalDelays[strategy]; + uint256 newStrategyWithdrawalDelay = _withdrawalDelays[i]; + require( + newStrategyWithdrawalDelay <= MAX_WITHDRAWAL_DELAY, + "DelegationManager._setStrategyWithdrawalDelay: _withdrawalDelay cannot be > MAX_WITHDRAWAL_DELAY" + ); + + // set the new withdrawal delay (in seconds) + strategyWithdrawalDelays[strategy] = newStrategyWithdrawalDelay; + emit StrategyWithdrawalDelaySet( + strategy, prevStrategyWithdrawalDelay, newStrategyWithdrawalDelay + ); + } + } + /** * * VIEW FUNCTIONS @@ -800,6 +965,14 @@ contract DelegationManager is return _operatorDetails[operator]; } + /** + * @notice Returns the AllocationDelayDetails struct associated with an `operator` + * @dev If the operator has not set an allocation delay, then the `isSet` field will be `false`. + */ + function operatorAllocationDelay(address operator) external view returns (AllocationDelayDetails memory) { + return _operatorAllocationDelay[operator]; + } + /** * @notice Returns the delegationApprover account for an operator */ @@ -818,55 +991,128 @@ contract DelegationManager is return _operatorDetails[operator].stakerOptOutWindowBlocks; } + /// @notice a legacy function that returns the operatorShares for an operator and strategy + function operatorShares(address operator, IStrategy strategy) public view returns (uint256) { + return ShareScalingLib.descaleShares({ + avsDirectory: avsDirectory, + operator: operator, + strategy: strategy, + scaledShares: operatorScaledShares[operator][strategy] + }); + } + + /// @notice Given array of strategies, returns array of scaled shares for the operator + function getOperatorScaledShares( + address operator, + IStrategy[] memory strategies + ) public view returns (uint256[] memory) { + uint256[] memory scaledShares = new uint256[](strategies.length); + for (uint256 i = 0; i < strategies.length; ++i) { + scaledShares[i] = operatorScaledShares[operator][strategies[i]]; + } + return scaledShares; + } + /// @notice Given array of strategies, returns array of shares for the operator function getOperatorShares( address operator, IStrategy[] memory strategies ) public view returns (uint256[] memory) { - uint256[] memory shares = new uint256[](strategies.length); - for (uint256 i = 0; i < strategies.length; ++i) { - shares[i] = operatorShares[operator][strategies[i]]; + return ShareScalingLib.descaleShares({ + avsDirectory: avsDirectory, + operator: operator, + strategies: strategies, + scaledShares: getOperatorScaledShares(operator, strategies) + }); + } + + /** + * @notice Given a staker and shares amounts of deposits, return the scaled shares calculated if + * the staker were to deposit. Depends on which operator the staker is delegated to. + */ + function getStakerScaledShares( + address staker, + IStrategy strategy, + uint256 shares + ) public view returns (uint256 scaledShares) { + address operator = delegatedTo[staker]; + if (operator == address(0)) { + // if the staker is not delegated to an operator, return the shares as is + // as no slashing and scaling applied + scaledShares = shares; + } else { + // if the staker is delegated to an operator, scale the shares accordingly + scaledShares = ShareScalingLib.scaleShares({ + avsDirectory: avsDirectory, + operator: operator, + strategy: strategy, + shares: shares + }); + } + } + + /** + * @notice Given a staker and scaled shares amounts of deposits, return the shares calculated if + * the staker were to withdraw. This value depends on which operator the staker is delegated to. + * The shares amount returned is the actual amount of Strategy shares the staker would receive (subject + * to each strategy's underlying shares to token ratio). + */ + function getStakerShares( + address staker, + IStrategy strategy, + uint256 scaledShares + ) public view returns (uint256 shares) { + address operator = delegatedTo[staker]; + if (operator == address(0)) { + // if the staker is not delegated to an operator, return the shares as is + // as no slashing and scaling applied + shares = scaledShares; + } else { + // if the staker is delegated to an operator, descale the shares accordingly + shares = ShareScalingLib.descaleShares({ + avsDirectory: avsDirectory, + operator: operator, + strategy: strategy, + scaledShares: scaledShares + }); } - return shares; } /** - * @notice Returns the number of actively-delegatable shares a staker has across all strategies. + * @notice Returns the number of actively-delegatable scaled shares a staker has across all strategies. * @dev Returns two empty arrays in the case that the Staker has no actively-delegateable shares. */ - function getDelegatableShares( - address staker - ) public view returns (IStrategy[] memory, uint256[] memory) { - // Get currently active shares and strategies for `staker` - int256 podShares = eigenPodManager.podOwnerShares(staker); + function getDelegatableScaledShares(address staker) public view returns (IStrategy[] memory, uint256[] memory) { + // Get currently active scaled shares and strategies for `staker` + int256 scaledPodShares = eigenPodManager.podOwnerScaledShares(staker); (IStrategy[] memory strategyManagerStrats, uint256[] memory strategyManagerShares) = strategyManager.getDeposits(staker); // Has no shares in EigenPodManager, but potentially some in StrategyManager - if (podShares <= 0) { + if (scaledPodShares <= 0) { return (strategyManagerStrats, strategyManagerShares); } IStrategy[] memory strategies; - uint256[] memory shares; + uint256[] memory scaledShares; if (strategyManagerStrats.length == 0) { // Has shares in EigenPodManager, but not in StrategyManager strategies = new IStrategy[](1); - shares = new uint256[](1); + scaledShares = new uint256[](1); strategies[0] = beaconChainETHStrategy; - shares[0] = uint256(podShares); + scaledShares[0] = uint256(scaledPodShares); } else { // Has shares in both - +// TODO: make more efficient by resizing array // 1. Allocate return arrays strategies = new IStrategy[](strategyManagerStrats.length + 1); - shares = new uint256[](strategies.length); + scaledShares = new uint256[](strategies.length); // 2. Place StrategyManager strats/shares in return arrays for (uint256 i = 0; i < strategyManagerStrats.length;) { strategies[i] = strategyManagerStrats[i]; - shares[i] = strategyManagerShares[i]; + scaledShares[i] = strategyManagerShares[i]; unchecked { ++i; @@ -875,10 +1121,10 @@ contract DelegationManager is // 3. Place EigenPodManager strat/shares in return arrays strategies[strategies.length - 1] = beaconChainETHStrategy; - shares[strategies.length - 1] = uint256(podShares); + scaledShares[strategies.length - 1] = uint256(scaledPodShares); } - - return (strategies, shares); + + return (strategies, scaledShares); } /** diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index 3af7b64fe..c2b2eb6c2 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.27; import "../interfaces/IStrategyManager.sol"; import "../interfaces/IDelegationManager.sol"; import "../interfaces/ISlasher.sol"; +import "../interfaces/IAVSDirectory.sol"; import "../interfaces/IEigenPodManager.sol"; /** @@ -33,6 +34,9 @@ abstract contract DelegationManagerStorage is IDelegationManager { */ bytes32 internal _DOMAIN_SEPARATOR; + /// TODO @dev actually make this immutable and add to constructor + IAVSDirectory public constant avsDirectory = IAVSDirectory(address(0)); + /// @notice The StrategyManager contract for EigenLayer IStrategyManager public immutable strategyManager; @@ -42,17 +46,16 @@ abstract contract DelegationManagerStorage is IDelegationManager { /// @notice The EigenPodManager contract for EigenLayer IEigenPodManager public immutable eigenPodManager; - // the number of 12-second blocks in 30 days (60 * 60 * 24 * 30 / 12 = 216,000) - uint256 public constant MAX_WITHDRAWAL_DELAY_BLOCKS = 216_000; - /** - * @notice returns the total number of shares in `strategy` that are delegated to `operator`. - * @notice Mapping: operator => strategy => total number of shares in the strategy delegated to the operator. + * @notice returns the total number of scaled shares (i.e. shares scaled down by a factor of the `operator`'s + * totalMagnitude) in `strategy` that are delegated to `operator`. + * @notice Mapping: operator => strategy => total number of scaled shares in the strategy delegated to the operator. * @dev By design, the following invariant should hold for each Strategy: - * (operator's shares in delegation manager) = sum (shares above zero of all stakers delegated to operator) - * = sum (delegateable shares of all stakers delegated to the operator) + * (operator's scaled shares in delegation manager) = sum (scaled shares above zero of all stakers delegated to operator) + * = sum (delegateable scaled shares of all stakers delegated to the operator) + * @dev FKA `operatorShares` */ - mapping(address => mapping(IStrategy => uint256)) public operatorShares; + mapping(address => mapping(IStrategy => uint256)) public operatorScaledShares; /** * @notice Mapping: operator => OperatorDetails struct @@ -102,6 +105,26 @@ abstract contract DelegationManagerStorage is IDelegationManager { */ mapping(IStrategy => uint256) public strategyWithdrawalDelayBlocks; + /** + * @notice Global minimum withdrawal delay for all strategy withdrawals. + * NOTE: This is used equivalently to minWithdrawalDelayBlocks and strategyWithdrawalDelayBlocks but + * using timestamps instead in the Slashing release. + * In addition, we now also configure withdrawal delays on a per-strategy basis. + * To withdraw from a strategy, max(minWithdrawalDelay, strategyWithdrawalDelay[strategy]) number of seconds must have passed. + * See mapping strategyWithdrawalDelay below for per-strategy withdrawal delays. + */ + uint256 public minWithdrawalDelay; + + /** + * @notice Minimum delay enforced by this contract per Strategy for completing queued withdrawals. Measured in seconds, and adjustable by this contract's owner, + * up to a maximum of `MAX_WITHDRAWAL_DELAY`. Minimum value is 0 (i.e. no delay enforced). + */ + mapping(IStrategy => uint256) public strategyWithdrawalDelays; + + /// @notice Mapping: operator => allocation delay (in seconds) for the operator. + /// This determines how long it takes for allocations to take effect in the future. Can only be set one time for each operator + mapping(address => AllocationDelayDetails) internal _operatorAllocationDelay; + constructor(IStrategyManager _strategyManager, ISlasher _slasher, IEigenPodManager _eigenPodManager) { strategyManager = _strategyManager; eigenPodManager = _eigenPodManager; @@ -113,5 +136,5 @@ abstract contract DelegationManagerStorage is IDelegationManager { * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ - uint256[39] private __gap; + uint256[38] private __gap; } diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index 89576f185..88cebefc2 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -59,8 +59,9 @@ contract StrategyManager is constructor( IDelegationManager _delegation, IEigenPodManager _eigenPodManager, - ISlasher _slasher - ) StrategyManagerStorage(_delegation, _eigenPodManager, _slasher) { + ISlasher _slasher, + IAVSDirectory _avsDirectory + ) StrategyManagerStorage(_delegation, _eigenPodManager, _slasher, _avsDirectory) { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; } @@ -92,7 +93,7 @@ contract StrategyManager is * @param strategy is the specified strategy where deposit is to be made, * @param token is the denomination in which the deposit is to be made, * @param amount is the amount of token to be deposited in the strategy by the staker - * @return shares The amount of new shares in the `strategy` created as part of the action. + * @return scaledShares The amount of new scaled shares in the `strategy` created as part of the action. * @dev The `msg.sender` must have previously approved this contract to transfer at least `amount` of `token` on their behalf. * * WARNING: Depositing tokens that allow reentrancy (eg. ERC-777) into a strategy is not recommended. This can lead to attack vectors @@ -102,8 +103,8 @@ contract StrategyManager is IStrategy strategy, IERC20 token, uint256 amount - ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 shares) { - shares = _depositIntoStrategy(msg.sender, strategy, token, amount); + ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 scaledShares) { + scaledShares = _depositIntoStrategy(msg.sender, strategy, token, amount); } /** @@ -118,7 +119,7 @@ contract StrategyManager is * @param expiry the timestamp at which the signature expires * @param signature is a valid signature from the `staker`. either an ECDSA signature if the `staker` is an EOA, or data to forward * following EIP-1271 if the `staker` is a contract - * @return shares The amount of new shares in the `strategy` created as part of the action. + * @return scaledShares The amount of new scaled shares in the `strategy` created as part of the action. * @dev The `msg.sender` must have previously approved this contract to transfer at least `amount` of `token` on their behalf. * @dev A signature is required for this function to eliminate the possibility of griefing attacks, specifically those * targeting stakers who may be attempting to undelegate. @@ -134,9 +135,12 @@ contract StrategyManager is address staker, uint256 expiry, bytes memory signature - ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 shares) { - require(!thirdPartyTransfersForbidden[strategy], ThirdPartyTransfersDisabled()); - require(expiry >= block.timestamp, SignatureExpired()); + ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 scaledShares) { + require( + !thirdPartyTransfersForbidden[strategy], + "StrategyManager.depositIntoStrategyWithSignature: third transfers disabled" + ); + require(expiry >= block.timestamp, "StrategyManager.depositIntoStrategyWithSignature: signature expired"); // calculate struct hash, then increment `staker`'s nonce uint256 nonce = nonces[staker]; bytes32 structHash = keccak256(abi.encode(DEPOSIT_TYPEHASH, staker, strategy, token, amount, nonce, expiry)); @@ -156,32 +160,34 @@ contract StrategyManager is EIP1271SignatureUtils.checkSignature_EIP1271(staker, digestHash, signature); // deposit the tokens (from the `msg.sender`) and credit the new shares to the `staker` - shares = _depositIntoStrategy(staker, strategy, token, amount); + scaledShares = _depositIntoStrategy(staker, strategy, token, amount); } - /// @notice Used by the DelegationManager to remove a Staker's shares from a particular strategy when entering the withdrawal queue - function removeShares(address staker, IStrategy strategy, uint256 shares) external onlyDelegationManager { - _removeShares(staker, strategy, shares); + /// @notice Used by the DelegationManager to remove a Staker's scaled shares from a particular strategy when entering the withdrawal queue + function removeScaledShares(address staker, IStrategy strategy, uint256 scaledShares) external onlyDelegationManager { + _removeScaledShares(staker, strategy, scaledShares); } - /// @notice Used by the DelegationManager to award a Staker some shares that have passed through the withdrawal queue - function addShares( + /// @notice Used by the DelegationManager to award a Staker some scaled shares that have passed through the withdrawal queue + function addScaledShares( address staker, IERC20 token, IStrategy strategy, - uint256 shares + uint256 scaledShares ) external onlyDelegationManager { - _addShares(staker, token, strategy, shares); + _addScaledShares(staker, token, strategy, scaledShares); } /// @notice Used by the DelegationManager to convert withdrawn shares to tokens and send them to a recipient + /// Assumes that shares being passed in have already been descaled accordingly to account for any slashing + /// and are the `real` shares in the strategy to withdraw function withdrawSharesAsTokens( address recipient, IStrategy strategy, - uint256 shares, + uint256 strategyShares, IERC20 token ) external onlyDelegationManager { - strategy.withdraw(recipient, token, shares); + strategy.withdraw(recipient, token, strategyShares); } /** @@ -254,87 +260,93 @@ contract StrategyManager is // INTERNAL FUNCTIONS /** - * @notice This function adds `shares` for a given `strategy` to the `staker` and runs through the necessary update logic. - * @param staker The address to add shares to + * @notice This function adds `scaledShares` for a given `strategy` to the `staker` and runs through the necessary update logic. + * @param staker The address to add scaledShares to * @param token The token that is being deposited (used for indexing) - * @param strategy The Strategy in which the `staker` is receiving shares - * @param shares The amount of shares to grant to the `staker` - * @dev In particular, this function calls `delegation.increaseDelegatedShares(staker, strategy, shares)` to ensure that all - * delegated shares are tracked, increases the stored share amount in `stakerStrategyShares[staker][strategy]`, and adds `strategy` + * @param strategy The Strategy in which the `staker` is receiving scaledShares + * @param scaledShares The amount of scaled shares to grant to the `staker` + * @dev In particular, this function calls `delegation.increaseDelegatedScaledShares(staker, strategy, scaledShares)` to ensure that all + * delegated scaledShares are tracked, increases the stored share amount in `stakerStrategyScaledShares[staker][strategy]`, and adds `strategy` * to the `staker`'s list of strategies, if it is not in the list already. */ - function _addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) internal { + function _addScaledShares(address staker, IERC20 token, IStrategy strategy, uint256 scaledShares) internal { // sanity checks on inputs - require(staker != address(0), StakerAddressZero()); - require(shares != 0, SharesAmountZero()); - - // if they dont have existing shares of this strategy, add it to their strats - if (stakerStrategyShares[staker][strategy] == 0) { - require(stakerStrategyList[staker].length < MAX_STAKER_STRATEGY_LIST_LENGTH, MaxStrategiesExceeded()); + require(staker != address(0), "StrategyManager._addScaledShares: staker cannot be zero address"); + require(scaledShares != 0, "StrategyManager._addScaledShares: shares should not be zero!"); + + // if they dont have existing scaled shares of this strategy, add it to their strats + if (stakerStrategyScaledShares[staker][strategy] == 0) { + require( + stakerStrategyList[staker].length < MAX_STAKER_STRATEGY_LIST_LENGTH, + "StrategyManager._addScaledShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH" + ); stakerStrategyList[staker].push(strategy); } - // add the returned shares to their existing shares for this strategy - stakerStrategyShares[staker][strategy] += shares; + // add the returned scaled shares to their existing scaled shares for this strategy + stakerStrategyScaledShares[staker][strategy] += scaledShares; - emit Deposit(staker, token, strategy, shares); + emit Deposit(staker, token, strategy, scaledShares); } /** * @notice Internal function in which `amount` of ERC20 `token` is transferred from `msg.sender` to the Strategy-type contract - * `strategy`, with the resulting shares credited to `staker`. - * @param staker The address that will be credited with the new shares. + * `strategy`, with the resulting scaledShares credited to `staker`. + * @param staker The address that will be credited with the new scaledShares. * @param strategy The Strategy contract to deposit into. * @param token The ERC20 token to deposit. * @param amount The amount of `token` to deposit. - * @return shares The amount of *new* shares in `strategy` that have been credited to the `staker`. + * @return scaledShares The amount of *new* scaled shares in `strategy` that have been credited to the `staker`. */ function _depositIntoStrategy( address staker, IStrategy strategy, IERC20 token, uint256 amount - ) internal onlyStrategiesWhitelistedForDeposit(strategy) returns (uint256 shares) { + ) internal onlyStrategiesWhitelistedForDeposit(strategy) returns (uint256 scaledShares) { // transfer tokens from the sender to the strategy token.safeTransferFrom(msg.sender, address(strategy), amount); // deposit the assets into the specified strategy and get the equivalent amount of shares in that strategy - shares = strategy.deposit(token, amount); + uint256 shares = strategy.deposit(token, amount); + + // scale strategy shares before storing + scaledShares = delegation.getStakerScaledShares(staker, strategy, shares); - // add the returned shares to the staker's existing shares for this strategy - _addShares(staker, token, strategy, shares); + // add the returned scaled shares to the staker's existing scaled shares for this strategy + _addScaledShares(staker, token, strategy, scaledShares); - // Increase shares delegated to operator, if needed - delegation.increaseDelegatedShares(staker, strategy, shares); + // Increase scaled shares delegated to operator, if needed + delegation.increaseDelegatedScaledShares(staker, strategy, scaledShares); - return shares; + return scaledShares; } /** - * @notice Decreases the shares that `staker` holds in `strategy` by `shareAmount`. - * @param staker The address to decrement shares from - * @param strategy The strategy for which the `staker`'s shares are being decremented - * @param shareAmount The amount of shares to decrement - * @dev If the amount of shares represents all of the staker`s shares in said strategy, + * @notice Decreases the scaled shares that `staker` holds in `strategy` by `scaledSharesAmount`. + * @param staker The address to decrement scaled shares from + * @param strategy The strategy for which the `staker`'s scaled shares are being decremented + * @param scaledSharesAmount The amount of scaled shares to decrement + * @dev If the amount of scaled shares represents all of the staker`s shares in said strategy, * then the strategy is removed from stakerStrategyList[staker] and 'true' is returned. Otherwise 'false' is returned. */ - function _removeShares(address staker, IStrategy strategy, uint256 shareAmount) internal returns (bool) { + function _removeScaledShares(address staker, IStrategy strategy, uint256 scaledSharesAmount) internal returns (bool) { // sanity checks on inputs - require(shareAmount != 0, SharesAmountZero()); + require(scaledSharesAmount != 0, "StrategyManager._removeScaledShares: scaledSharesAmount should not be zero!"); - //check that the user has sufficient shares - uint256 userShares = stakerStrategyShares[staker][strategy]; + //check that the user has sufficient scaled shares + uint256 userShares = stakerStrategyScaledShares[staker][strategy]; - require(shareAmount <= userShares, SharesAmountTooHigh()); + require(scaledSharesAmount <= userShares, "StrategyManager._removeScaledShares: scaledSharesAmount too high"); //unchecked arithmetic since we just checked this above unchecked { - userShares = userShares - shareAmount; + userShares = userShares - scaledSharesAmount; } // subtract the shares from the staker's existing shares for this strategy - stakerStrategyShares[staker][strategy] = userShares; + stakerStrategyScaledShares[staker][strategy] = userShares; - // if no existing shares, remove the strategy from the staker's dynamic array of strategies + // if no existing scaled shares, remove the strategy from the staker's dynamic array of strategies if (userShares == 0) { _removeStrategyFromStakerStrategyList(staker, strategy); @@ -394,23 +406,32 @@ contract StrategyManager is // VIEW FUNCTIONS /** - * @notice Get all details on the staker's deposits and corresponding shares + * @notice Get all details on the staker's deposits and corresponding scaled shares * @param staker The staker of interest, whose deposits this function will fetch - * @return (staker's strategies, shares in these strategies) + * @return (staker's strategies, scaled shares in these strategies) */ function getDeposits( address staker ) external view returns (IStrategy[] memory, uint256[] memory) { uint256 strategiesLength = stakerStrategyList[staker].length; - uint256[] memory shares = new uint256[](strategiesLength); + uint256[] memory scaledShares = new uint256[](strategiesLength); for (uint256 i = 0; i < strategiesLength;) { - shares[i] = stakerStrategyShares[staker][stakerStrategyList[staker][i]]; + scaledShares[i] = stakerStrategyScaledShares[staker][stakerStrategyList[staker][i]]; unchecked { ++i; } } - return (stakerStrategyList[staker], shares); + return (stakerStrategyList[staker], scaledShares); + } + + /// @notice Returns the current shares of `user` in `strategy` + function stakerStrategyShares( + address user, + IStrategy strategy + ) public view returns (uint256 shares) { + uint256 scaledShares = stakerStrategyScaledShares[user][strategy]; + return delegation.getStakerShares(user, strategy, scaledShares); } /// @notice Simple getter function that returns `stakerStrategyList[staker].length`. diff --git a/src/contracts/core/StrategyManagerStorage.sol b/src/contracts/core/StrategyManagerStorage.sol index 1a0e5963d..d5747f5f3 100644 --- a/src/contracts/core/StrategyManagerStorage.sol +++ b/src/contracts/core/StrategyManagerStorage.sol @@ -6,6 +6,7 @@ import "../interfaces/IStrategy.sol"; import "../interfaces/IEigenPodManager.sol"; import "../interfaces/IDelegationManager.sol"; import "../interfaces/ISlasher.sol"; +import "../interfaces/IAVSDirectory.sol"; /** * @title Storage variables for the `StrategyManager` contract. @@ -27,6 +28,7 @@ abstract contract StrategyManagerStorage is IStrategyManager { IDelegationManager public immutable delegation; IEigenPodManager public immutable eigenPodManager; ISlasher public immutable slasher; + IAVSDirectory public immutable avsDirectory; /** * @notice Original EIP-712 Domain separator for this contract. @@ -43,9 +45,9 @@ abstract contract StrategyManagerStorage is IStrategyManager { * This variable was migrated to the DelegationManager instead. */ uint256 private __deprecated_withdrawalDelayBlocks; - /// @notice Mapping: staker => Strategy => number of shares which they currently hold - mapping(address => mapping(IStrategy => uint256)) public stakerStrategyShares; - /// @notice Mapping: staker => array of strategies in which they have nonzero shares + /// @notice Mapping: staker => Strategy => number of scaled shares which they currently hold + mapping(address => mapping(IStrategy => uint256)) public stakerStrategyScaledShares; + /// @notice Mapping: staker => array of strategies in which they have nonzero scaled shares mapping(address => IStrategy[]) public stakerStrategyList; /// @notice *Deprecated* mapping: hash of withdrawal inputs, aka 'withdrawalRoot' => whether the withdrawal is pending /// @dev This mapping is preserved to allow the migration of withdrawals to the DelegationManager contract. @@ -66,16 +68,22 @@ abstract contract StrategyManagerStorage is IStrategyManager { mapping(address => uint256) internal beaconChainETHSharesToDecrementOnWithdrawal; /** - * @notice Mapping: strategy => whether or not stakers are allowed to transfer strategy shares to another address + * @notice Mapping: strategy => whether or not stakers are allowed to transfer strategy scaled shares to another address * if true for a strategy, a user cannot depositIntoStrategyWithSignature into that strategy for another staker * and also when performing queueWithdrawals, a staker can only withdraw to themselves */ mapping(IStrategy => bool) public thirdPartyTransfersForbidden; - constructor(IDelegationManager _delegation, IEigenPodManager _eigenPodManager, ISlasher _slasher) { + constructor( + IDelegationManager _delegation, + IEigenPodManager _eigenPodManager, + ISlasher _slasher, + IAVSDirectory _avsDirectory + ) { delegation = _delegation; eigenPodManager = _eigenPodManager; slasher = _slasher; + avsDirectory = _avsDirectory; } /** diff --git a/src/contracts/interfaces/IAVSDirectory.sol b/src/contracts/interfaces/IAVSDirectory.sol index 4961e2111..71fbc1771 100644 --- a/src/contracts/interfaces/IAVSDirectory.sol +++ b/src/contracts/interfaces/IAVSDirectory.sol @@ -10,7 +10,6 @@ interface IAVSDirectory is ISignatureUtils { enum OperatorAVSRegistrationStatus { UNREGISTERED, // Operator not registered to AVS REGISTERED // Operator registered to AVS - } /** @@ -55,16 +54,6 @@ interface IAVSDirectory is ISignatureUtils { uint32 completableTimestamp; } - /** - * @notice struct used to store the allocation delay for an operator - * @param isSet whether the allocation delay is set. Can only be configured one time for each operator - * @param allocationDelay the delay in seconds for the operator's allocations - */ - struct AllocationDelayDetails { - bool isSet; - uint32 allocationDelay; - } - /// @notice Emitted when an operator set is created by an AVS. event OperatorSetCreated(OperatorSet operatorSet); @@ -279,12 +268,6 @@ interface IAVSDirectory is ISignatureUtils { uint16 bipsToSlash ) external; - /** - * @notice Called by operators to set their allocation delay. Can only be set one time. - * @param delay the allocation delay in seconds - */ - function initializeAllocationDelay(uint32 delay) external; - /** * @notice Called by an AVS to emit an `AVSMetadataURIUpdated` event indicating the information has updated. * @@ -309,9 +292,6 @@ interface IAVSDirectory is ISignatureUtils { * */ - /// @dev The initial total magnitude for an operator - function INITIAL_TOTAL_MAGNITUDE() external view returns (uint64); - /** * @notice Get the allocatable magnitude for an operator and strategy based on number of pending deallocations * that could be completed at the same time. This is the sum of freeMagnitude and the sum of all pending completable deallocations. @@ -325,14 +305,8 @@ interface IAVSDirectory is ISignatureUtils { uint16 numToComplete ) external view returns (uint64); - /** - * @notice Get the allocation delay (in seconds) for an operator. Can only be configured one-time - * from calling initializeAllocationDelay. - * @param operator the operator to get the allocation delay for - * @return isSet whether the allocation delay is set and the operator can call `modifyAllocations` - * @return allocationDelay the allocation delay in seconds - */ - function getAllocationDelay(address operator) external view returns (bool, uint32); + /// @dev Delay before deallocations take effect and are added back into freeMagnitude + function DEALLOCATION_DELAY() external view returns (uint32); /** * @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days @@ -360,6 +334,18 @@ interface IAVSDirectory is ISignatureUtils { bool linear ) external view returns (uint24[] memory); + /// @notice Returns the total magnitude of an operator for a given set of strategies + /// TODO: finish natspec + function getTotalMagnitudes(address operator, IStrategy[] calldata strategies) external view returns (uint64[] memory); + + /// @notice Returns the total magnitude of an operator for a given set of strategies at a given timestamp + /// TODO: finish natspec + function getTotalMagnitudesAtTimestamp( + address operator, + IStrategy[] calldata strategies, + uint32 timestamp + ) external view returns (uint64[] memory); + function operatorSaltIsSpent(address operator, bytes32 salt) external view returns (bool); function isMember(address operator, OperatorSet memory operatorSet) external view returns (bool); diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index e7d9f44d9..8e08d4211 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -81,6 +81,16 @@ interface IDelegationManager is ISignatureUtils { uint32 stakerOptOutWindowBlocks; } + /** + * @notice struct used to store the allocation delay for an operator + * @param isSet whether the allocation delay is set. Can only be configured one time for each operator + * @param allocationDelay the delay in seconds for the operator's allocations + */ + struct AllocationDelayDetails { + bool isSet; + uint32 allocationDelay; + } + /** * @notice Abstract struct used in calculating an EIP712 signature for a staker to approve that they (the staker themselves) delegate to a specific operator. * @dev Used in computing the `STAKER_DELEGATION_TYPEHASH` and as a reference in the computation of the stakerDigestHash in the `delegateToBySignature` function. @@ -125,18 +135,21 @@ interface IDelegationManager is ISignatureUtils { address withdrawer; // Nonce used to guarantee that otherwise identical withdrawals have unique hashes uint256 nonce; - // Block number when the Withdrawal was created - uint32 startBlock; + // Timestamp when the Withdrawal was created. + // NOTE this used to be `startBlock` but changedto timestamps in the Slashing release. This has no effect + // on the hash of this struct but we do need to know when to handle blocknumbers vs timestamps depending on + // if the withdrawal was created before or after the Slashing release. + uint32 startTimestamp; // Array of strategies that the Withdrawal contains IStrategy[] strategies; - // Array containing the amount of shares in each Strategy in the `strategies` array - uint256[] shares; + // Array containing the amount of scaled shares for withdrawal in each Strategy in the `strategies` array + uint256[] scaledShares; } struct QueuedWithdrawalParams { // Array of strategies that the QueuedWithdrawal contains IStrategy[] strategies; - // Array containing the amount of shares in each Strategy in the `strategies` array + // Array containing the amount of shares for withdrawal in each Strategy in the `strategies` array uint256[] shares; // The address of the withdrawer address withdrawer; @@ -185,9 +198,13 @@ interface IDelegationManager is ISignatureUtils { /// @notice Emitted when the `strategyWithdrawalDelayBlocks` variable is modified from `previousValue` to `newValue`. event StrategyWithdrawalDelayBlocksSet(IStrategy strategy, uint256 previousValue, uint256 newValue); + /// @notice Emitted when the `strategyWithdrawalDelay` variable is modified from `previousValue` to `newValue`. + event StrategyWithdrawalDelaySet(IStrategy strategy, uint256 previousValue, uint256 newValue); + /** * @notice Registers the caller as an operator in EigenLayer. * @param registeringOperatorDetails is the `OperatorDetails` for the operator. + * @param allocationDelay is a one-time configurable delay for the operator when performing slashable magnitude allocations. * @param metadataURI is a URI for the operator's metadata, i.e. a link providing more details on the operator. * * @dev Once an operator is registered, they cannot 'deregister' as an operator, and they will forever be considered "delegated to themself". @@ -195,9 +212,17 @@ interface IDelegationManager is ISignatureUtils { */ function registerAsOperator( OperatorDetails calldata registeringOperatorDetails, + uint32 allocationDelay, string calldata metadataURI ) external; + /** + * @notice Called by operators to set their allocation delay one time. Cannot be updated + * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. + * @param delay the allocation delay in seconds + */ + function initializeAllocationDelay(uint32 delay) external; + /** * @notice Updates an operator's stored `OperatorDetails`. * @param newOperatorDetails is the updated `OperatorDetails` for the operator, to replace their current OperatorDetails`. @@ -290,12 +315,9 @@ interface IDelegationManager is ISignatureUtils { * @notice Used to complete the specified `withdrawal`. The caller must match `withdrawal.withdrawer` * @param withdrawal The Withdrawal to complete. * @param tokens Array in which the i-th entry specifies the `token` input to the 'withdraw' function of the i-th Strategy in the `withdrawal.strategies` array. - * This input can be provided with zero length if `receiveAsTokens` is set to 'false' (since in that case, this input will be unused) - * @param middlewareTimesIndex is the index in the operator that the staker who triggered the withdrawal was delegated to's middleware times array * @param receiveAsTokens If true, the shares specified in the withdrawal will be withdrawn from the specified strategies themselves * and sent to the caller, through calls to `withdrawal.strategies[i].withdraw`. If false, then the shares in the specified strategies * will simply be transferred to the caller directly. - * @dev middlewareTimesIndex should be calculated off chain before calling this function by finding the first index that satisfies `slasher.canWithdraw` * @dev beaconChainETHStrategy shares are non-transferrable, so if `receiveAsTokens = false` and `withdrawal.withdrawer != withdrawal.staker`, note that * any beaconChainETHStrategy shares in the `withdrawal` will be _returned to the staker_, rather than transferred to the withdrawer, unlike shares in * any other strategies, which will be transferred to the withdrawer. @@ -303,7 +325,6 @@ interface IDelegationManager is ISignatureUtils { function completeQueuedWithdrawal( Withdrawal calldata withdrawal, IERC20[] calldata tokens, - uint256 middlewareTimesIndex, bool receiveAsTokens ) external; @@ -312,38 +333,40 @@ interface IDelegationManager is ISignatureUtils { * Used to complete the specified `withdrawals`. The function caller must match `withdrawals[...].withdrawer` * @param withdrawals The Withdrawals to complete. * @param tokens Array of tokens for each Withdrawal. See `completeQueuedWithdrawal` for the usage of a single array. - * @param middlewareTimesIndexes One index to reference per Withdrawal. See `completeQueuedWithdrawal` for the usage of a single index. * @param receiveAsTokens Whether or not to complete each withdrawal as tokens. See `completeQueuedWithdrawal` for the usage of a single boolean. * @dev See `completeQueuedWithdrawal` for relevant dev tags */ function completeQueuedWithdrawals( Withdrawal[] calldata withdrawals, IERC20[][] calldata tokens, - uint256[] calldata middlewareTimesIndexes, bool[] calldata receiveAsTokens ) external; /** * @notice Increases a staker's delegated share balance in a strategy. - * @param staker The address to increase the delegated shares for their operator. - * @param strategy The strategy in which to increase the delegated shares. - * @param shares The number of shares to increase. + * @param staker The address to increase the delegated scaled shares for their operator. + * @param strategy The strategy in which to increase the delegated scaled shares. + * @param scaledShares The number of scaled shares to increase. * - * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated shares in `strategy` by `shares`. Otherwise does nothing. + * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated shares in `strategy` by `scaledShares`. Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ - function increaseDelegatedShares(address staker, IStrategy strategy, uint256 shares) external; - + function increaseDelegatedScaledShares( + address staker, + IStrategy strategy, + uint256 scaledShares + ) external; + /** * @notice Decreases a staker's delegated share balance in a strategy. - * @param staker The address to increase the delegated shares for their operator. - * @param strategy The strategy in which to decrease the delegated shares. - * @param shares The number of shares to decrease. + * @param staker The address to increase the delegated scaled shares for their operator. + * @param strategy The strategy in which to decrease the delegated scaled shares. + * @param scaledShares The number of scaled shares to decrease. * - * @dev *If the staker is actively delegated*, then decreases the `staker`'s delegated shares in `strategy` by `shares`. Otherwise does nothing. + * @dev *If the staker is actively delegated*, then decreases the `staker`'s delegated scaled shares in `strategy` by `scaledShares`. Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ - function decreaseDelegatedShares(address staker, IStrategy strategy, uint256 shares) external; + function decreaseDelegatedScaledShares(address staker, IStrategy strategy, uint256 scaledShares) external; /** * @notice returns the address of the operator that `staker` is delegated to. @@ -361,6 +384,12 @@ interface IDelegationManager is ISignatureUtils { address operator ) external view returns (OperatorDetails memory); + /** + * @notice Returns the AllocationDelayDetails struct associated with an `operator` + * @dev If the operator has not set an allocation delay, then the `isSet` field will be `false`. + */ + function operatorAllocationDelay(address operator) external view returns (AllocationDelayDetails memory); + /** * @notice Returns the delegationApprover account for an operator */ @@ -383,6 +412,36 @@ interface IDelegationManager is ISignatureUtils { IStrategy[] memory strategies ) external view returns (uint256[] memory); + /** + * @notice Given array of strategies, returns array of scaled shares for the operator + */ + function getOperatorScaledShares( + address operator, + IStrategy[] memory strategies + ) external view returns (uint256[] memory); + + /** + * @notice Given a staker and shares amounts of deposits, return the scaled shares calculated if + * the staker were to deposit. Depends on who the operator the staker is delegated to. + */ + function getStakerScaledShares( + address staker, + IStrategy strategy, + uint256 shares + ) external view returns (uint256 scaledShares); + + /** + * @notice Given a staker and scaled shares amounts of deposits, return the shares calculated if + * the staker were to withdraw. This value depends on which operator the staker is delegated to. + * The shares amount returned is the actual amount of Strategy shares the staker would receive (subject + * to each strategy's underlying shares to token ratio). + */ + function getStakerShares( + address staker, + IStrategy strategy, + uint256 scaledShares + ) external view returns (uint256 shares); + /** * @notice Given a list of strategies, return the minimum number of blocks that must pass to withdraw * from all the inputted strategies. Return value is >= minWithdrawalDelayBlocks as this is the global min withdrawal delay. @@ -393,13 +452,15 @@ interface IDelegationManager is ISignatureUtils { ) external view returns (uint256); /** - * @notice returns the total number of shares in `strategy` that are delegated to `operator`. - * @notice Mapping: operator => strategy => total number of shares in the strategy delegated to the operator. + * @notice returns the total number of scaled shares (i.e. shares scaled down by a factor of the `operator`'s + * totalMagnitude) in `strategy` that are delegated to `operator`. + * @notice Mapping: operator => strategy => total number of scaled shares in the strategy delegated to the operator. * @dev By design, the following invariant should hold for each Strategy: - * (operator's shares in delegation manager) = sum (shares above zero of all stakers delegated to operator) - * = sum (delegateable shares of all stakers delegated to the operator) + * (operator's scaled shares in delegation manager) = sum (scaled shares above zero of all stakers delegated to operator) + * = sum (delegateable scaled shares of all stakers delegated to the operator) + * @dev FKA `operatorShares` */ - function operatorShares(address operator, IStrategy strategy) external view returns (uint256); + function operatorScaledShares(address operator, IStrategy strategy) external view returns (uint256); /** * @notice Returns 'true' if `staker` *is* actively delegated, and 'false' otherwise. diff --git a/src/contracts/interfaces/IEigenPodManager.sol b/src/contracts/interfaces/IEigenPodManager.sol index c4fb2910e..b28cc0da9 100644 --- a/src/contracts/interfaces/IEigenPodManager.sol +++ b/src/contracts/interfaces/IEigenPodManager.sol @@ -116,6 +116,9 @@ interface IEigenPodManager is IPausable { address podOwner ) external view returns (int256); + /// TODO: natspec + function podOwnerScaledShares(address podOwner) external view returns (int256); + /// @notice returns canonical, virtual beaconChainETH strategy function beaconChainETHStrategy() external view returns (IStrategy); @@ -127,7 +130,7 @@ interface IEigenPodManager is IPausable { * shares from the operator to whom the staker is delegated. * @dev Reverts if `shares` is not a whole Gwei amount */ - function removeShares(address podOwner, uint256 shares) external; + function removeScaledShares(address podOwner, uint256 scaledShares) external; /** * @notice Increases the `podOwner`'s shares by `shares`, paying off deficit if possible. @@ -136,7 +139,7 @@ interface IEigenPodManager is IPausable { * in the event that the podOwner has an existing shares deficit (i.e. `podOwnerShares[podOwner]` starts below zero) * @dev Reverts if `shares` is not a whole Gwei amount */ - function addShares(address podOwner, uint256 shares) external returns (uint256); + function addScaledShares(address podOwner, uint256 scaledShares) external returns (uint256); /** * @notice Used by the DelegationManager to complete a withdrawal, sending tokens to some destination address diff --git a/src/contracts/interfaces/IStrategyManager.sol b/src/contracts/interfaces/IStrategyManager.sol index 3c1d467c3..377f32a1b 100644 --- a/src/contracts/interfaces/IStrategyManager.sol +++ b/src/contracts/interfaces/IStrategyManager.sol @@ -62,14 +62,14 @@ interface IStrategyManager { * @param strategy is the specified strategy where deposit is to be made, * @param token is the denomination in which the deposit is to be made, * @param amount is the amount of token to be deposited in the strategy by the staker - * @return shares The amount of new shares in the `strategy` created as part of the action. + * @return scaledShares The amount of new scaled shares in the `strategy` created as part of the action. * @dev The `msg.sender` must have previously approved this contract to transfer at least `amount` of `token` on their behalf. * @dev Cannot be called by an address that is 'frozen' (this function will revert if the `msg.sender` is frozen). * * WARNING: Depositing tokens that allow reentrancy (eg. ERC-777) into a strategy is not recommended. This can lead to attack vectors * where the token balance and corresponding strategy shares are not in sync upon reentrancy. */ - function depositIntoStrategy(IStrategy strategy, IERC20 token, uint256 amount) external returns (uint256 shares); + function depositIntoStrategy(IStrategy strategy, IERC20 token, uint256 amount) external returns (uint256 scaledShares); /** * @notice Used for depositing an asset into the specified strategy with the resultant shares credited to `staker`, @@ -83,7 +83,7 @@ interface IStrategyManager { * @param expiry the timestamp at which the signature expires * @param signature is a valid signature from the `staker`. either an ECDSA signature if the `staker` is an EOA, or data to forward * following EIP-1271 if the `staker` is a contract - * @return shares The amount of new shares in the `strategy` created as part of the action. + * @return scaledShares The amount of new scaled shares in the `strategy` created as part of the action. * @dev The `msg.sender` must have previously approved this contract to transfer at least `amount` of `token` on their behalf. * @dev A signature is required for this function to eliminate the possibility of griefing attacks, specifically those * targeting stakers who may be attempting to undelegate. @@ -99,19 +99,28 @@ interface IStrategyManager { address staker, uint256 expiry, bytes memory signature - ) external returns (uint256 shares); + ) external returns (uint256 scaledShares); /// @notice Used by the DelegationManager to remove a Staker's shares from a particular strategy when entering the withdrawal queue - function removeShares(address staker, IStrategy strategy, uint256 shares) external; + function removeScaledShares(address staker, IStrategy strategy, uint256 shares) external; - /// @notice Used by the DelegationManager to award a Staker some shares that have passed through the withdrawal queue - function addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external; + /// @notice Used by the DelegationManager to award a Staker some scaled shares that have passed through the withdrawal queue + function addScaledShares(address staker, IERC20 token, IStrategy strategy, uint256 scaledShares) external; - /// @notice Used by the DelegationManager to convert withdrawn shares to tokens and send them to a recipient + /// @notice Used by the DelegationManager to convert withdrawn descaled shares to tokens and send them to a recipient function withdrawSharesAsTokens(address recipient, IStrategy strategy, uint256 shares, IERC20 token) external; + /// @notice Returns the current scaled shares of `user` in `strategy` + function stakerStrategyScaledShares( + address user, + IStrategy strategy + ) external view returns (uint256 scaledShares); + /// @notice Returns the current shares of `user` in `strategy` - function stakerStrategyShares(address user, IStrategy strategy) external view returns (uint256 shares); + function stakerStrategyShares( + address user, + IStrategy strategy + ) external view returns (uint256 shares); /** * @notice Get all details on the staker's deposits and corresponding shares diff --git a/src/contracts/libraries/ShareScalingLib.sol b/src/contracts/libraries/ShareScalingLib.sol new file mode 100644 index 000000000..e53440721 --- /dev/null +++ b/src/contracts/libraries/ShareScalingLib.sol @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "../interfaces/IAVSDirectory.sol"; + +library ShareScalingLib { + /// @dev The initial total magnitude for an operator + uint64 public constant INITIAL_TOTAL_MAGNITUDE = 1e18; + + /** + * @notice Returns the scaled shares of for an operator for a particular set of strategies and shares delegated to an operator + * @param avsDirectory The AVS directory + * @param operator The operator to scale shares for + * @param strategies The strategies of which shares are + * @param shares The shares to scale + */ + function scaleShares( + IAVSDirectory avsDirectory, + address operator, + IStrategy[] memory strategies, + uint256[] memory shares + ) internal view returns (uint256[] memory) { + uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); + uint256[] memory scaledShares = new uint256[](shares.length); + for (uint256 i = 0; i < shares.length; i++) { + scaledShares[i] = _scaleShares(shares[i], totalMagnitudes[i]); + } + return scaledShares; + } + + /** + * @notice Returns the shares of for an operator for a particular set of strategies and scaled shares delegated to an operator + * @param avsDirectory The AVS directory + * @param operator The operator to scale shares for + * @param strategies The strategies of which scaled shares are + * @param scaledShares The scaled shares to descale + */ + function descaleShares( + IAVSDirectory avsDirectory, + address operator, + IStrategy[] memory strategies, + uint256[] memory scaledShares + ) internal view returns (uint256[] memory) { + uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); + uint256[] memory descaledShares = new uint256[](scaledShares.length); + for (uint256 i = 0; i < scaledShares.length; i++) { + descaledShares[i] = _descaleShares(scaledShares[i], totalMagnitudes[i]); + } + return descaledShares; + } + + /** + * @notice Returns the shares of for an operator for a particular set of strategies and scaled shares delegated to an operator + * @param avsDirectory The AVS directory + * @param operator The operator to scale shares for + * @param strategies The strategies of which scaled shares are + * @param scaledShares The scaled shares to descale + */ + function descaleSharesAtTimestamp( + IAVSDirectory avsDirectory, + address operator, + IStrategy[] memory strategies, + uint256[] memory scaledShares, + uint32 timestamp + ) internal view returns (uint256[] memory) { + uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudesAtTimestamp(operator, strategies, timestamp); + uint256[] memory descaledShares = new uint256[](scaledShares.length); + for (uint256 i = 0; i < scaledShares.length; i++) { + descaledShares[i] = _descaleShares(scaledShares[i], totalMagnitudes[i]); + } + return descaledShares; + } + + /** + * @notice Returns the scaled shares of for an operator for a particular strategy and shares delegated to an operator + * @param avsDirectory The AVS directory + * @param operator The operator to scale shares for + * @param strategy The strategy of which shares are + * @param shares The shares to scale + */ + function scaleShares( + IAVSDirectory avsDirectory, + address operator, + IStrategy strategy, + uint256 shares + ) internal view returns (uint256) { + IStrategy[] memory strategies = new IStrategy[](1); + strategies[0] = strategy; + uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); + return _scaleShares(shares, totalMagnitudes[0]); + } + + /** + * @notice Returns the shares of for an operator for a particular strategy and scaled shares delegated to an operator + * @param avsDirectory The AVS directory + * @param operator The operator to scale shares for + * @param strategy The strategy of which scaled shares are + * @param scaledShares The scaled shares to descale + */ + function descaleShares( + IAVSDirectory avsDirectory, + address operator, + IStrategy strategy, + uint256 scaledShares + ) internal view returns (uint256) { + IStrategy[] memory strategies = new IStrategy[](1); + strategies[0] = strategy; + uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); + return _descaleShares(scaledShares, totalMagnitudes[0]); + } + + /// @notice helper pure to return scaledShares given shares and totalMagnitude + function _scaleShares(uint256 shares, uint64 totalMagnitude) internal pure returns (uint256) { + return shares * INITIAL_TOTAL_MAGNITUDE / totalMagnitude; + } + + /// @notice helper pure to return shares(descaledShares) given scaledShares and totalMagnitude + function _descaleShares(uint256 scaledShares, uint64 totalMagnitude) internal pure returns (uint256) { + return scaledShares * totalMagnitude / INITIAL_TOTAL_MAGNITUDE; + } +} diff --git a/src/contracts/pods/EigenPodManager.sol b/src/contracts/pods/EigenPodManager.sol index 31e1ad434..9d7eb3fb7 100644 --- a/src/contracts/pods/EigenPodManager.sol +++ b/src/contracts/pods/EigenPodManager.sol @@ -104,52 +104,68 @@ contract EigenPodManager is address podOwner, int256 sharesDelta ) external onlyEigenPod(podOwner) nonReentrant { - require(podOwner != address(0), InputAddressZero()); - require(sharesDelta % int256(GWEI_TO_WEI) == 0, SharesNotMultipleOfGwei()); - int256 currentPodOwnerShares = podOwnerShares[podOwner]; - int256 updatedPodOwnerShares = currentPodOwnerShares + sharesDelta; - podOwnerShares[podOwner] = updatedPodOwnerShares; + require( + podOwner != address(0), "EigenPodManager.recordBeaconChainETHBalanceUpdate: podOwner cannot be zero address" + ); + require( + sharesDelta % int256(GWEI_TO_WEI) == 0, + "EigenPodManager.recordBeaconChainETHBalanceUpdate: sharesDelta must be a whole Gwei amount" + ); + int256 currentPodOwnerScaledShares = podOwnerScaledShares[podOwner]; + int256 updatedPodOwnerScaledShares; + // scale the sharesDelta and add to the podOwnerShares + if (sharesDelta < 0) { + updatedPodOwnerScaledShares = currentPodOwnerScaledShares + - int256(delegationManager.getStakerScaledShares(podOwner, beaconChainETHStrategy, uint256(-sharesDelta))); + } else { + updatedPodOwnerScaledShares = currentPodOwnerScaledShares + + int256(delegationManager.getStakerScaledShares(podOwner, beaconChainETHStrategy, uint256(sharesDelta))); + } + podOwnerScaledShares[podOwner] = updatedPodOwnerScaledShares; // inform the DelegationManager of the change in delegateable shares - int256 changeInDelegatableShares = _calculateChangeInDelegatableShares({ - sharesBefore: currentPodOwnerShares, - sharesAfter: updatedPodOwnerShares + int256 changeInDelegatableScaledShares = _calculateChangeInDelegatableScaledShares({ + scaledSharesBefore: currentPodOwnerScaledShares, + scaledSharesAfter: updatedPodOwnerScaledShares }); // skip making a call to the DelegationManager if there is no change in delegateable shares - if (changeInDelegatableShares != 0) { - if (changeInDelegatableShares < 0) { - delegationManager.decreaseDelegatedShares({ + if (changeInDelegatableScaledShares != 0) { + if (changeInDelegatableScaledShares < 0) { + delegationManager.decreaseDelegatedScaledShares({ staker: podOwner, strategy: beaconChainETHStrategy, - shares: uint256(-changeInDelegatableShares) + scaledShares: uint256(-changeInDelegatableScaledShares) }); } else { - delegationManager.increaseDelegatedShares({ + delegationManager.increaseDelegatedScaledShares({ staker: podOwner, strategy: beaconChainETHStrategy, - shares: uint256(changeInDelegatableShares) + scaledShares: uint256(changeInDelegatableScaledShares) }); } } emit PodSharesUpdated(podOwner, sharesDelta); - emit NewTotalShares(podOwner, updatedPodOwnerShares); + emit NewTotalShares(podOwner, updatedPodOwnerScaledShares); } /** * @notice Used by the DelegationManager to remove a pod owner's shares while they're in the withdrawal queue. * Simply decreases the `podOwner`'s shares by `shares`, down to a minimum of zero. - * @dev This function reverts if it would result in `podOwnerShares[podOwner]` being less than zero, i.e. it is forbidden for this function to + * @dev This function reverts if it would result in `podOwnerScaledShares[podOwner]` being less than zero, i.e. it is forbidden for this function to * result in the `podOwner` incurring a "share deficit". This behavior prevents a Staker from queuing a withdrawal which improperly removes excessive * shares from the operator to whom the staker is delegated. * @dev Reverts if `shares` is not a whole Gwei amount * @dev The delegation manager validates that the podOwner is not address(0) */ - function removeShares(address podOwner, uint256 shares) external onlyDelegationManager { - require(int256(shares) >= 0, SharesNegative()); - require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); - int256 updatedPodOwnerShares = podOwnerShares[podOwner] - int256(shares); - require(updatedPodOwnerShares >= 0, SharesNegative()); - podOwnerShares[podOwner] = updatedPodOwnerShares; + function removeScaledShares(address podOwner, uint256 scaledShares) external onlyDelegationManager { + require(int256(scaledShares) >= 0, "EigenPodManager.removeShares: shares cannot be negative"); + require(scaledShares % GWEI_TO_WEI == 0, "EigenPodManager.removeShares: shares must be a whole Gwei amount"); + int256 updatedPodOwnerShares = podOwnerScaledShares[podOwner] - int256(scaledShares); + require( + updatedPodOwnerShares >= 0, + "EigenPodManager.removeShares: cannot result in pod owner having negative shares" + ); + podOwnerScaledShares[podOwner] = updatedPodOwnerShares; emit NewTotalShares(podOwner, updatedPodOwnerShares); } @@ -157,25 +173,25 @@ contract EigenPodManager is /** * @notice Increases the `podOwner`'s shares by `shares`, paying off deficit if possible. * Used by the DelegationManager to award a pod owner shares on exiting the withdrawal queue - * @dev Returns the number of shares added to `podOwnerShares[podOwner]` above zero, which will be less than the `shares` input - * in the event that the podOwner has an existing shares deficit (i.e. `podOwnerShares[podOwner]` starts below zero) + * @dev Returns the number of shares added to `podOwnerScaledShares[podOwner]` above zero, which will be less than the `shares` input + * in the event that the podOwner has an existing shares deficit (i.e. `podOwnerScaledShares[podOwner]` starts below zero) * @dev Reverts if `shares` is not a whole Gwei amount */ - function addShares(address podOwner, uint256 shares) external onlyDelegationManager returns (uint256) { - require(podOwner != address(0), InputAddressZero()); - require(int256(shares) >= 0, SharesNegative()); - require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); - int256 currentPodOwnerShares = podOwnerShares[podOwner]; - int256 updatedPodOwnerShares = currentPodOwnerShares + int256(shares); - podOwnerShares[podOwner] = updatedPodOwnerShares; + function addScaledShares(address podOwner, uint256 scaledShares) external onlyDelegationManager returns (uint256) { + require(podOwner != address(0), "EigenPodManager.addShares: podOwner cannot be zero address"); + require(int256(scaledShares) >= 0, "EigenPodManager.addShares: shares cannot be negative"); + require(scaledShares % GWEI_TO_WEI == 0, "EigenPodManager.addShares: shares must be a whole Gwei amount"); + int256 currentPodOwnerScaledShares = podOwnerScaledShares[podOwner]; + int256 updatedPodOwnerScaledShares = currentPodOwnerScaledShares + int256(scaledShares); + podOwnerScaledShares[podOwner] = updatedPodOwnerScaledShares; - emit PodSharesUpdated(podOwner, int256(shares)); - emit NewTotalShares(podOwner, updatedPodOwnerShares); + emit PodSharesUpdated(podOwner, int256(scaledShares)); + emit NewTotalShares(podOwner, updatedPodOwnerScaledShares); return uint256( - _calculateChangeInDelegatableShares({ - sharesBefore: currentPodOwnerShares, - sharesAfter: updatedPodOwnerShares + _calculateChangeInDelegatableScaledShares({ + scaledSharesBefore: currentPodOwnerScaledShares, + scaledSharesAfter: updatedPodOwnerScaledShares }) ); } @@ -192,26 +208,26 @@ contract EigenPodManager is address destination, uint256 shares ) external onlyDelegationManager { - require(podOwner != address(0), InputAddressZero()); - require(destination != address(0), InputAddressZero()); - require(int256(shares) >= 0, SharesNegative()); - require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); - int256 currentPodOwnerShares = podOwnerShares[podOwner]; + require(podOwner != address(0), "EigenPodManager.withdrawSharesAsTokens: podOwner cannot be zero address"); + require(destination != address(0), "EigenPodManager.withdrawSharesAsTokens: destination cannot be zero address"); + require(int256(shares) >= 0, "EigenPodManager.withdrawSharesAsTokens: shares cannot be negative"); + require(shares % GWEI_TO_WEI == 0, "EigenPodManager.withdrawSharesAsTokens: shares must be a whole Gwei amount"); + int256 currentPodOwnerScaledShares = podOwnerScaledShares[podOwner]; // if there is an existing shares deficit, prioritize decreasing the deficit first - if (currentPodOwnerShares < 0) { - uint256 currentShareDeficit = uint256(-currentPodOwnerShares); + if (currentPodOwnerScaledShares < 0) { + uint256 currentShareDeficit = uint256(-currentPodOwnerScaledShares); if (shares > currentShareDeficit) { // get rid of the whole deficit if possible, and pass any remaining shares onto destination - podOwnerShares[podOwner] = 0; + podOwnerScaledShares[podOwner] = 0; shares -= currentShareDeficit; emit PodSharesUpdated(podOwner, int256(currentShareDeficit)); emit NewTotalShares(podOwner, 0); } else { // otherwise get rid of as much deficit as possible, and return early, since there is nothing left over to forward on - int256 updatedPodOwnerShares = podOwnerShares[podOwner] + int256(shares); - podOwnerShares[podOwner] = updatedPodOwnerShares; + int256 updatedPodOwnerShares = podOwnerScaledShares[podOwner] + int256(shares); + podOwnerScaledShares[podOwner] = updatedPodOwnerShares; emit PodSharesUpdated(podOwner, int256(shares)); emit NewTotalShares(podOwner, updatedPodOwnerShares); return; @@ -243,34 +259,53 @@ contract EigenPodManager is /** * @notice Calculates the change in a pod owner's delegateable shares as a result of their beacon chain ETH shares changing - * from `sharesBefore` to `sharesAfter`. The key concept here is that negative/"deficit" shares are not delegateable. + * from `scaledSharesBefore` to `scaledSharesAfter`. The key concept here is that negative/"deficit" scaledShares are not delegateable. */ - function _calculateChangeInDelegatableShares( - int256 sharesBefore, - int256 sharesAfter + function _calculateChangeInDelegatableScaledShares( + int256 scaledSharesBefore, + int256 scaledSharesAfter ) internal pure returns (int256) { - if (sharesBefore <= 0) { - if (sharesAfter <= 0) { + if (scaledSharesBefore <= 0) { + if (scaledSharesAfter <= 0) { // if the shares started negative and stayed negative, then there cannot have been an increase in delegateable shares return 0; // if the shares started negative and became positive, then the increase in delegateable shares is the ending share amount } else { // if the shares started negative and became positive, then the increase in delegateable shares is the ending share amount - return sharesAfter; + return scaledSharesAfter; } } else { - if (sharesAfter <= 0) { + if (scaledSharesAfter <= 0) { // if the shares started positive and became negative, then the decrease in delegateable shares is the starting share amount - return (-sharesBefore); + return (-scaledSharesBefore); } else { // if the shares started positive and stayed positive, then the change in delegateable shares // is the difference between starting and ending amounts - return (sharesAfter - sharesBefore); + return (scaledSharesAfter - scaledSharesBefore); } } } // VIEW FUNCTIONS + /// @notice Return the real number of ETH shares that the `podOwner` has + function podOwnerShares(address podOwner) public view returns (int256) { + int256 podOwnerShares; + if (podOwnerScaledShares[podOwner] < 0) { + podOwnerShares = -int256( + delegationManager.getStakerShares( + podOwner, beaconChainETHStrategy, uint256(-podOwnerScaledShares[podOwner]) + ) + ); + } else { + podOwnerShares = int256( + delegationManager.getStakerShares( + podOwner, beaconChainETHStrategy, uint256(podOwnerScaledShares[podOwner]) + ) + ); + } + return podOwnerShares; + } + /// @notice Returns the address of the `podOwner`'s EigenPod (whether it is deployed yet or not). function getPod( address podOwner diff --git a/src/contracts/pods/EigenPodManagerStorage.sol b/src/contracts/pods/EigenPodManagerStorage.sol index 76b140846..7dd04ab4d 100644 --- a/src/contracts/pods/EigenPodManagerStorage.sol +++ b/src/contracts/pods/EigenPodManagerStorage.sol @@ -68,14 +68,17 @@ abstract contract EigenPodManagerStorage is IEigenPodManager { // BEGIN STORAGE VARIABLES ADDED AFTER MAINNET DEPLOYMENT -- DO NOT SUGGEST REORDERING TO CONVENTIONAL ORDER /** - * @notice Mapping from Pod owner owner to the number of shares they have in the virtual beacon chain ETH strategy. + * @notice Mapping from Pod owner owner to the number of scaled shares they have in the virtual beacon chain ETH strategy. + * NOTE: This mapping was previously named `podOwnerShares` but will now store scaled shares based on the currently delegated operator + * for the podOwner to account for Slashing in EigenLayer. There is a backwards compatible view function `podOwnerShares` that will convert + * scaled shares to its actual ETH shares. * @dev The share amount can become negative. This is necessary to accommodate the fact that a pod owner's virtual beacon chain ETH shares can * decrease between the pod owner queuing and completing a withdrawal. * When the pod owner's shares would otherwise increase, this "deficit" is decreased first _instead_. * Likewise, when a withdrawal is completed, this "deficit" is decreased and the withdrawal amount is decreased; We can think of this * as the withdrawal "paying off the deficit". */ - mapping(address => int256) public podOwnerShares; + mapping(address => int256) public podOwnerScaledShares; uint64 internal __deprecated_denebForkTimestamp; diff --git a/src/contracts/strategies/StrategyBase.sol b/src/contracts/strategies/StrategyBase.sol index c907daa7a..314c6e1f8 100644 --- a/src/contracts/strategies/StrategyBase.sol +++ b/src/contracts/strategies/StrategyBase.sol @@ -301,10 +301,8 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * @notice convenience function for fetching the current total shares of `user` in this strategy, by * querying the `strategyManager` contract */ - function shares( - address user - ) public view virtual returns (uint256) { - return strategyManager.stakerStrategyShares(user, IStrategy(address(this))); + function shares(address user) public view virtual returns (uint256) { + return strategyManager.stakerStrategyScaledShares(user, IStrategy(address(this))); } /// @notice Internal function used to fetch this contract's current balance of `underlyingToken`. diff --git a/src/test/Delegation.t.sol b/src/test/Delegation.t.sol index 28b031ae1..3628d281c 100644 --- a/src/test/Delegation.t.sol +++ b/src/test/Delegation.t.sol @@ -1,501 +1,501 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; -import "src/contracts/interfaces/ISignatureUtils.sol"; - -import "../test/EigenLayerTestHelper.t.sol"; - -contract DelegationTests is EigenLayerTestHelper { - uint256 public PRIVATE_KEY = 420; - - uint32 serveUntil = 100; - - address public registryCoordinator = address(uint160(uint256(keccak256("registryCoordinator")))); - uint8 defaultQuorumNumber = 0; - bytes32 defaultOperatorId = bytes32(uint256(0)); - - modifier fuzzedAmounts(uint256 ethAmount, uint256 eigenAmount) { - cheats.assume(ethAmount >= 0 && ethAmount <= 1e18); - cheats.assume(eigenAmount >= 0 && eigenAmount <= 1e18); - _; - } - - function setUp() public virtual override { - EigenLayerDeployer.setUp(); - } - - /// @notice testing if an operator can register to themselves. - function testSelfOperatorRegister() public { - _testRegisterAdditionalOperator(0); - } - - /// @notice testing if an operator can delegate to themselves. - /// @param sender is the address of the operator. - function testSelfOperatorDelegate(address sender) public { - cheats.assume(sender != address(0)); - cheats.assume(sender != address(eigenLayerProxyAdmin)); - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: sender, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - _testRegisterAsOperator(sender, operatorDetails); - } - - function testTwoSelfOperatorsRegister() public { - _testRegisterAdditionalOperator(0); - _testRegisterAdditionalOperator(1); - } - - /// @notice registers a fixed address as a delegate, delegates to it from a second address, - /// and checks that the delegate's voteWeights increase properly - /// @param operator is the operator being delegated to. - /// @param staker is the staker delegating stake to the operator. - function testDelegation( - address operator, - address staker, - uint96 ethAmount, - uint96 eigenAmount - ) public fuzzedAddress(operator) fuzzedAddress(staker) fuzzedAmounts(ethAmount, eigenAmount) { - cheats.assume(staker != operator); - // base strategy will revert if these amounts are too small on first deposit - cheats.assume(ethAmount >= 1); - cheats.assume(eigenAmount >= 2); - - // Set weights ahead of the helper function call - bytes memory quorumNumbers = new bytes(2); - quorumNumbers[0] = bytes1(uint8(0)); - quorumNumbers[0] = bytes1(uint8(1)); - _testDelegation(operator, staker, ethAmount, eigenAmount); - } - - /// @notice tests that a when an operator is delegated to, that delegation is properly accounted for. - function testDelegationReceived( - address _operator, - address staker, - uint64 ethAmount, - uint64 eigenAmount - ) public fuzzedAddress(_operator) fuzzedAddress(staker) fuzzedAmounts(ethAmount, eigenAmount) { - cheats.assume(staker != _operator); - cheats.assume(ethAmount >= 1); - cheats.assume(eigenAmount >= 2); - - // use storage to solve stack-too-deep - operator = _operator; - - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: operator, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - if (!delegation.isOperator(operator)) { - _testRegisterAsOperator(operator, operatorDetails); - } - - uint256 amountBefore = delegation.operatorShares(operator, wethStrat); - - //making additional deposits to the strategies - assertTrue(!delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); - _testDepositWeth(staker, ethAmount); - _testDepositEigen(staker, eigenAmount); - _testDelegateToOperator(staker, operator); - assertTrue(delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); - - (/*IStrategy[] memory updatedStrategies*/, uint256[] memory updatedShares) = strategyManager.getDeposits(staker); - - { - IStrategy _strat = wethStrat; - // IStrategy _strat = strategyManager.stakerStrats(staker, 0); - assertTrue(address(_strat) != address(0), "stakerStrats not updated correctly"); - - assertTrue( - delegation.operatorShares(operator, _strat) - updatedShares[0] == amountBefore, - "ETH operatorShares not updated correctly" - ); - - cheats.startPrank(address(strategyManager)); - - IDelegationManager.OperatorDetails memory expectedOperatorDetails = delegation.operatorDetails(operator); - assertTrue( - keccak256(abi.encode(expectedOperatorDetails)) == keccak256(abi.encode(operatorDetails)), - "failed to set correct operator details" - ); - } - } - - /// @notice tests that a when an operator is undelegated from, that the staker is properly classified as undelegated. - function testUndelegation( - address operator, - address staker, - uint96 ethAmount, - uint96 eigenAmount - ) public fuzzedAddress(operator) fuzzedAddress(staker) fuzzedAmounts(ethAmount, eigenAmount) { - cheats.assume(staker != operator); - // base strategy will revert if these amounts are too small on first deposit - cheats.assume(ethAmount >= 1); - cheats.assume(eigenAmount >= 1); - _testDelegation(operator, staker, ethAmount, eigenAmount); - - (IStrategy[] memory strategyArray, uint256[] memory shareAmounts) = strategyManager.getDeposits(staker); - uint256[] memory strategyIndexes = new uint256[](strategyArray.length); - - // withdraw shares - _testQueueWithdrawal(staker, strategyIndexes, strategyArray, shareAmounts, staker /*withdrawer*/); - - cheats.startPrank(staker); - delegation.undelegate(staker); - cheats.stopPrank(); - - require(delegation.delegatedTo(staker) == address(0), "undelegation unsuccessful"); - } - - /// @notice tests delegation from a staker to operator via ECDSA signature. - function testDelegateToBySignature( - address operator, - uint96 ethAmount, - uint96 eigenAmount, - uint256 expiry - ) public fuzzedAddress(operator) { - address staker = cheats.addr(PRIVATE_KEY); - _registerOperatorAndDepositFromStaker(operator, staker, ethAmount, eigenAmount); - - uint256 nonceBefore = delegation.stakerNonce(staker); - - bytes32 structHash = keccak256( - abi.encode(delegation.STAKER_DELEGATION_TYPEHASH(), staker, operator, nonceBefore, expiry) - ); - bytes32 digestHash = keccak256(abi.encodePacked("\x19\x01", delegation.domainSeparator(), structHash)); - - bytes memory signature; - { - (uint8 v, bytes32 r, bytes32 s) = cheats.sign(PRIVATE_KEY, digestHash); - signature = abi.encodePacked(r, s, v); - } - - if (expiry < block.timestamp) { - cheats.expectRevert("DelegationManager.delegateToBySignature: staker signature expired"); - } - ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ - signature: signature, - expiry: expiry - }); - delegation.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, bytes32(0)); - if (expiry >= block.timestamp) { - assertTrue(delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); - assertTrue(nonceBefore + 1 == delegation.stakerNonce(staker), "nonce not incremented correctly"); - assertTrue(delegation.delegatedTo(staker) == operator, "staker delegated to wrong operator"); - } - } - - /// @notice tries delegating using a signature and an EIP 1271 compliant wallet - function testDelegateToBySignature_WithContractWallet_Successfully( - address operator, - uint96 ethAmount, - uint96 eigenAmount - ) public fuzzedAddress(operator) { - address staker = cheats.addr(PRIVATE_KEY); - - // deploy ERC1271WalletMock for staker to use - cheats.startPrank(staker); - ERC1271WalletMock wallet = new ERC1271WalletMock(staker); - cheats.stopPrank(); - staker = address(wallet); - - _registerOperatorAndDepositFromStaker(operator, staker, ethAmount, eigenAmount); - - uint256 nonceBefore = delegation.stakerNonce(staker); - - bytes32 structHash = keccak256( - abi.encode(delegation.STAKER_DELEGATION_TYPEHASH(), staker, operator, nonceBefore, type(uint256).max) - ); - bytes32 digestHash = keccak256(abi.encodePacked("\x19\x01", delegation.domainSeparator(), structHash)); - - bytes memory signature; - { - (uint8 v, bytes32 r, bytes32 s) = cheats.sign(PRIVATE_KEY, digestHash); - signature = abi.encodePacked(r, s, v); - } - - ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ - signature: signature, - expiry: type(uint256).max - }); - delegation.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, bytes32(0)); - assertTrue(delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); - assertTrue(nonceBefore + 1 == delegation.stakerNonce(staker), "nonce not incremented correctly"); - assertTrue(delegation.delegatedTo(staker) == operator, "staker delegated to wrong operator"); - } - - /// @notice tries delegating using a signature and an EIP 1271 compliant wallet, *but* providing a bad signature - function testDelegateToBySignature_WithContractWallet_BadSignature( - address operator, - uint96 ethAmount, - uint96 eigenAmount - ) public fuzzedAddress(operator) { - address staker = cheats.addr(PRIVATE_KEY); - - // deploy ERC1271WalletMock for staker to use - cheats.startPrank(staker); - ERC1271WalletMock wallet = new ERC1271WalletMock(staker); - cheats.stopPrank(); - staker = address(wallet); - - _registerOperatorAndDepositFromStaker(operator, staker, ethAmount, eigenAmount); - - uint256 nonceBefore = delegation.stakerNonce(staker); - - bytes32 structHash = keccak256( - abi.encode(delegation.STAKER_DELEGATION_TYPEHASH(), staker, operator, nonceBefore, type(uint256).max) - ); - bytes32 digestHash = keccak256(abi.encodePacked("\x19\x01", delegation.domainSeparator(), structHash)); - - bytes memory signature; - { - (uint8 v, bytes32 r, bytes32 s) = cheats.sign(PRIVATE_KEY, digestHash); - // mess up the signature by flipping v's parity - v = (v == 27 ? 28 : 27); - signature = abi.encodePacked(r, s, v); - } - - cheats.expectRevert( - bytes("EIP1271SignatureUtils.checkSignature_EIP1271: ERC1271 signature verification failed") - ); - ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ - signature: signature, - expiry: type(uint256).max - }); - delegation.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, bytes32(0)); - } - - /// @notice tries delegating using a wallet that does not comply with EIP 1271 - function testDelegateToBySignature_WithContractWallet_NonconformingWallet( - address operator, - uint96 ethAmount, - uint96 eigenAmount, - uint8 v, - bytes32 r, - bytes32 s - ) public fuzzedAddress(operator) { - address staker = cheats.addr(PRIVATE_KEY); - - // deploy non ERC1271-compliant wallet for staker to use - cheats.startPrank(staker); - ERC1271MaliciousMock wallet = new ERC1271MaliciousMock(); - cheats.stopPrank(); - staker = address(wallet); - - _registerOperatorAndDepositFromStaker(operator, staker, ethAmount, eigenAmount); - - cheats.assume(staker != operator); - - bytes memory signature = abi.encodePacked(r, s, v); - - cheats.expectRevert(); - ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ - signature: signature, - expiry: type(uint256).max - }); - delegation.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, bytes32(0)); - } - - /// @notice tests delegation to EigenLayer via an ECDSA signatures with invalid signature - /// @param operator is the operator being delegated to. - function testDelegateToByInvalidSignature( - address operator, - uint96 ethAmount, - uint96 eigenAmount, - uint8 v, - bytes32 r, - bytes32 s - ) public fuzzedAddress(operator) fuzzedAmounts(ethAmount, eigenAmount) { - address staker = cheats.addr(PRIVATE_KEY); - _registerOperatorAndDepositFromStaker(operator, staker, ethAmount, eigenAmount); - - bytes memory signature = abi.encodePacked(r, s, v); - - cheats.expectRevert(); - ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ - signature: signature, - expiry: type(uint256).max - }); - delegation.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, bytes32(0)); - } - - /// @notice This function tests to ensure that a delegation contract - /// cannot be intitialized multiple times - function testCannotInitMultipleTimesDelegation() public cannotReinit { - //delegation has already been initialized in the Deployer test contract - delegation.initialize( - address(this), - eigenLayerPauserReg, - 0, - minWithdrawalDelayBlocks, - initializeStrategiesToSetDelayBlocks, - initializeWithdrawalDelayBlocks - ); - } - - /// @notice This function tests to ensure that a you can't register as a delegate multiple times - /// @param operator is the operator being delegated to. - function testRegisterAsOperatorMultipleTimes(address operator) public fuzzedAddress(operator) { - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: operator, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - _testRegisterAsOperator(operator, operatorDetails); - cheats.expectRevert(bytes("DelegationManager.registerAsOperator: caller is already actively delegated")); - _testRegisterAsOperator(operator, operatorDetails); - } - - /// @notice This function tests to ensure that a staker cannot delegate to an unregistered operator - /// @param delegate is the unregistered operator - function testDelegationToUnregisteredDelegate(address delegate) public fuzzedAddress(delegate) { - //deposit into 1 strategy for getOperatorAddress(1), who is delegating to the unregistered operator - _testDepositStrategies(getOperatorAddress(1), 1e18, 1); - _testDepositEigen(getOperatorAddress(1), 1e18); - - cheats.expectRevert(bytes("DelegationManager.delegateTo: operator is not registered in EigenLayer")); - cheats.startPrank(getOperatorAddress(1)); - ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry; - delegation.delegateTo(delegate, signatureWithExpiry, bytes32(0)); - cheats.stopPrank(); - } - - /// @notice This function tests to ensure that a delegation contract - /// cannot be intitialized multiple times, test with different caller addresses - function testCannotInitMultipleTimesDelegation(address _attacker) public { - cheats.assume(_attacker != address(eigenLayerProxyAdmin)); - //delegation has already been initialized in the Deployer test contract - vm.prank(_attacker); - cheats.expectRevert(bytes("Initializable: contract is already initialized")); - delegation.initialize( - _attacker, - eigenLayerPauserReg, - 0, - 0, // minWithdrawalDelayBLocks - initializeStrategiesToSetDelayBlocks, - initializeWithdrawalDelayBlocks - ); - } - - /// @notice This function tests to ensure that an address can only call registerAsOperator() once - function testCannotRegisterAsOperatorTwice( - address _operator, - address _dt - ) public fuzzedAddress(_operator) fuzzedAddress(_dt) { - vm.assume(_dt != address(0)); - vm.startPrank(_operator); - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: msg.sender, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - string memory emptyStringForMetadataURI; - delegation.registerAsOperator(operatorDetails, emptyStringForMetadataURI); - vm.expectRevert("DelegationManager.registerAsOperator: caller is already actively delegated"); - delegation.registerAsOperator(operatorDetails, emptyStringForMetadataURI); - cheats.stopPrank(); - } - - /// @notice this function checks that you can only delegate to an address that is already registered. - function testDelegateToInvalidOperator( - address _staker, - address _unregisteredoperator - ) public fuzzedAddress(_staker) { - vm.startPrank(_staker); - cheats.expectRevert(bytes("DelegationManager.delegateTo: operator is not registered in EigenLayer")); - ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry; - delegation.delegateTo(_unregisteredoperator, signatureWithExpiry, bytes32(0)); - cheats.expectRevert(bytes("DelegationManager.delegateTo: operator is not registered in EigenLayer")); - delegation.delegateTo(_staker, signatureWithExpiry, bytes32(0)); - cheats.stopPrank(); - } - - function testUndelegate_SigP_Version(address _operator, address _staker, address _dt) public { - vm.assume(_operator != address(0)); - vm.assume(_staker != address(0)); - vm.assume(_operator != _staker); - vm.assume(_dt != address(0)); - vm.assume(_operator != address(eigenLayerProxyAdmin)); - vm.assume(_staker != address(eigenLayerProxyAdmin)); - - // setup delegation - vm.prank(_operator); - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: _dt, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - string memory emptyStringForMetadataURI; - delegation.registerAsOperator(operatorDetails, emptyStringForMetadataURI); - vm.prank(_staker); - ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry; - delegation.delegateTo(_operator, signatureWithExpiry, bytes32(0)); - - // operators cannot undelegate from themselves - vm.prank(_operator); - cheats.expectRevert(bytes("DelegationManager.undelegate: operators cannot be undelegated")); - delegation.undelegate(_operator); - - // assert still delegated - assertTrue(delegation.isDelegated(_staker)); - assertTrue(delegation.isOperator(_operator)); - - // _staker *can* undelegate themselves - vm.prank(_staker); - delegation.undelegate(_staker); - - // assert undelegated - assertTrue(!delegation.isDelegated(_staker)); - assertTrue(delegation.isOperator(_operator)); - } - - function _testRegisterAdditionalOperator(uint256 index) internal { - address sender = getOperatorAddress(index); - - //register as both ETH and EIGEN operator - uint256 wethToDeposit = 1e18; - uint256 eigenToDeposit = 1e10; - _testDepositWeth(sender, wethToDeposit); - _testDepositEigen(sender, eigenToDeposit); - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: sender, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - _testRegisterAsOperator(sender, operatorDetails); - cheats.startPrank(sender); - - cheats.stopPrank(); - } - - // registers the operator if they are not already registered, and deposits "WETH" + "EIGEN" on behalf of the staker. - function _registerOperatorAndDepositFromStaker( - address operator, - address staker, - uint96 ethAmount, - uint96 eigenAmount - ) internal { - cheats.assume(staker != operator); - - // if first deposit amount to base strategy is too small, it will revert. ignore that case here. - cheats.assume(ethAmount >= 1 && ethAmount <= 1e18); - cheats.assume(eigenAmount >= 1 && eigenAmount <= 1e18); - - if (!delegation.isOperator(operator)) { - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: operator, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - _testRegisterAsOperator(operator, operatorDetails); - } - - //making additional deposits to the strategies - assertTrue(!delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); - _testDepositWeth(staker, ethAmount); - _testDepositEigen(staker, eigenAmount); - } -} +// import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; +// import "src/contracts/interfaces/ISignatureUtils.sol"; + +// import "../test/EigenLayerTestHelper.t.sol"; + +// contract DelegationTests is EigenLayerTestHelper { +// uint256 public PRIVATE_KEY = 420; + +// uint32 serveUntil = 100; + +// address public registryCoordinator = address(uint160(uint256(keccak256("registryCoordinator")))); +// uint8 defaultQuorumNumber = 0; +// bytes32 defaultOperatorId = bytes32(uint256(0)); + +// modifier fuzzedAmounts(uint256 ethAmount, uint256 eigenAmount) { +// cheats.assume(ethAmount >= 0 && ethAmount <= 1e18); +// cheats.assume(eigenAmount >= 0 && eigenAmount <= 1e18); +// _; +// } + +// function setUp() public virtual override { +// EigenLayerDeployer.setUp(); +// } + +// /// @notice testing if an operator can register to themselves. +// function testSelfOperatorRegister() public { +// _testRegisterAdditionalOperator(0); +// } + +// /// @notice testing if an operator can delegate to themselves. +// /// @param sender is the address of the operator. +// function testSelfOperatorDelegate(address sender) public { +// cheats.assume(sender != address(0)); +// cheats.assume(sender != address(eigenLayerProxyAdmin)); +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: sender, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }); +// _testRegisterAsOperator(sender, operatorDetails); +// } + +// function testTwoSelfOperatorsRegister() public { +// _testRegisterAdditionalOperator(0); +// _testRegisterAdditionalOperator(1); +// } + +// /// @notice registers a fixed address as a delegate, delegates to it from a second address, +// /// and checks that the delegate's voteWeights increase properly +// /// @param operator is the operator being delegated to. +// /// @param staker is the staker delegating stake to the operator. +// function testDelegation( +// address operator, +// address staker, +// uint96 ethAmount, +// uint96 eigenAmount +// ) public fuzzedAddress(operator) fuzzedAddress(staker) fuzzedAmounts(ethAmount, eigenAmount) { +// cheats.assume(staker != operator); +// // base strategy will revert if these amounts are too small on first deposit +// cheats.assume(ethAmount >= 1); +// cheats.assume(eigenAmount >= 2); + +// // Set weights ahead of the helper function call +// bytes memory quorumNumbers = new bytes(2); +// quorumNumbers[0] = bytes1(uint8(0)); +// quorumNumbers[0] = bytes1(uint8(1)); +// _testDelegation(operator, staker, ethAmount, eigenAmount); +// } + +// /// @notice tests that a when an operator is delegated to, that delegation is properly accounted for. +// function testDelegationReceived( +// address _operator, +// address staker, +// uint64 ethAmount, +// uint64 eigenAmount +// ) public fuzzedAddress(_operator) fuzzedAddress(staker) fuzzedAmounts(ethAmount, eigenAmount) { +// cheats.assume(staker != _operator); +// cheats.assume(ethAmount >= 1); +// cheats.assume(eigenAmount >= 2); + +// // use storage to solve stack-too-deep +// operator = _operator; + +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: operator, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }); +// if (!delegation.isOperator(operator)) { +// _testRegisterAsOperator(operator, operatorDetails); +// } + +// uint256 amountBefore = delegation.operatorShares(operator, wethStrat); + +// //making additional deposits to the strategies +// assertTrue(!delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); +// _testDepositWeth(staker, ethAmount); +// _testDepositEigen(staker, eigenAmount); +// _testDelegateToOperator(staker, operator); +// assertTrue(delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); + +// (/*IStrategy[] memory updatedStrategies*/, uint256[] memory updatedShares) = strategyManager.getDeposits(staker); + +// { +// IStrategy _strat = wethStrat; +// // IStrategy _strat = strategyManager.stakerStrats(staker, 0); +// assertTrue(address(_strat) != address(0), "stakerStrats not updated correctly"); + +// assertTrue( +// delegation.operatorShares(operator, _strat) - updatedShares[0] == amountBefore, +// "ETH operatorShares not updated correctly" +// ); + +// cheats.startPrank(address(strategyManager)); + +// IDelegationManager.OperatorDetails memory expectedOperatorDetails = delegation.operatorDetails(operator); +// assertTrue( +// keccak256(abi.encode(expectedOperatorDetails)) == keccak256(abi.encode(operatorDetails)), +// "failed to set correct operator details" +// ); +// } +// } + +// /// @notice tests that a when an operator is undelegated from, that the staker is properly classified as undelegated. +// function testUndelegation( +// address operator, +// address staker, +// uint96 ethAmount, +// uint96 eigenAmount +// ) public fuzzedAddress(operator) fuzzedAddress(staker) fuzzedAmounts(ethAmount, eigenAmount) { +// cheats.assume(staker != operator); +// // base strategy will revert if these amounts are too small on first deposit +// cheats.assume(ethAmount >= 1); +// cheats.assume(eigenAmount >= 1); +// _testDelegation(operator, staker, ethAmount, eigenAmount); + +// (IStrategy[] memory strategyArray, uint256[] memory shareAmounts) = strategyManager.getDeposits(staker); +// uint256[] memory strategyIndexes = new uint256[](strategyArray.length); + +// // withdraw shares +// _testQueueWithdrawal(staker, strategyIndexes, strategyArray, shareAmounts, staker /*withdrawer*/); + +// cheats.startPrank(staker); +// delegation.undelegate(staker); +// cheats.stopPrank(); + +// require(delegation.delegatedTo(staker) == address(0), "undelegation unsuccessful"); +// } + +// /// @notice tests delegation from a staker to operator via ECDSA signature. +// function testDelegateToBySignature( +// address operator, +// uint96 ethAmount, +// uint96 eigenAmount, +// uint256 expiry +// ) public fuzzedAddress(operator) { +// address staker = cheats.addr(PRIVATE_KEY); +// _registerOperatorAndDepositFromStaker(operator, staker, ethAmount, eigenAmount); + +// uint256 nonceBefore = delegation.stakerNonce(staker); + +// bytes32 structHash = keccak256( +// abi.encode(delegation.STAKER_DELEGATION_TYPEHASH(), staker, operator, nonceBefore, expiry) +// ); +// bytes32 digestHash = keccak256(abi.encodePacked("\x19\x01", delegation.domainSeparator(), structHash)); + +// bytes memory signature; +// { +// (uint8 v, bytes32 r, bytes32 s) = cheats.sign(PRIVATE_KEY, digestHash); +// signature = abi.encodePacked(r, s, v); +// } + +// if (expiry < block.timestamp) { +// cheats.expectRevert("DelegationManager.delegateToBySignature: staker signature expired"); +// } +// ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ +// signature: signature, +// expiry: expiry +// }); +// delegation.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, bytes32(0)); +// if (expiry >= block.timestamp) { +// assertTrue(delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); +// assertTrue(nonceBefore + 1 == delegation.stakerNonce(staker), "nonce not incremented correctly"); +// assertTrue(delegation.delegatedTo(staker) == operator, "staker delegated to wrong operator"); +// } +// } + +// /// @notice tries delegating using a signature and an EIP 1271 compliant wallet +// function testDelegateToBySignature_WithContractWallet_Successfully( +// address operator, +// uint96 ethAmount, +// uint96 eigenAmount +// ) public fuzzedAddress(operator) { +// address staker = cheats.addr(PRIVATE_KEY); + +// // deploy ERC1271WalletMock for staker to use +// cheats.startPrank(staker); +// ERC1271WalletMock wallet = new ERC1271WalletMock(staker); +// cheats.stopPrank(); +// staker = address(wallet); + +// _registerOperatorAndDepositFromStaker(operator, staker, ethAmount, eigenAmount); + +// uint256 nonceBefore = delegation.stakerNonce(staker); + +// bytes32 structHash = keccak256( +// abi.encode(delegation.STAKER_DELEGATION_TYPEHASH(), staker, operator, nonceBefore, type(uint256).max) +// ); +// bytes32 digestHash = keccak256(abi.encodePacked("\x19\x01", delegation.domainSeparator(), structHash)); + +// bytes memory signature; +// { +// (uint8 v, bytes32 r, bytes32 s) = cheats.sign(PRIVATE_KEY, digestHash); +// signature = abi.encodePacked(r, s, v); +// } + +// ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ +// signature: signature, +// expiry: type(uint256).max +// }); +// delegation.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, bytes32(0)); +// assertTrue(delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); +// assertTrue(nonceBefore + 1 == delegation.stakerNonce(staker), "nonce not incremented correctly"); +// assertTrue(delegation.delegatedTo(staker) == operator, "staker delegated to wrong operator"); +// } + +// /// @notice tries delegating using a signature and an EIP 1271 compliant wallet, *but* providing a bad signature +// function testDelegateToBySignature_WithContractWallet_BadSignature( +// address operator, +// uint96 ethAmount, +// uint96 eigenAmount +// ) public fuzzedAddress(operator) { +// address staker = cheats.addr(PRIVATE_KEY); + +// // deploy ERC1271WalletMock for staker to use +// cheats.startPrank(staker); +// ERC1271WalletMock wallet = new ERC1271WalletMock(staker); +// cheats.stopPrank(); +// staker = address(wallet); + +// _registerOperatorAndDepositFromStaker(operator, staker, ethAmount, eigenAmount); + +// uint256 nonceBefore = delegation.stakerNonce(staker); + +// bytes32 structHash = keccak256( +// abi.encode(delegation.STAKER_DELEGATION_TYPEHASH(), staker, operator, nonceBefore, type(uint256).max) +// ); +// bytes32 digestHash = keccak256(abi.encodePacked("\x19\x01", delegation.domainSeparator(), structHash)); + +// bytes memory signature; +// { +// (uint8 v, bytes32 r, bytes32 s) = cheats.sign(PRIVATE_KEY, digestHash); +// // mess up the signature by flipping v's parity +// v = (v == 27 ? 28 : 27); +// signature = abi.encodePacked(r, s, v); +// } + +// cheats.expectRevert( +// bytes("EIP1271SignatureUtils.checkSignature_EIP1271: ERC1271 signature verification failed") +// ); +// ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ +// signature: signature, +// expiry: type(uint256).max +// }); +// delegation.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, bytes32(0)); +// } + +// /// @notice tries delegating using a wallet that does not comply with EIP 1271 +// function testDelegateToBySignature_WithContractWallet_NonconformingWallet( +// address operator, +// uint96 ethAmount, +// uint96 eigenAmount, +// uint8 v, +// bytes32 r, +// bytes32 s +// ) public fuzzedAddress(operator) { +// address staker = cheats.addr(PRIVATE_KEY); + +// // deploy non ERC1271-compliant wallet for staker to use +// cheats.startPrank(staker); +// ERC1271MaliciousMock wallet = new ERC1271MaliciousMock(); +// cheats.stopPrank(); +// staker = address(wallet); + +// _registerOperatorAndDepositFromStaker(operator, staker, ethAmount, eigenAmount); + +// cheats.assume(staker != operator); + +// bytes memory signature = abi.encodePacked(r, s, v); + +// cheats.expectRevert(); +// ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ +// signature: signature, +// expiry: type(uint256).max +// }); +// delegation.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, bytes32(0)); +// } + +// /// @notice tests delegation to EigenLayer via an ECDSA signatures with invalid signature +// /// @param operator is the operator being delegated to. +// function testDelegateToByInvalidSignature( +// address operator, +// uint96 ethAmount, +// uint96 eigenAmount, +// uint8 v, +// bytes32 r, +// bytes32 s +// ) public fuzzedAddress(operator) fuzzedAmounts(ethAmount, eigenAmount) { +// address staker = cheats.addr(PRIVATE_KEY); +// _registerOperatorAndDepositFromStaker(operator, staker, ethAmount, eigenAmount); + +// bytes memory signature = abi.encodePacked(r, s, v); + +// cheats.expectRevert(); +// ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ +// signature: signature, +// expiry: type(uint256).max +// }); +// delegation.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, bytes32(0)); +// } + +// /// @notice This function tests to ensure that a delegation contract +// /// cannot be intitialized multiple times +// function testCannotInitMultipleTimesDelegation() public cannotReinit { +// //delegation has already been initialized in the Deployer test contract +// delegation.initialize( +// address(this), +// eigenLayerPauserReg, +// 0, +// minWithdrawalDelayBlocks, +// initializeStrategiesToSetDelayBlocks, +// initializeWithdrawalDelayBlocks +// ); +// } + +// /// @notice This function tests to ensure that a you can't register as a delegate multiple times +// /// @param operator is the operator being delegated to. +// function testRegisterAsOperatorMultipleTimes(address operator) public fuzzedAddress(operator) { +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: operator, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }); +// _testRegisterAsOperator(operator, operatorDetails); +// cheats.expectRevert(bytes("DelegationManager.registerAsOperator: caller is already actively delegated")); +// _testRegisterAsOperator(operator, operatorDetails); +// } + +// /// @notice This function tests to ensure that a staker cannot delegate to an unregistered operator +// /// @param delegate is the unregistered operator +// function testDelegationToUnregisteredDelegate(address delegate) public fuzzedAddress(delegate) { +// //deposit into 1 strategy for getOperatorAddress(1), who is delegating to the unregistered operator +// _testDepositStrategies(getOperatorAddress(1), 1e18, 1); +// _testDepositEigen(getOperatorAddress(1), 1e18); + +// cheats.expectRevert(bytes("DelegationManager.delegateTo: operator is not registered in EigenLayer")); +// cheats.startPrank(getOperatorAddress(1)); +// ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry; +// delegation.delegateTo(delegate, signatureWithExpiry, bytes32(0)); +// cheats.stopPrank(); +// } + +// /// @notice This function tests to ensure that a delegation contract +// /// cannot be intitialized multiple times, test with different caller addresses +// function testCannotInitMultipleTimesDelegation(address _attacker) public { +// cheats.assume(_attacker != address(eigenLayerProxyAdmin)); +// //delegation has already been initialized in the Deployer test contract +// vm.prank(_attacker); +// cheats.expectRevert(bytes("Initializable: contract is already initialized")); +// delegation.initialize( +// _attacker, +// eigenLayerPauserReg, +// 0, +// 0, // minWithdrawalDelayBLocks +// initializeStrategiesToSetDelayBlocks, +// initializeWithdrawalDelayBlocks +// ); +// } + +// /// @notice This function tests to ensure that an address can only call registerAsOperator() once +// function testCannotRegisterAsOperatorTwice( +// address _operator, +// address _dt +// ) public fuzzedAddress(_operator) fuzzedAddress(_dt) { +// vm.assume(_dt != address(0)); +// vm.startPrank(_operator); +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: msg.sender, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }); +// string memory emptyStringForMetadataURI; +// delegation.registerAsOperator(operatorDetails, emptyStringForMetadataURI); +// vm.expectRevert("DelegationManager.registerAsOperator: caller is already actively delegated"); +// delegation.registerAsOperator(operatorDetails, emptyStringForMetadataURI); +// cheats.stopPrank(); +// } + +// /// @notice this function checks that you can only delegate to an address that is already registered. +// function testDelegateToInvalidOperator( +// address _staker, +// address _unregisteredoperator +// ) public fuzzedAddress(_staker) { +// vm.startPrank(_staker); +// cheats.expectRevert(bytes("DelegationManager.delegateTo: operator is not registered in EigenLayer")); +// ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry; +// delegation.delegateTo(_unregisteredoperator, signatureWithExpiry, bytes32(0)); +// cheats.expectRevert(bytes("DelegationManager.delegateTo: operator is not registered in EigenLayer")); +// delegation.delegateTo(_staker, signatureWithExpiry, bytes32(0)); +// cheats.stopPrank(); +// } + +// function testUndelegate_SigP_Version(address _operator, address _staker, address _dt) public { +// vm.assume(_operator != address(0)); +// vm.assume(_staker != address(0)); +// vm.assume(_operator != _staker); +// vm.assume(_dt != address(0)); +// vm.assume(_operator != address(eigenLayerProxyAdmin)); +// vm.assume(_staker != address(eigenLayerProxyAdmin)); + +// // setup delegation +// vm.prank(_operator); +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: _dt, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }); +// string memory emptyStringForMetadataURI; +// delegation.registerAsOperator(operatorDetails, emptyStringForMetadataURI); +// vm.prank(_staker); +// ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry; +// delegation.delegateTo(_operator, signatureWithExpiry, bytes32(0)); + +// // operators cannot undelegate from themselves +// vm.prank(_operator); +// cheats.expectRevert(bytes("DelegationManager.undelegate: operators cannot be undelegated")); +// delegation.undelegate(_operator); + +// // assert still delegated +// assertTrue(delegation.isDelegated(_staker)); +// assertTrue(delegation.isOperator(_operator)); + +// // _staker *can* undelegate themselves +// vm.prank(_staker); +// delegation.undelegate(_staker); + +// // assert undelegated +// assertTrue(!delegation.isDelegated(_staker)); +// assertTrue(delegation.isOperator(_operator)); +// } + +// function _testRegisterAdditionalOperator(uint256 index) internal { +// address sender = getOperatorAddress(index); + +// //register as both ETH and EIGEN operator +// uint256 wethToDeposit = 1e18; +// uint256 eigenToDeposit = 1e10; +// _testDepositWeth(sender, wethToDeposit); +// _testDepositEigen(sender, eigenToDeposit); +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: sender, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }); +// _testRegisterAsOperator(sender, operatorDetails); +// cheats.startPrank(sender); + +// cheats.stopPrank(); +// } + +// // registers the operator if they are not already registered, and deposits "WETH" + "EIGEN" on behalf of the staker. +// function _registerOperatorAndDepositFromStaker( +// address operator, +// address staker, +// uint96 ethAmount, +// uint96 eigenAmount +// ) internal { +// cheats.assume(staker != operator); + +// // if first deposit amount to base strategy is too small, it will revert. ignore that case here. +// cheats.assume(ethAmount >= 1 && ethAmount <= 1e18); +// cheats.assume(eigenAmount >= 1 && eigenAmount <= 1e18); + +// if (!delegation.isOperator(operator)) { +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: operator, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }); +// _testRegisterAsOperator(operator, operatorDetails); +// } + +// //making additional deposits to the strategies +// assertTrue(!delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); +// _testDepositWeth(staker, ethAmount); +// _testDepositEigen(staker, eigenAmount); +// } +// } \ No newline at end of file diff --git a/src/test/DelegationFaucet.t.sol b/src/test/DelegationFaucet.t.sol deleted file mode 100644 index b9c4443f0..000000000 --- a/src/test/DelegationFaucet.t.sol +++ /dev/null @@ -1,513 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "script/whitelist/delegationFaucet/DelegationFaucet.sol"; -import "script/whitelist/ERC20PresetMinterPauser.sol"; - -import "src/test/EigenLayerTestHelper.t.sol"; - -contract DelegationFaucetTests is EigenLayerTestHelper { - // EigenLayer contracts - DelegationFaucet delegationFaucet; - - // M2 testing/mock contracts - ERC20PresetMinterPauser public stakeToken; - StrategyBase public stakeTokenStrat; - - bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); - uint256 public constant DEFAULT_AMOUNT = 100e18; - address owner = cheats.addr(1000); - - /// @notice Emitted when a queued withdrawal is completed - event WithdrawalCompleted(bytes32 withdrawalRoot); - - function setUp() public virtual override { - EigenLayerDeployer.setUp(); - - // Deploy ERC20 stakeToken, StrategyBase, and add StrategyBase to whitelist - stakeToken = new ERC20PresetMinterPauser("StakeToken", "STK"); - stakeTokenStrat = StrategyBase( - address( - new TransparentUpgradeableProxy( - address(baseStrategyImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector(StrategyBase.initialize.selector, stakeToken, eigenLayerPauserReg) - ) - ) - ); - cheats.startPrank(strategyManager.strategyWhitelister()); - IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); - _strategy[0] = stakeTokenStrat; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); - cheats.stopPrank(); - - // Deploy DelegationFaucet, grant it admin/mint/pauser roles, etc. - delegationFaucet = new DelegationFaucet(strategyManager, delegation, stakeToken, stakeTokenStrat); - targetContract(address(delegationFaucet)); - stakeToken.grantRole(MINTER_ROLE, address(delegationFaucet)); - } - - /** - * @notice Assertions in test - * - Checks staker contract is deployed - * - Checks token supply before/after minting - * - Checks token balances are updated correctly for staker and strategy contracts - * @param _operatorIndex is the index of the operator to use from the test-data/operators.json file - * @param _depositAmount is the amount of stakeToken to mint to the staker and deposit into the strategy - */ - function test_mintDepositAndDelegate_CheckBalancesAndDeploys(uint8 _operatorIndex, uint256 _depositAmount) public { - cheats.assume(_operatorIndex < 15 && _depositAmount < DEFAULT_AMOUNT); - if (_depositAmount == 0) { - // Passing 0 as amount param defaults the amount to DEFAULT_AMOUNT constant - _depositAmount = DEFAULT_AMOUNT; - } - // Setup Operator - address operator = getOperatorAddress(_operatorIndex); - address stakerContract = delegationFaucet.getStaker(operator); - _registerOperator(operator); - - // Mint token to Staker, deposit minted amount into strategy, and delegate to operator - uint256 supplyBefore = stakeToken.totalSupply(); - uint256 stratBalanceBefore = stakeToken.balanceOf(address(stakeTokenStrat)); - assertTrue( - !Address.isContract(stakerContract), - "test_mintDepositAndDelegate_CheckBalancesAndDeploys: staker contract shouldn't be deployed" - ); - IDelegationManager.SignatureWithExpiry memory signatureWithExpiry; - delegationFaucet.mintDepositAndDelegate(operator, signatureWithExpiry, bytes32(0), _depositAmount); - assertTrue( - Address.isContract(stakerContract), - "test_mintDepositAndDelegate_CheckBalancesAndDeploys: staker contract not deployed" - ); - uint256 supplyAfter = stakeToken.totalSupply(); - uint256 stratBalanceAfter = stakeToken.balanceOf(address(stakeTokenStrat)); - // Check token supply and balances - assertEq( - supplyAfter, - supplyBefore + _depositAmount, - "test_mintDepositAndDelegate_CheckBalancesAndDeploys: token supply not updated correctly" - ); - assertEq( - stratBalanceAfter, - stratBalanceBefore + _depositAmount, - "test_mintDepositAndDelegate_CheckBalancesAndDeploys: strategy balance not updated correctly" - ); - assertEq( - stakeToken.balanceOf(stakerContract), - 0, - "test_mintDepositAndDelegate_CheckBalancesAndDeploys: staker balance should be 0" - ); - } - - /** - * @notice Check the before/after values for strategy shares and operator shares - * @param _operatorIndex is the index of the operator to use from the test-data/operators.json file - * @param _depositAmount is the amount of stakeToken to mint to the staker and deposit into the strategy - */ - function test_mintDepositAndDelegate_StrategyAndOperatorShares( - uint8 _operatorIndex, - uint256 _depositAmount - ) public { - cheats.assume(_operatorIndex < 15 && _depositAmount < DEFAULT_AMOUNT); - if (_depositAmount == 0) { - _depositAmount = DEFAULT_AMOUNT; - } - // Setup Operator - address operator = getOperatorAddress(_operatorIndex); - address stakerContract = delegationFaucet.getStaker(operator); - _registerOperator(operator); - - // Mint token to Staker, deposit minted amount into strategy, and delegate to operator - uint256 stakerSharesBefore = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 operatorSharesBefore = delegation.operatorShares(operator, stakeTokenStrat); - IDelegationManager.SignatureWithExpiry memory signatureWithExpiry; - delegationFaucet.mintDepositAndDelegate(operator, signatureWithExpiry, bytes32(0), _depositAmount); - - uint256 stakerSharesAfter = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 operatorSharesAfter = delegation.operatorShares(operator, stakeTokenStrat); - assertTrue( - delegation.delegatedTo(stakerContract) == operator, - "test_mintDepositAndDelegate_StrategyAndOperatorShares: delegated address not set appropriately" - ); - assertTrue( - delegation.isDelegated(stakerContract), - "test_mintDepositAndDelegate_StrategyAndOperatorShares: delegated status not set appropriately" - ); - assertEq( - stakerSharesAfter, - stakerSharesBefore + _depositAmount, - "test_mintDepositAndDelegate_StrategyAndOperatorShares: staker shares not updated correctly" - ); - assertEq( - operatorSharesAfter, - operatorSharesBefore + _depositAmount, - "test_mintDepositAndDelegate_StrategyAndOperatorShares: operator shares not updated correctly" - ); - } - - /** - * @notice Invariant test the before/after values for strategy shares and operator shares from multiple runs - */ - /// forge-config: default.invariant.runs = 5 - /// forge-config: default.invariant.depth = 20 - function invariant_test_mintDepositAndDelegate_StrategyAndOperatorShares() public { - // Setup Operator - address operator = getOperatorAddress(0); - address stakerContract = delegationFaucet.getStaker(operator); - _registerOperator(operator); - - // Mint token to Staker, deposit minted amount into strategy, and delegate to operator - uint256 stakerSharesBefore = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 operatorSharesBefore = delegation.operatorShares(operator, stakeTokenStrat); - IDelegationManager.SignatureWithExpiry memory signatureWithExpiry; - cheats.prank(delegationFaucet.owner()); - delegationFaucet.mintDepositAndDelegate(operator, signatureWithExpiry, bytes32(0), DEFAULT_AMOUNT); - - uint256 stakerSharesAfter = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 operatorSharesAfter = delegation.operatorShares(operator, stakeTokenStrat); - assertTrue( - delegation.delegatedTo(stakerContract) == operator, - "test_mintDepositAndDelegate_StrategyAndOperatorShares: delegated address not set appropriately" - ); - assertTrue( - delegation.isDelegated(stakerContract), - "test_mintDepositAndDelegate_StrategyAndOperatorShares: delegated status not set appropriately" - ); - assertEq( - stakerSharesAfter, - stakerSharesBefore + DEFAULT_AMOUNT, - "test_mintDepositAndDelegate_StrategyAndOperatorShares: staker shares not updated correctly" - ); - assertEq( - operatorSharesAfter, - operatorSharesBefore + DEFAULT_AMOUNT, - "test_mintDepositAndDelegate_StrategyAndOperatorShares: operator shares not updated correctly" - ); - } - - /** - * @param _operatorIndex is the index of the operator to use from the test-data/operators.json file - */ - function test_mintDepositAndDelegate_RevertsIf_UnregisteredOperator(uint8 _operatorIndex) public { - cheats.assume(_operatorIndex < 15); - address operator = getOperatorAddress(_operatorIndex); - // Unregistered operator should revert - cheats.expectRevert("DelegationFaucet: Operator not registered"); - IDelegationManager.SignatureWithExpiry memory signatureWithExpiry; - delegationFaucet.mintDepositAndDelegate(operator, signatureWithExpiry, bytes32(0), DEFAULT_AMOUNT); - } - - function test_depositIntoStrategy_IncreaseShares(uint8 _operatorIndex, uint256 _depositAmount) public { - cheats.assume(_operatorIndex < 15 && _depositAmount < DEFAULT_AMOUNT); - if (_depositAmount == 0) { - _depositAmount = DEFAULT_AMOUNT; - } - // Setup Operator - address operator = getOperatorAddress(_operatorIndex); - address stakerContract = delegationFaucet.getStaker(operator); - _registerOperator(operator); - - // Mint token to Staker, deposit minted amount into strategy, and delegate to operator - uint256 stakerSharesBefore = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 operatorSharesBefore = delegation.operatorShares(operator, stakeTokenStrat); - IDelegationManager.SignatureWithExpiry memory signatureWithExpiry; - delegationFaucet.mintDepositAndDelegate(operator, signatureWithExpiry, bytes32(0), DEFAULT_AMOUNT); - - uint256 stakerSharesAfter = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 operatorSharesAfter = delegation.operatorShares(operator, stakeTokenStrat); - assertTrue( - delegation.delegatedTo(stakerContract) == operator, - "test_mintDepositAndDelegate_IncreaseShares: delegated address not set appropriately" - ); - assertTrue( - delegation.isDelegated(stakerContract), - "test_mintDepositAndDelegate_IncreaseShares: delegated status not set appropriately" - ); - assertEq( - stakerSharesAfter, - stakerSharesBefore + DEFAULT_AMOUNT, - "test_mintDepositAndDelegate_IncreaseShares: staker shares not updated correctly" - ); - assertEq( - operatorSharesAfter, - operatorSharesBefore + DEFAULT_AMOUNT, - "test_mintDepositAndDelegate_IncreaseShares: operator shares not updated correctly" - ); - - // Deposit more into strategy - stakerSharesBefore = stakerSharesAfter; - operatorSharesBefore = operatorSharesAfter; - delegationFaucet.depositIntoStrategy(stakerContract, stakeTokenStrat, stakeToken, _depositAmount); - stakerSharesAfter = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - operatorSharesAfter = delegation.operatorShares(operator, stakeTokenStrat); - - assertEq( - stakerSharesAfter, - stakerSharesBefore + _depositAmount, - "test_mintDepositAndDelegate_IncreasesShares: staker shares not updated correctly" - ); - assertEq( - operatorSharesAfter, - operatorSharesBefore + _depositAmount, - "test_mintDepositAndDelegate_IncreasesShares: operator shares not updated correctly" - ); - } - - function test_queueWithdrawal_StakeTokenWithdraw(uint8 _operatorIndex, uint256 _withdrawAmount) public { - cheats.assume(_operatorIndex < 15 && 0 < _withdrawAmount && _withdrawAmount < DEFAULT_AMOUNT); - // Setup Operator - address operator = getOperatorAddress(_operatorIndex); - address stakerContract = delegationFaucet.getStaker(operator); - _registerOperator(operator); - - IDelegationManager.SignatureWithExpiry memory signatureWithExpiry; - delegationFaucet.mintDepositAndDelegate(operator, signatureWithExpiry, bytes32(0), DEFAULT_AMOUNT); - - uint256 operatorSharesBefore = delegation.operatorShares(operator, stakeTokenStrat); - uint256 stakerSharesBefore = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 nonceBefore = delegation.cumulativeWithdrawalsQueued(/*staker*/ stakerContract); - - // Queue withdrawal - ( - IDelegationManager.Withdrawal memory queuedWithdrawal, - , /*tokensArray is unused in this test*/ - /*withdrawalRoot is unused in this test*/ - ) = _setUpQueuedWithdrawalStructSingleStrat( - /*staker*/ stakerContract, - /*withdrawer*/ stakerContract, - stakeToken, - stakeTokenStrat, - _withdrawAmount - ); - IDelegationManager.QueuedWithdrawalParams[] memory params = new IDelegationManager.QueuedWithdrawalParams[](1); - - params[0] = IDelegationManager.QueuedWithdrawalParams({ - strategies: queuedWithdrawal.strategies, - shares: queuedWithdrawal.shares, - withdrawer: stakerContract - }); - - delegationFaucet.queueWithdrawal( - stakerContract, - params - ); - uint256 operatorSharesAfter = delegation.operatorShares(operator, stakeTokenStrat); - uint256 stakerSharesAfter = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 nonceAfter = delegation.cumulativeWithdrawalsQueued(/*staker*/ stakerContract); - - assertEq( - operatorSharesBefore, - operatorSharesAfter + _withdrawAmount, - "test_queueWithdrawal_WithdrawStakeToken: operator shares not updated correctly" - ); - // Withdrawal queued, but not withdrawn as of yet - assertEq( - stakerSharesBefore, - stakerSharesAfter + _withdrawAmount, - "test_queueWithdrawal_WithdrawStakeToken: staker shares not updated correctly" - ); - assertEq( - nonceBefore, - nonceAfter - 1, - "test_queueWithdrawal_WithdrawStakeToken: staker withdrawal nonce not updated" - ); - } - - function test_completeQueuedWithdrawal_ReceiveAsTokensMarkedFalse( - uint8 _operatorIndex, - uint256 _withdrawAmount - ) public { - test_queueWithdrawal_StakeTokenWithdraw(_operatorIndex, _withdrawAmount); - address operator = getOperatorAddress(_operatorIndex); - address stakerContract = delegationFaucet.getStaker(operator); - // assertion before values - uint256 sharesBefore = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 balanceBefore = stakeToken.balanceOf(address(stakerContract)); - - // Set completeQueuedWithdrawal params - IStrategy[] memory strategyArray = new IStrategy[](1); - IERC20[] memory tokensArray = new IERC20[](1); - uint256[] memory shareAmounts = new uint256[](1); - { - strategyArray[0] = stakeTokenStrat; - shareAmounts[0] = _withdrawAmount; - tokensArray[0] = stakeToken; - } - - IDelegationManager.Withdrawal memory queuedWithdrawal; - { - uint256 nonce = delegation.cumulativeWithdrawalsQueued(stakerContract); - - queuedWithdrawal = IDelegationManager.Withdrawal({ - strategies: strategyArray, - shares: shareAmounts, - staker: stakerContract, - withdrawer: stakerContract, - nonce: (nonce - 1), - startBlock: uint32(block.number), - delegatedTo: strategyManager.delegation().delegatedTo(stakerContract) - }); - } - cheats.expectEmit(true, true, true, true, address(delegation)); - emit WithdrawalCompleted(delegation.calculateWithdrawalRoot(queuedWithdrawal)); - uint256 middlewareTimesIndex = 0; - bool receiveAsTokens = false; - delegationFaucet.completeQueuedWithdrawal( - stakerContract, - queuedWithdrawal, - tokensArray, - middlewareTimesIndex, - receiveAsTokens - ); - // assertion after values - uint256 sharesAfter = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 balanceAfter = stakeToken.balanceOf(address(stakerContract)); - assertEq( - sharesBefore + _withdrawAmount, - sharesAfter, - "test_completeQueuedWithdrawal_ReceiveAsTokensMarkedFalse: staker shares not updated correctly" - ); - assertEq( - balanceBefore, - balanceAfter, - "test_completeQueuedWithdrawal_ReceiveAsTokensMarkedFalse: stakerContract balance not updated correctly" - ); - } - - function test_completeQueuedWithdrawal_ReceiveAsTokensMarkedTrue( - uint8 _operatorIndex, - uint256 _withdrawAmount - ) public { - test_queueWithdrawal_StakeTokenWithdraw(_operatorIndex, _withdrawAmount); - address operator = getOperatorAddress(_operatorIndex); - address stakerContract = delegationFaucet.getStaker(operator); - // assertion before values - uint256 sharesBefore = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 balanceBefore = stakeToken.balanceOf(address(stakerContract)); - - // Set completeQueuedWithdrawal params - IStrategy[] memory strategyArray = new IStrategy[](1); - IERC20[] memory tokensArray = new IERC20[](1); - uint256[] memory shareAmounts = new uint256[](1); - { - strategyArray[0] = stakeTokenStrat; - shareAmounts[0] = _withdrawAmount; - tokensArray[0] = stakeToken; - } - - IDelegationManager.Withdrawal memory queuedWithdrawal; - { - uint256 nonce = delegation.cumulativeWithdrawalsQueued(stakerContract); - - queuedWithdrawal = IDelegationManager.Withdrawal({ - strategies: strategyArray, - shares: shareAmounts, - staker: stakerContract, - withdrawer: stakerContract, - nonce: (nonce - 1), - startBlock: uint32(block.number), - delegatedTo: strategyManager.delegation().delegatedTo(stakerContract) - }); - } - cheats.expectEmit(true, true, true, true, address(delegation)); - emit WithdrawalCompleted(delegation.calculateWithdrawalRoot(queuedWithdrawal)); - uint256 middlewareTimesIndex = 0; - bool receiveAsTokens = true; - delegationFaucet.completeQueuedWithdrawal( - stakerContract, - queuedWithdrawal, - tokensArray, - middlewareTimesIndex, - receiveAsTokens - ); - // assertion after values - uint256 sharesAfter = strategyManager.stakerStrategyShares(stakerContract, stakeTokenStrat); - uint256 balanceAfter = stakeToken.balanceOf(address(stakerContract)); - assertEq( - sharesBefore, - sharesAfter, - "test_completeQueuedWithdrawal_ReceiveAsTokensMarkedTrue: staker shares not updated correctly" - ); - assertEq( - balanceBefore + _withdrawAmount, - balanceAfter, - "test_completeQueuedWithdrawal_ReceiveAsTokensMarkedTrue: stakerContract balance not updated correctly" - ); - } - - function test_transfer_TransfersERC20(uint8 _operatorIndex, address _to, uint256 _transferAmount) public { - cheats.assume(_operatorIndex < 15); - // Setup Operator - address operator = getOperatorAddress(_operatorIndex); - address stakerContract = delegationFaucet.getStaker(operator); - _registerOperator(operator); - - // Mint token to Staker, deposit minted amount into strategy, and delegate to operator - IDelegationManager.SignatureWithExpiry memory signatureWithExpiry; - delegationFaucet.mintDepositAndDelegate(operator, signatureWithExpiry, bytes32(0), DEFAULT_AMOUNT); - - ERC20PresetMinterPauser mockToken = new ERC20PresetMinterPauser("MockToken", "MTK"); - mockToken.mint(stakerContract, _transferAmount); - - uint256 stakerBalanceBefore = mockToken.balanceOf(stakerContract); - uint256 toBalanceBefore = mockToken.balanceOf(_to); - delegationFaucet.transfer(stakerContract, address(mockToken), _to, _transferAmount); - uint256 stakerBalanceAfter = mockToken.balanceOf(stakerContract); - uint256 toBalanceAfter = mockToken.balanceOf(_to); - assertEq( - stakerBalanceBefore, - stakerBalanceAfter + _transferAmount, - "test_transfer_TransfersERC20: staker balance not updated correctly" - ); - assertEq( - toBalanceBefore + _transferAmount, - toBalanceAfter, - "test_transfer_TransfersERC20: to balance not updated correctly" - ); - } - - function _registerOperator(address _operator) internal { - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: _operator, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - _testRegisterAsOperator(_operator, operatorDetails); - } - - function _setUpQueuedWithdrawalStructSingleStrat( - address staker, - address withdrawer, - IERC20 token, - IStrategy strategy, - uint256 shareAmount - ) - internal - view - returns ( - IDelegationManager.Withdrawal memory queuedWithdrawal, - IERC20[] memory tokensArray, - bytes32 withdrawalRoot - ) - { - IStrategy[] memory strategyArray = new IStrategy[](1); - tokensArray = new IERC20[](1); - uint256[] memory shareAmounts = new uint256[](1); - strategyArray[0] = strategy; - tokensArray[0] = token; - shareAmounts[0] = shareAmount; - queuedWithdrawal = IDelegationManager.Withdrawal({ - strategies: strategyArray, - shares: shareAmounts, - staker: staker, - withdrawer: withdrawer, - nonce: delegation.cumulativeWithdrawalsQueued(staker), - startBlock: uint32(block.number), - delegatedTo: strategyManager.delegation().delegatedTo(staker) - }); - // calculate the withdrawal root - withdrawalRoot = delegation.calculateWithdrawalRoot(queuedWithdrawal); - return (queuedWithdrawal, tokensArray, withdrawalRoot); - } -} diff --git a/src/test/DepositWithdraw.t.sol b/src/test/DepositWithdraw.t.sol index c9d48cfa2..fcecbc47f 100644 --- a/src/test/DepositWithdraw.t.sol +++ b/src/test/DepositWithdraw.t.sol @@ -1,503 +1,503 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "./EigenLayerTestHelper.t.sol"; -import "../contracts/core/StrategyManagerStorage.sol"; -import "./mocks/ERC20_OneWeiFeeOnTransfer.sol"; - -contract DepositWithdrawTests is EigenLayerTestHelper { - uint256[] public emptyUintArray; - - /** - * @notice Verifies that it is possible to deposit WETH - * @param amountToDeposit Fuzzed input for amount of WETH to deposit - */ - function testWethDeposit(uint256 amountToDeposit) public returns (uint256 amountDeposited) { - // if first deposit amount to base strategy is too small, it will revert. ignore that case here. - cheats.assume(amountToDeposit >= 1); - cheats.assume(amountToDeposit <= 1e38 - 1); - return _testDepositWeth(getOperatorAddress(0), amountToDeposit); - } - - - /// @notice deploys 'numStratsToAdd' strategies using '_testAddStrategy' and then deposits '1e18' to each of them from 'getOperatorAddress(0)' - /// @param numStratsToAdd is the number of strategies being added and deposited into - function testDepositStrategies(uint8 numStratsToAdd) public { - _testDepositStrategies(getOperatorAddress(0), 1e18, numStratsToAdd); - } - - /// @notice Verifies that it is possible to deposit eigen. - /// @param eigenToDeposit is amount of eigen to deposit into the eigen strategy - function testDepositEigen(uint96 eigenToDeposit) public { - // sanity check for inputs; keeps fuzzed tests from failing - cheats.assume(eigenToDeposit < eigenTotalSupply); - // if first deposit amount to base strategy is too small, it will revert. ignore that case here. - cheats.assume(eigenToDeposit >= 1); - _testDepositEigen(getOperatorAddress(0), eigenToDeposit); - } - - /** - * @notice Tries to deposit an unsupported token into an `StrategyBase` contract by calling `strategyManager.depositIntoStrategy`. - * Verifies that reversion occurs correctly. - */ - function testDepositUnsupportedToken() public { - IERC20 token = new ERC20PresetFixedSupply( - "badToken", - "BADTOKEN", - 100, - address(this) - ); - token.approve(address(strategyManager), type(uint256).max); - - // whitelist the strategy for deposit - cheats.startPrank(strategyManager.strategyWhitelister()); - IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); - _strategy[0] = wethStrat; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); - cheats.stopPrank(); - - cheats.expectRevert(bytes("StrategyBase.deposit: Can only deposit underlyingToken")); - strategyManager.depositIntoStrategy(wethStrat, token, 10); - } - - /** - * @notice Tries to deposit into an unsupported strategy by calling `strategyManager.depositIntoStrategy`. - * Verifies that reversion occurs correctly. - */ - function testDepositNonexistentStrategy(address nonexistentStrategy) public fuzzedAddress(nonexistentStrategy) { - // assume that the fuzzed address is not already a contract! - uint256 size; - assembly { - size := extcodesize(nonexistentStrategy) - } - cheats.assume(size == 0); - // check against calls from precompile addresses -- was getting fuzzy failures from this - cheats.assume(uint160(nonexistentStrategy) > 9); - - // harcoded input - uint256 testDepositAmount = 10; - - IERC20 token = new ERC20PresetFixedSupply( - "badToken", - "BADTOKEN", - 100, - address(this) - ); - token.approve(address(strategyManager), type(uint256).max); - - // whitelist the strategy for deposit - cheats.startPrank(strategyManager.strategyWhitelister()); - IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); - _strategy[0] = IStrategy(nonexistentStrategy); - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); - cheats.stopPrank(); - - cheats.expectRevert(); - strategyManager.depositIntoStrategy(IStrategy(nonexistentStrategy), token, testDepositAmount); - } - - /// @notice verify that trying to deposit an amount of zero will correctly revert - function testRevertOnZeroDeposit() public { - // whitelist the strategy for deposit - cheats.startPrank(strategyManager.strategyWhitelister()); - IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); - _strategy[0] = wethStrat; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); - cheats.stopPrank(); - - cheats.expectRevert(bytes("StrategyBase.deposit: newShares cannot be zero")); - strategyManager.depositIntoStrategy(wethStrat, weth, 0); - } - - - /** - * @notice Modified from existing _createQueuedWithdrawal, skips delegation and deposit steps so that we can isolate the withdrawal step - * @notice Creates a queued withdrawal from `staker`, queues a withdrawal using - * `delegation.queueWithdrawal(strategyIndexes, strategyArray, tokensArray, shareAmounts, withdrawer)` - * @notice After initiating a queued withdrawal, this test checks that `delegation.canCompleteQueuedWithdrawal` immediately returns the correct - * response depending on whether `staker` is delegated or not. - * @param staker The address to initiate the queued withdrawal - * @param amountToDeposit The amount of WETH to deposit - */ - function _createOnlyQueuedWithdrawal( - address staker, - bool /*registerAsOperator*/, - uint256 amountToDeposit, - IStrategy[] memory strategyArray, - IERC20[] memory /*tokensArray*/, - uint256[] memory shareAmounts, - uint256[] memory /*strategyIndexes*/, - address withdrawer - ) - internal returns(bytes32 withdrawalRoot, IDelegationManager.Withdrawal memory queuedWithdrawal) - { - require(amountToDeposit >= shareAmounts[0], "_createQueuedWithdrawal: sanity check failed"); - - queuedWithdrawal = IDelegationManager.Withdrawal({ - strategies: strategyArray, - shares: shareAmounts, - staker: staker, - withdrawer: withdrawer, - nonce: delegation.cumulativeWithdrawalsQueued(staker), - delegatedTo: delegation.delegatedTo(staker), - startBlock: uint32(block.number) - }); - - - IDelegationManager.QueuedWithdrawalParams[] memory params = new IDelegationManager.QueuedWithdrawalParams[](1); +// import "./EigenLayerTestHelper.t.sol"; +// import "../contracts/core/StrategyManagerStorage.sol"; +// import "./mocks/ERC20_OneWeiFeeOnTransfer.sol"; + +// contract DepositWithdrawTests is EigenLayerTestHelper { +// uint256[] public emptyUintArray; + +// /** +// * @notice Verifies that it is possible to deposit WETH +// * @param amountToDeposit Fuzzed input for amount of WETH to deposit +// */ +// function testWethDeposit(uint256 amountToDeposit) public returns (uint256 amountDeposited) { +// // if first deposit amount to base strategy is too small, it will revert. ignore that case here. +// cheats.assume(amountToDeposit >= 1); +// cheats.assume(amountToDeposit <= 1e38 - 1); +// return _testDepositWeth(getOperatorAddress(0), amountToDeposit); +// } + + +// /// @notice deploys 'numStratsToAdd' strategies using '_testAddStrategy' and then deposits '1e18' to each of them from 'getOperatorAddress(0)' +// /// @param numStratsToAdd is the number of strategies being added and deposited into +// function testDepositStrategies(uint8 numStratsToAdd) public { +// _testDepositStrategies(getOperatorAddress(0), 1e18, numStratsToAdd); +// } + +// /// @notice Verifies that it is possible to deposit eigen. +// /// @param eigenToDeposit is amount of eigen to deposit into the eigen strategy +// function testDepositEigen(uint96 eigenToDeposit) public { +// // sanity check for inputs; keeps fuzzed tests from failing +// cheats.assume(eigenToDeposit < eigenTotalSupply); +// // if first deposit amount to base strategy is too small, it will revert. ignore that case here. +// cheats.assume(eigenToDeposit >= 1); +// _testDepositEigen(getOperatorAddress(0), eigenToDeposit); +// } + +// /** +// * @notice Tries to deposit an unsupported token into an `StrategyBase` contract by calling `strategyManager.depositIntoStrategy`. +// * Verifies that reversion occurs correctly. +// */ +// function testDepositUnsupportedToken() public { +// IERC20 token = new ERC20PresetFixedSupply( +// "badToken", +// "BADTOKEN", +// 100, +// address(this) +// ); +// token.approve(address(strategyManager), type(uint256).max); + +// // whitelist the strategy for deposit +// cheats.startPrank(strategyManager.strategyWhitelister()); +// IStrategy[] memory _strategy = new IStrategy[](1); +// bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); +// _strategy[0] = wethStrat; +// strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); +// cheats.stopPrank(); + +// cheats.expectRevert(bytes("StrategyBase.deposit: Can only deposit underlyingToken")); +// strategyManager.depositIntoStrategy(wethStrat, token, 10); +// } + +// /** +// * @notice Tries to deposit into an unsupported strategy by calling `strategyManager.depositIntoStrategy`. +// * Verifies that reversion occurs correctly. +// */ +// function testDepositNonexistentStrategy(address nonexistentStrategy) public fuzzedAddress(nonexistentStrategy) { +// // assume that the fuzzed address is not already a contract! +// uint256 size; +// assembly { +// size := extcodesize(nonexistentStrategy) +// } +// cheats.assume(size == 0); +// // check against calls from precompile addresses -- was getting fuzzy failures from this +// cheats.assume(uint160(nonexistentStrategy) > 9); + +// // harcoded input +// uint256 testDepositAmount = 10; + +// IERC20 token = new ERC20PresetFixedSupply( +// "badToken", +// "BADTOKEN", +// 100, +// address(this) +// ); +// token.approve(address(strategyManager), type(uint256).max); + +// // whitelist the strategy for deposit +// cheats.startPrank(strategyManager.strategyWhitelister()); +// IStrategy[] memory _strategy = new IStrategy[](1); +// bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); +// _strategy[0] = IStrategy(nonexistentStrategy); +// strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); +// cheats.stopPrank(); + +// cheats.expectRevert(); +// strategyManager.depositIntoStrategy(IStrategy(nonexistentStrategy), token, testDepositAmount); +// } + +// /// @notice verify that trying to deposit an amount of zero will correctly revert +// function testRevertOnZeroDeposit() public { +// // whitelist the strategy for deposit +// cheats.startPrank(strategyManager.strategyWhitelister()); +// IStrategy[] memory _strategy = new IStrategy[](1); +// bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); +// _strategy[0] = wethStrat; +// strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); +// cheats.stopPrank(); + +// cheats.expectRevert(bytes("StrategyBase.deposit: newShares cannot be zero")); +// strategyManager.depositIntoStrategy(wethStrat, weth, 0); +// } + + +// /** +// * @notice Modified from existing _createQueuedWithdrawal, skips delegation and deposit steps so that we can isolate the withdrawal step +// * @notice Creates a queued withdrawal from `staker`, queues a withdrawal using +// * `delegation.queueWithdrawal(strategyIndexes, strategyArray, tokensArray, shareAmounts, withdrawer)` +// * @notice After initiating a queued withdrawal, this test checks that `delegation.canCompleteQueuedWithdrawal` immediately returns the correct +// * response depending on whether `staker` is delegated or not. +// * @param staker The address to initiate the queued withdrawal +// * @param amountToDeposit The amount of WETH to deposit +// */ +// function _createOnlyQueuedWithdrawal( +// address staker, +// bool /*registerAsOperator*/, +// uint256 amountToDeposit, +// IStrategy[] memory strategyArray, +// IERC20[] memory /*tokensArray*/, +// uint256[] memory shareAmounts, +// uint256[] memory /*strategyIndexes*/, +// address withdrawer +// ) +// internal returns(bytes32 withdrawalRoot, IDelegationManager.Withdrawal memory queuedWithdrawal) +// { +// require(amountToDeposit >= shareAmounts[0], "_createQueuedWithdrawal: sanity check failed"); + +// queuedWithdrawal = IDelegationManager.Withdrawal({ +// strategies: strategyArray, +// shares: shareAmounts, +// staker: staker, +// withdrawer: withdrawer, +// nonce: delegation.cumulativeWithdrawalsQueued(staker), +// delegatedTo: delegation.delegatedTo(staker), +// startBlock: uint32(block.number) +// }); + + +// IDelegationManager.QueuedWithdrawalParams[] memory params = new IDelegationManager.QueuedWithdrawalParams[](1); - params[0] = IDelegationManager.QueuedWithdrawalParams({ - strategies: strategyArray, - shares: shareAmounts, - withdrawer: withdrawer - }); - - bytes32[] memory withdrawalRoots = new bytes32[](1); - - //queue the withdrawal - cheats.startPrank(staker); - withdrawalRoots = delegation.queueWithdrawals(params); - cheats.stopPrank(); - return (withdrawalRoots[0], queuedWithdrawal); - } +// params[0] = IDelegationManager.QueuedWithdrawalParams({ +// strategies: strategyArray, +// shares: shareAmounts, +// withdrawer: withdrawer +// }); + +// bytes32[] memory withdrawalRoots = new bytes32[](1); + +// //queue the withdrawal +// cheats.startPrank(staker); +// withdrawalRoots = delegation.queueWithdrawals(params); +// cheats.stopPrank(); +// return (withdrawalRoots[0], queuedWithdrawal); +// } - function testFrontrunFirstDepositor(/*uint256 depositAmount*/) public { +// function testFrontrunFirstDepositor(/*uint256 depositAmount*/) public { - //setup addresses - address attacker = address(100); - address user = address(200); - - //give 2 ether to attacker and user - weth.transfer(attacker,2 ether); - weth.transfer(user,2 ether); - - //attacker FRONTRUN: deposit 1 wei (receive 1 share) - StrategyManager _strategyManager = _whitelistStrategy(strategyManager, wethStrat); - - cheats.startPrank(attacker); - weth.approve(address(strategyManager), type(uint256).max); - _strategyManager.depositIntoStrategy(wethStrat, weth, 1 wei); - cheats.stopPrank(); - - //attacker FRONTRUN: transfer 1 ether into strategy directly to manipulate the value of shares - cheats.prank(attacker); - weth.transfer(address(wethStrat),1 ether); - - //user deposits 2 eth into strategy - only gets 1 share due to rounding - cheats.startPrank(user); - weth.approve(address(_strategyManager), type(uint256).max); - _strategyManager.depositIntoStrategy(wethStrat, weth, 2 ether); - cheats.stopPrank(); - - //attacker deposited 1 ether and 1 wei - received 1 share - //user deposited 2 ether - received X shares - //user has lost 0.5 ether? - (, uint256[] memory shares) = _strategyManager.getDeposits(attacker); - uint256 attackerValueWeth = wethStrat.sharesToUnderlyingView(shares[0]); - require(attackerValueWeth >= (1), "attacker got zero shares"); - - (, shares) = _strategyManager.getDeposits(user); - uint256 userValueWeth = wethStrat.sharesToUnderlyingView(shares[0]); - require(userValueWeth >= (1900000000000000000), "user has lost more than 0.1 eth from frontrunning"); - - uint256 attackerLossesWeth = (2 ether + 1 wei) - attackerValueWeth; - uint256 userLossesWeth = 2 ether - userValueWeth; - require(attackerLossesWeth > userLossesWeth, "griefing attack deals more damage than cost"); - } - - // fuzzed amounts user uint96's to be more realistic with amounts - function testFrontrunFirstDepositorFuzzed(uint96 firstDepositAmount, uint96 donationAmount, uint96 secondDepositAmount) public { - // want to only use nonzero amounts or else we'll get reverts - cheats.assume(firstDepositAmount != 0 && secondDepositAmount != 0); - - // setup addresses - address attacker = address(100); - address user = address(200); - - // attacker makes first deposit - _testDepositToStrategy(attacker, firstDepositAmount, weth, wethStrat); - - // transfer tokens into strategy directly to manipulate the value of shares - weth.transfer(address(wethStrat), donationAmount); - - // filter out calls that would revert for minting zero shares - cheats.assume(wethStrat.underlyingToShares(secondDepositAmount) != 0); - - // user makes 2nd deposit into strategy - gets diminished shares due to rounding - _testDepositToStrategy(user, secondDepositAmount, weth, wethStrat); - - // check for griefing - (, uint256[] memory shares) = strategyManager.getDeposits(attacker); - uint256 attackerValueWeth = wethStrat.sharesToUnderlyingView(shares[0]); - (, shares) = strategyManager.getDeposits(user); - uint256 userValueWeth = wethStrat.sharesToUnderlyingView(shares[0]); - - uint256 attackerCost = uint256(firstDepositAmount) + uint256(donationAmount); - require(attackerCost >= attackerValueWeth, "attacker gained value?"); - // uint256 attackerLossesWeth = attackerValueWeth > attackerCost ? 0 : (attackerCost - attackerValueWeth); - uint256 attackerLossesWeth = attackerCost - attackerValueWeth; - uint256 userLossesWeth = secondDepositAmount - userValueWeth; - - emit log_named_uint("attackerLossesWeth", attackerLossesWeth); - emit log_named_uint("userLossesWeth", userLossesWeth); - - // use '+1' here to account for rounding. given the attack will cost ETH in the form of gas, this is fine. - require(attackerLossesWeth + 1 >= userLossesWeth, "griefing attack deals more damage than cost"); - } - - - function testDepositTokenWithOneWeiFeeOnTransfer(address sender, uint64 amountToDeposit) public fuzzedAddress(sender) { - cheats.assume(amountToDeposit != 0); - - IERC20 underlyingToken; - - { - uint256 initSupply = 1e50; - address initOwner = address(this); - ERC20_OneWeiFeeOnTransfer oneWeiFeeOnTransferToken = new ERC20_OneWeiFeeOnTransfer(initSupply, initOwner); - underlyingToken = IERC20(address(oneWeiFeeOnTransferToken)); - } - - // need to transfer extra here because otherwise the `sender` won't have enough tokens - underlyingToken.transfer(sender, 1000); - - IStrategy oneWeiFeeOnTransferTokenStrategy = StrategyBase( - address( - new TransparentUpgradeableProxy( - address(baseStrategyImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector(StrategyBase.initialize.selector, underlyingToken, eigenLayerPauserReg) - ) - ) - ); - - // REMAINDER OF CODE ADAPTED FROM `_testDepositToStrategy` - // _testDepositToStrategy(sender, amountToDeposit, underlyingToken, oneWeiFeeOnTransferTokenStrategy); - - // whitelist the strategy for deposit, in case it wasn't before - { - cheats.startPrank(strategyManager.strategyWhitelister()); - IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); - _strategy[0] = oneWeiFeeOnTransferTokenStrategy; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); - cheats.stopPrank(); - } +// //setup addresses +// address attacker = address(100); +// address user = address(200); + +// //give 2 ether to attacker and user +// weth.transfer(attacker,2 ether); +// weth.transfer(user,2 ether); + +// //attacker FRONTRUN: deposit 1 wei (receive 1 share) +// StrategyManager _strategyManager = _whitelistStrategy(strategyManager, wethStrat); + +// cheats.startPrank(attacker); +// weth.approve(address(strategyManager), type(uint256).max); +// _strategyManager.depositIntoStrategy(wethStrat, weth, 1 wei); +// cheats.stopPrank(); + +// //attacker FRONTRUN: transfer 1 ether into strategy directly to manipulate the value of shares +// cheats.prank(attacker); +// weth.transfer(address(wethStrat),1 ether); + +// //user deposits 2 eth into strategy - only gets 1 share due to rounding +// cheats.startPrank(user); +// weth.approve(address(_strategyManager), type(uint256).max); +// _strategyManager.depositIntoStrategy(wethStrat, weth, 2 ether); +// cheats.stopPrank(); + +// //attacker deposited 1 ether and 1 wei - received 1 share +// //user deposited 2 ether - received X shares +// //user has lost 0.5 ether? +// (, uint256[] memory shares) = _strategyManager.getDeposits(attacker); +// uint256 attackerValueWeth = wethStrat.sharesToUnderlyingView(shares[0]); +// require(attackerValueWeth >= (1), "attacker got zero shares"); + +// (, shares) = _strategyManager.getDeposits(user); +// uint256 userValueWeth = wethStrat.sharesToUnderlyingView(shares[0]); +// require(userValueWeth >= (1900000000000000000), "user has lost more than 0.1 eth from frontrunning"); + +// uint256 attackerLossesWeth = (2 ether + 1 wei) - attackerValueWeth; +// uint256 userLossesWeth = 2 ether - userValueWeth; +// require(attackerLossesWeth > userLossesWeth, "griefing attack deals more damage than cost"); +// } + +// // fuzzed amounts user uint96's to be more realistic with amounts +// function testFrontrunFirstDepositorFuzzed(uint96 firstDepositAmount, uint96 donationAmount, uint96 secondDepositAmount) public { +// // want to only use nonzero amounts or else we'll get reverts +// cheats.assume(firstDepositAmount != 0 && secondDepositAmount != 0); + +// // setup addresses +// address attacker = address(100); +// address user = address(200); + +// // attacker makes first deposit +// _testDepositToStrategy(attacker, firstDepositAmount, weth, wethStrat); + +// // transfer tokens into strategy directly to manipulate the value of shares +// weth.transfer(address(wethStrat), donationAmount); + +// // filter out calls that would revert for minting zero shares +// cheats.assume(wethStrat.underlyingToShares(secondDepositAmount) != 0); + +// // user makes 2nd deposit into strategy - gets diminished shares due to rounding +// _testDepositToStrategy(user, secondDepositAmount, weth, wethStrat); + +// // check for griefing +// (, uint256[] memory shares) = strategyManager.getDeposits(attacker); +// uint256 attackerValueWeth = wethStrat.sharesToUnderlyingView(shares[0]); +// (, shares) = strategyManager.getDeposits(user); +// uint256 userValueWeth = wethStrat.sharesToUnderlyingView(shares[0]); + +// uint256 attackerCost = uint256(firstDepositAmount) + uint256(donationAmount); +// require(attackerCost >= attackerValueWeth, "attacker gained value?"); +// // uint256 attackerLossesWeth = attackerValueWeth > attackerCost ? 0 : (attackerCost - attackerValueWeth); +// uint256 attackerLossesWeth = attackerCost - attackerValueWeth; +// uint256 userLossesWeth = secondDepositAmount - userValueWeth; + +// emit log_named_uint("attackerLossesWeth", attackerLossesWeth); +// emit log_named_uint("userLossesWeth", userLossesWeth); + +// // use '+1' here to account for rounding. given the attack will cost ETH in the form of gas, this is fine. +// require(attackerLossesWeth + 1 >= userLossesWeth, "griefing attack deals more damage than cost"); +// } + + +// function testDepositTokenWithOneWeiFeeOnTransfer(address sender, uint64 amountToDeposit) public fuzzedAddress(sender) { +// cheats.assume(amountToDeposit != 0); + +// IERC20 underlyingToken; + +// { +// uint256 initSupply = 1e50; +// address initOwner = address(this); +// ERC20_OneWeiFeeOnTransfer oneWeiFeeOnTransferToken = new ERC20_OneWeiFeeOnTransfer(initSupply, initOwner); +// underlyingToken = IERC20(address(oneWeiFeeOnTransferToken)); +// } + +// // need to transfer extra here because otherwise the `sender` won't have enough tokens +// underlyingToken.transfer(sender, 1000); + +// IStrategy oneWeiFeeOnTransferTokenStrategy = StrategyBase( +// address( +// new TransparentUpgradeableProxy( +// address(baseStrategyImplementation), +// address(eigenLayerProxyAdmin), +// abi.encodeWithSelector(StrategyBase.initialize.selector, underlyingToken, eigenLayerPauserReg) +// ) +// ) +// ); + +// // REMAINDER OF CODE ADAPTED FROM `_testDepositToStrategy` +// // _testDepositToStrategy(sender, amountToDeposit, underlyingToken, oneWeiFeeOnTransferTokenStrategy); + +// // whitelist the strategy for deposit, in case it wasn't before +// { +// cheats.startPrank(strategyManager.strategyWhitelister()); +// IStrategy[] memory _strategy = new IStrategy[](1); +// bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); +// _strategy[0] = oneWeiFeeOnTransferTokenStrategy; +// strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); +// cheats.stopPrank(); +// } - uint256 operatorSharesBefore = strategyManager.stakerStrategyShares(sender, oneWeiFeeOnTransferTokenStrategy); - // check the expected output - uint256 expectedSharesOut = oneWeiFeeOnTransferTokenStrategy.underlyingToShares(amountToDeposit); - - underlyingToken.transfer(sender, amountToDeposit); - cheats.startPrank(sender); - underlyingToken.approve(address(strategyManager), type(uint256).max); - strategyManager.depositIntoStrategy(oneWeiFeeOnTransferTokenStrategy, underlyingToken, amountToDeposit); - - //check if depositor has never used this strat, that it is added correctly to stakerStrategyList array. - if (operatorSharesBefore == 0) { - // check that strategy is appropriately added to dynamic array of all of sender's strategies - assertTrue( - strategyManager.stakerStrategyList(sender, strategyManager.stakerStrategyListLength(sender) - 1) - == oneWeiFeeOnTransferTokenStrategy, - "_testDepositToStrategy: stakerStrategyList array updated incorrectly" - ); - } +// uint256 operatorSharesBefore = strategyManager.stakerStrategyShares(sender, oneWeiFeeOnTransferTokenStrategy); +// // check the expected output +// uint256 expectedSharesOut = oneWeiFeeOnTransferTokenStrategy.underlyingToShares(amountToDeposit); + +// underlyingToken.transfer(sender, amountToDeposit); +// cheats.startPrank(sender); +// underlyingToken.approve(address(strategyManager), type(uint256).max); +// strategyManager.depositIntoStrategy(oneWeiFeeOnTransferTokenStrategy, underlyingToken, amountToDeposit); + +// //check if depositor has never used this strat, that it is added correctly to stakerStrategyList array. +// if (operatorSharesBefore == 0) { +// // check that strategy is appropriately added to dynamic array of all of sender's strategies +// assertTrue( +// strategyManager.stakerStrategyList(sender, strategyManager.stakerStrategyListLength(sender) - 1) +// == oneWeiFeeOnTransferTokenStrategy, +// "_testDepositToStrategy: stakerStrategyList array updated incorrectly" +// ); +// } - // check that the shares out match the expected amount out - // the actual transfer in will be lower by 1 wei than expected due to stETH's internal rounding - // to account for this we check approximate rather than strict equivalence here - { - uint256 actualSharesOut = strategyManager.stakerStrategyShares(sender, oneWeiFeeOnTransferTokenStrategy) - operatorSharesBefore; - require((actualSharesOut * 1000) / expectedSharesOut > 998, "too few shares"); - require((actualSharesOut * 1000) / expectedSharesOut < 1002, "too many shares"); - - // additional sanity check for deposit not increasing in value - require(oneWeiFeeOnTransferTokenStrategy.sharesToUnderlying(actualSharesOut) <= amountToDeposit, "value cannot have increased"); - } - cheats.stopPrank(); - } - - /// @notice Shadow-forks mainnet and tests depositing stETH tokens into a "StrategyBase" contract. - function testForkMainnetDepositSteth() public { - // hard-coded inputs - // address sender = address(this); - uint64 amountToDeposit = 1e12; - - // shadow-fork mainnet - try cheats.createFork("mainnet") returns (uint256 forkId) { - cheats.selectFork(forkId); - // If RPC_MAINNET ENV not set, default to this mainnet RPC endpoint - } catch { - cheats.createSelectFork("https://eth.llamarpc.com"); - } - - // cast mainnet stETH address to IERC20 interface - // IERC20 steth = IERC20(0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84); - IERC20 underlyingToken = IERC20(0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84); - - // deploy necessary contracts on the shadow-forked network - // deploy proxy admin for ability to upgrade proxy contracts - eigenLayerProxyAdmin = new ProxyAdmin(); - //deploy pauser registry - address[] memory pausers = new address[](1); - pausers[0] = pauser; - eigenLayerPauserReg = new PauserRegistry(pausers, unpauser); - /** - * First, deploy upgradeable proxy contracts that **will point** to the implementations. Since the implementation contracts are - * not yet deployed, we give these proxies an empty contract as the initial implementation, to act as if they have no code. - */ - emptyContract = new EmptyContract(); - delegation = DelegationManager( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - strategyManager = StrategyManager( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - slasher = Slasher( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - eigenPodManager = EigenPodManager( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - - ethPOSDeposit = new ETHPOSDepositMock(); - pod = new EigenPod(ethPOSDeposit, eigenPodManager, GOERLI_GENESIS_TIME); - - eigenPodBeacon = new UpgradeableBeacon(address(pod)); - - // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs - DelegationManager delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); - StrategyManager strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher); - Slasher slasherImplementation = new Slasher(strategyManager, delegation); - EigenPodManager eigenPodManagerImplementation = new EigenPodManager(ethPOSDeposit, eigenPodBeacon, strategyManager, slasher, delegation); - // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(delegation))), - address(delegationImplementation), - abi.encodeWithSelector( - DelegationManager.initialize.selector, - eigenLayerReputedMultisig, - eigenLayerPauserReg, - 0 /*initialPausedStatus*/, - minWithdrawalDelayBlocks, - initializeStrategiesToSetDelayBlocks, - initializeWithdrawalDelayBlocks - ) - ); - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(strategyManager))), - address(strategyManagerImplementation), - abi.encodeWithSelector( - StrategyManager.initialize.selector, - eigenLayerReputedMultisig, - eigenLayerReputedMultisig, - eigenLayerPauserReg, - 0/*initialPausedStatus*/ - ) - ); - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(slasher))), - address(slasherImplementation), - abi.encodeWithSelector( - Slasher.initialize.selector, - eigenLayerReputedMultisig, - eigenLayerPauserReg, - 0/*initialPausedStatus*/ - ) - ); - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(eigenPodManager))), - address(eigenPodManagerImplementation), - abi.encodeWithSelector( - EigenPodManager.initialize.selector, - eigenLayerReputedMultisig, - eigenLayerPauserReg, - 0/*initialPausedStatus*/ - ) - ); - - // cheat a bunch of ETH to this address - cheats.deal(address(this), 1e20); - // deposit a huge amount of ETH to get ample stETH - { - (bool success, bytes memory returnData) = address(underlyingToken).call{value: 1e20}(""); - require(success, "depositing stETH failed"); - returnData; - } - - // deploy StrategyBase contract implementation, then create upgradeable proxy that points to implementation and initialize it - baseStrategyImplementation = new StrategyBase(strategyManager); - IStrategy stethStrategy = StrategyBase( - address( - new TransparentUpgradeableProxy( - address(baseStrategyImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector(StrategyBase.initialize.selector, underlyingToken, eigenLayerPauserReg) - ) - ) - ); - - // REMAINDER OF CODE ADAPTED FROM `_testDepositToStrategy` - // _testDepositToStrategy(sender, amountToDeposit, underlyingToken, stethStrategy); - - // whitelist the strategy for deposit, in case it wasn't before - { - cheats.startPrank(strategyManager.strategyWhitelister()); - IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); - _strategy[0] = stethStrategy; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); - cheats.stopPrank(); - } - - uint256 operatorSharesBefore = strategyManager.stakerStrategyShares(address(this), stethStrategy); - // check the expected output - uint256 expectedSharesOut = stethStrategy.underlyingToShares(amountToDeposit); - - underlyingToken.transfer(address(this), amountToDeposit); - cheats.startPrank(address(this)); - underlyingToken.approve(address(strategyManager), type(uint256).max); - strategyManager.depositIntoStrategy(stethStrategy, underlyingToken, amountToDeposit); - - //check if depositor has never used this strat, that it is added correctly to stakerStrategyList array. - if (operatorSharesBefore == 0) { - // check that strategy is appropriately added to dynamic array of all of sender's strategies - assertTrue( - strategyManager.stakerStrategyList(address(this), strategyManager.stakerStrategyListLength(address(this)) - 1) - == stethStrategy, - "_testDepositToStrategy: stakerStrategyList array updated incorrectly" - ); - } +// // check that the shares out match the expected amount out +// // the actual transfer in will be lower by 1 wei than expected due to stETH's internal rounding +// // to account for this we check approximate rather than strict equivalence here +// { +// uint256 actualSharesOut = strategyManager.stakerStrategyShares(sender, oneWeiFeeOnTransferTokenStrategy) - operatorSharesBefore; +// require((actualSharesOut * 1000) / expectedSharesOut > 998, "too few shares"); +// require((actualSharesOut * 1000) / expectedSharesOut < 1002, "too many shares"); + +// // additional sanity check for deposit not increasing in value +// require(oneWeiFeeOnTransferTokenStrategy.sharesToUnderlying(actualSharesOut) <= amountToDeposit, "value cannot have increased"); +// } +// cheats.stopPrank(); +// } + +// /// @notice Shadow-forks mainnet and tests depositing stETH tokens into a "StrategyBase" contract. +// function testForkMainnetDepositSteth() public { +// // hard-coded inputs +// // address sender = address(this); +// uint64 amountToDeposit = 1e12; + +// // shadow-fork mainnet +// try cheats.createFork("mainnet") returns (uint256 forkId) { +// cheats.selectFork(forkId); +// // If RPC_MAINNET ENV not set, default to this mainnet RPC endpoint +// } catch { +// cheats.createSelectFork("https://eth.llamarpc.com"); +// } + +// // cast mainnet stETH address to IERC20 interface +// // IERC20 steth = IERC20(0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84); +// IERC20 underlyingToken = IERC20(0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84); + +// // deploy necessary contracts on the shadow-forked network +// // deploy proxy admin for ability to upgrade proxy contracts +// eigenLayerProxyAdmin = new ProxyAdmin(); +// //deploy pauser registry +// address[] memory pausers = new address[](1); +// pausers[0] = pauser; +// eigenLayerPauserReg = new PauserRegistry(pausers, unpauser); +// /** +// * First, deploy upgradeable proxy contracts that **will point** to the implementations. Since the implementation contracts are +// * not yet deployed, we give these proxies an empty contract as the initial implementation, to act as if they have no code. +// */ +// emptyContract = new EmptyContract(); +// delegation = DelegationManager( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); +// strategyManager = StrategyManager( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); +// slasher = Slasher( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); +// eigenPodManager = EigenPodManager( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); + +// ethPOSDeposit = new ETHPOSDepositMock(); +// pod = new EigenPod(ethPOSDeposit, eigenPodManager, GOERLI_GENESIS_TIME); + +// eigenPodBeacon = new UpgradeableBeacon(address(pod)); + +// // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs +// DelegationManager delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); +// StrategyManager strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher); +// Slasher slasherImplementation = new Slasher(strategyManager, delegation); +// EigenPodManager eigenPodManagerImplementation = new EigenPodManager(ethPOSDeposit, eigenPodBeacon, strategyManager, slasher, delegation); +// // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(delegation))), +// address(delegationImplementation), +// abi.encodeWithSelector( +// DelegationManager.initialize.selector, +// eigenLayerReputedMultisig, +// eigenLayerPauserReg, +// 0 /*initialPausedStatus*/, +// minWithdrawalDelayBlocks, +// initializeStrategiesToSetDelayBlocks, +// initializeWithdrawalDelayBlocks +// ) +// ); +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(strategyManager))), +// address(strategyManagerImplementation), +// abi.encodeWithSelector( +// StrategyManager.initialize.selector, +// eigenLayerReputedMultisig, +// eigenLayerReputedMultisig, +// eigenLayerPauserReg, +// 0/*initialPausedStatus*/ +// ) +// ); +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(slasher))), +// address(slasherImplementation), +// abi.encodeWithSelector( +// Slasher.initialize.selector, +// eigenLayerReputedMultisig, +// eigenLayerPauserReg, +// 0/*initialPausedStatus*/ +// ) +// ); +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(eigenPodManager))), +// address(eigenPodManagerImplementation), +// abi.encodeWithSelector( +// EigenPodManager.initialize.selector, +// eigenLayerReputedMultisig, +// eigenLayerPauserReg, +// 0/*initialPausedStatus*/ +// ) +// ); + +// // cheat a bunch of ETH to this address +// cheats.deal(address(this), 1e20); +// // deposit a huge amount of ETH to get ample stETH +// { +// (bool success, bytes memory returnData) = address(underlyingToken).call{value: 1e20}(""); +// require(success, "depositing stETH failed"); +// returnData; +// } + +// // deploy StrategyBase contract implementation, then create upgradeable proxy that points to implementation and initialize it +// baseStrategyImplementation = new StrategyBase(strategyManager); +// IStrategy stethStrategy = StrategyBase( +// address( +// new TransparentUpgradeableProxy( +// address(baseStrategyImplementation), +// address(eigenLayerProxyAdmin), +// abi.encodeWithSelector(StrategyBase.initialize.selector, underlyingToken, eigenLayerPauserReg) +// ) +// ) +// ); + +// // REMAINDER OF CODE ADAPTED FROM `_testDepositToStrategy` +// // _testDepositToStrategy(sender, amountToDeposit, underlyingToken, stethStrategy); + +// // whitelist the strategy for deposit, in case it wasn't before +// { +// cheats.startPrank(strategyManager.strategyWhitelister()); +// IStrategy[] memory _strategy = new IStrategy[](1); +// bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); +// _strategy[0] = stethStrategy; +// strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); +// cheats.stopPrank(); +// } + +// uint256 operatorSharesBefore = strategyManager.stakerStrategyShares(address(this), stethStrategy); +// // check the expected output +// uint256 expectedSharesOut = stethStrategy.underlyingToShares(amountToDeposit); + +// underlyingToken.transfer(address(this), amountToDeposit); +// cheats.startPrank(address(this)); +// underlyingToken.approve(address(strategyManager), type(uint256).max); +// strategyManager.depositIntoStrategy(stethStrategy, underlyingToken, amountToDeposit); + +// //check if depositor has never used this strat, that it is added correctly to stakerStrategyList array. +// if (operatorSharesBefore == 0) { +// // check that strategy is appropriately added to dynamic array of all of sender's strategies +// assertTrue( +// strategyManager.stakerStrategyList(address(this), strategyManager.stakerStrategyListLength(address(this)) - 1) +// == stethStrategy, +// "_testDepositToStrategy: stakerStrategyList array updated incorrectly" +// ); +// } - // check that the shares out match the expected amount out - // the actual transfer in will be lower by 1-2 wei than expected due to stETH's internal rounding - // to account for this we check approximate rather than strict equivalence here - { - uint256 actualSharesOut = strategyManager.stakerStrategyShares(address(this), stethStrategy) - operatorSharesBefore; - require(actualSharesOut >= expectedSharesOut, "too few shares"); - require((actualSharesOut * 1000) / expectedSharesOut < 1003, "too many shares"); - - // additional sanity check for deposit not increasing in value - require(stethStrategy.sharesToUnderlying(actualSharesOut) <= amountToDeposit, "value cannot have increased"); - // slippage check - require((stethStrategy.sharesToUnderlying(actualSharesOut) * 1e6) / amountToDeposit >= (1e6 - 1), "bad slippage on first deposit"); - } - cheats.stopPrank(); - } - - function _whitelistStrategy(StrategyManager _strategyManager, StrategyBase _strategyBase) internal returns(StrategyManager) { - // whitelist the strategy for deposit - cheats.startPrank(strategyManager.strategyWhitelister()); - IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); - _strategy[0] = IStrategy(_strategyBase); - _strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); - cheats.stopPrank(); - - return _strategyManager; - } -} +// // check that the shares out match the expected amount out +// // the actual transfer in will be lower by 1-2 wei than expected due to stETH's internal rounding +// // to account for this we check approximate rather than strict equivalence here +// { +// uint256 actualSharesOut = strategyManager.stakerStrategyShares(address(this), stethStrategy) - operatorSharesBefore; +// require(actualSharesOut >= expectedSharesOut, "too few shares"); +// require((actualSharesOut * 1000) / expectedSharesOut < 1003, "too many shares"); + +// // additional sanity check for deposit not increasing in value +// require(stethStrategy.sharesToUnderlying(actualSharesOut) <= amountToDeposit, "value cannot have increased"); +// // slippage check +// require((stethStrategy.sharesToUnderlying(actualSharesOut) * 1e6) / amountToDeposit >= (1e6 - 1), "bad slippage on first deposit"); +// } +// cheats.stopPrank(); +// } + +// function _whitelistStrategy(StrategyManager _strategyManager, StrategyBase _strategyBase) internal returns(StrategyManager) { +// // whitelist the strategy for deposit +// cheats.startPrank(strategyManager.strategyWhitelister()); +// IStrategy[] memory _strategy = new IStrategy[](1); +// bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); +// _strategy[0] = IStrategy(_strategyBase); +// _strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); +// cheats.stopPrank(); + +// return _strategyManager; +// } +// } \ No newline at end of file diff --git a/src/test/EigenLayerDeployer.t.sol b/src/test/EigenLayerDeployer.t.sol index 5550fc6f7..09989bde8 100644 --- a/src/test/EigenLayerDeployer.t.sol +++ b/src/test/EigenLayerDeployer.t.sol @@ -1,272 +1,279 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; -import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; -import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; -import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; - -import "../contracts/interfaces/IDelegationManager.sol"; -import "../contracts/core/DelegationManager.sol"; - -import "../contracts/interfaces/IETHPOSDeposit.sol"; - -import "../contracts/core/StrategyManager.sol"; -import "../contracts/strategies/StrategyBase.sol"; -import "../contracts/core/Slasher.sol"; - -import "../contracts/pods/EigenPod.sol"; -import "../contracts/pods/EigenPodManager.sol"; - -import "../contracts/permissions/PauserRegistry.sol"; - -import "./utils/Operators.sol"; - -import "./mocks/LiquidStakingToken.sol"; -import "./mocks/EmptyContract.sol"; -import "./mocks/ETHDepositMock.sol"; - -import "forge-std/Test.sol"; - -contract EigenLayerDeployer is Operators { - Vm cheats = Vm(HEVM_ADDRESS); - - // EigenLayer contracts - ProxyAdmin public eigenLayerProxyAdmin; - PauserRegistry public eigenLayerPauserReg; - - Slasher public slasher; - DelegationManager public delegation; - StrategyManager public strategyManager; - EigenPodManager public eigenPodManager; - IEigenPod public pod; - IETHPOSDeposit public ethPOSDeposit; - IBeacon public eigenPodBeacon; - - // testing/mock contracts - IERC20 public eigenToken; - IERC20 public weth; - StrategyBase public wethStrat; - StrategyBase public eigenStrat; - StrategyBase public baseStrategyImplementation; - EmptyContract public emptyContract; - - mapping(uint256 => IStrategy) public strategies; - - //from testing seed phrase - bytes32 priv_key_0 = 0x1234567812345678123456781234567812345678123456781234567812345678; - bytes32 priv_key_1 = 0x1234567812345678123456781234567812345698123456781234567812348976; - - //strategy indexes for undelegation (see commitUndelegation function) - uint256[] public strategyIndexes; - address[2] public stakers; - address sample_registrant = cheats.addr(436364636); - - address[] public slashingContracts; - - uint256 wethInitialSupply = 10e50; - uint256 public constant eigenTotalSupply = 1000e18; - uint256 nonce = 69; - uint256 public gasLimit = 750000; - IStrategy[] public initializeStrategiesToSetDelayBlocks; - uint256[] public initializeWithdrawalDelayBlocks; - uint256 minWithdrawalDelayBlocks = 0; - uint32 PARTIAL_WITHDRAWAL_FRAUD_PROOF_PERIOD_BLOCKS = 7 days / 12 seconds; - uint256 REQUIRED_BALANCE_WEI = 32 ether; - uint64 MAX_PARTIAL_WTIHDRAWAL_AMOUNT_GWEI = 1 ether / 1e9; - uint64 GOERLI_GENESIS_TIME = 1616508000; - - address pauser; - address unpauser; - address theMultiSig = address(420); - address operator = address(0x4206904396bF2f8b173350ADdEc5007A52664293); //sk: e88d9d864d5d731226020c5d2f02b62a4ce2a4534a39c225d32d3db795f83319 - address acct_0 = cheats.addr(uint256(priv_key_0)); - address acct_1 = cheats.addr(uint256(priv_key_1)); - address _challenger = address(0x6966904396bF2f8b173350bCcec5007A52669873); - address public eigenLayerReputedMultisig = address(this); - - address eigenLayerProxyAdminAddress; - address eigenLayerPauserRegAddress; - address slasherAddress; - address delegationAddress; - address strategyManagerAddress; - address eigenPodManagerAddress; - address podAddress; - address eigenPodBeaconAddress; - address emptyContractAddress; - address operationsMultisig; - address executorMultisig; - - - // addresses excluded from fuzzing due to abnormal behavior. TODO: @Sidu28 define this better and give it a clearer name - mapping(address => bool) fuzzedAddressMapping; - - //ensures that a passed in address is not set to true in the fuzzedAddressMapping - modifier fuzzedAddress(address addr) virtual { - cheats.assume(fuzzedAddressMapping[addr] == false); - _; - } - - modifier cannotReinit() { - cheats.expectRevert(bytes("Initializable: contract is already initialized")); - _; - } - - //performs basic deployment before each test - function setUp() public virtual { - try vm.envUint("CHAIN_ID") returns (uint256 chainId) { - if (chainId == 31337) { - _deployEigenLayerContractsLocal(); - } - // If CHAIN_ID ENV is not set, assume local deployment on 31337 - } catch { - _deployEigenLayerContractsLocal(); - } - - fuzzedAddressMapping[address(0)] = true; - fuzzedAddressMapping[address(eigenLayerProxyAdmin)] = true; - fuzzedAddressMapping[address(strategyManager)] = true; - fuzzedAddressMapping[address(eigenPodManager)] = true; - fuzzedAddressMapping[address(delegation)] = true; - fuzzedAddressMapping[address(slasher)] = true; - } - - function _deployEigenLayerContractsLocal() internal { - pauser = address(69); - unpauser = address(489); - // deploy proxy admin for ability to upgrade proxy contracts - eigenLayerProxyAdmin = new ProxyAdmin(); - - //deploy pauser registry - address[] memory pausers = new address[](1); - pausers[0] = pauser; - eigenLayerPauserReg = new PauserRegistry(pausers, unpauser); - - /** - * First, deploy upgradeable proxy contracts that **will point** to the implementations. Since the implementation contracts are - * not yet deployed, we give these proxies an empty contract as the initial implementation, to act as if they have no code. - */ - emptyContract = new EmptyContract(); - delegation = DelegationManager( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - strategyManager = StrategyManager( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - slasher = Slasher( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - eigenPodManager = EigenPodManager( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - ethPOSDeposit = new ETHPOSDepositMock(); - pod = new EigenPod( - ethPOSDeposit, - eigenPodManager, - GOERLI_GENESIS_TIME - ); - - eigenPodBeacon = new UpgradeableBeacon(address(pod)); - - // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs - DelegationManager delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); - StrategyManager strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher); - Slasher slasherImplementation = new Slasher(strategyManager, delegation); - EigenPodManager eigenPodManagerImplementation = new EigenPodManager( - ethPOSDeposit, - eigenPodBeacon, - strategyManager, - slasher, - delegation - ); - - // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(delegation))), - address(delegationImplementation), - abi.encodeWithSelector( - DelegationManager.initialize.selector, - eigenLayerReputedMultisig, - eigenLayerPauserReg, - 0 /*initialPausedStatus*/, - minWithdrawalDelayBlocks, - initializeStrategiesToSetDelayBlocks, - initializeWithdrawalDelayBlocks - ) - ); - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(strategyManager))), - address(strategyManagerImplementation), - abi.encodeWithSelector( - StrategyManager.initialize.selector, - eigenLayerReputedMultisig, - eigenLayerReputedMultisig, - eigenLayerPauserReg, - 0 /*initialPausedStatus*/ - ) - ); - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(slasher))), - address(slasherImplementation), - abi.encodeWithSelector( - Slasher.initialize.selector, - eigenLayerReputedMultisig, - eigenLayerPauserReg, - 0 /*initialPausedStatus*/ - ) - ); - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(eigenPodManager))), - address(eigenPodManagerImplementation), - abi.encodeWithSelector( - EigenPodManager.initialize.selector, - eigenLayerReputedMultisig, - eigenLayerPauserReg, - 0 /*initialPausedStatus*/ - ) - ); - - //simple ERC20 (**NOT** WETH-like!), used in a test strategy - weth = new ERC20PresetFixedSupply("weth", "WETH", wethInitialSupply, address(this)); - - // deploy StrategyBase contract implementation, then create upgradeable proxy that points to implementation and initialize it - baseStrategyImplementation = new StrategyBase(strategyManager); - wethStrat = StrategyBase( - address( - new TransparentUpgradeableProxy( - address(baseStrategyImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector(StrategyBase.initialize.selector, weth, eigenLayerPauserReg) - ) - ) - ); - - eigenToken = new ERC20PresetFixedSupply("eigen", "EIGEN", wethInitialSupply, address(this)); - - // deploy upgradeable proxy that points to StrategyBase implementation and initialize it - eigenStrat = StrategyBase( - address( - new TransparentUpgradeableProxy( - address(baseStrategyImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector(StrategyBase.initialize.selector, eigenToken, eigenLayerPauserReg) - ) - ) - ); - - stakers = [acct_0, acct_1]; - } - - function _setAddresses(string memory config) internal { - eigenLayerProxyAdminAddress = stdJson.readAddress(config, ".addresses.eigenLayerProxyAdmin"); - eigenLayerPauserRegAddress = stdJson.readAddress(config, ".addresses.eigenLayerPauserReg"); - delegationAddress = stdJson.readAddress(config, ".addresses.delegation"); - strategyManagerAddress = stdJson.readAddress(config, ".addresses.strategyManager"); - slasherAddress = stdJson.readAddress(config, ".addresses.slasher"); - eigenPodManagerAddress = stdJson.readAddress(config, ".addresses.eigenPodManager"); - emptyContractAddress = stdJson.readAddress(config, ".addresses.emptyContract"); - operationsMultisig = stdJson.readAddress(config, ".parameters.operationsMultisig"); - executorMultisig = stdJson.readAddress(config, ".parameters.executorMultisig"); - } -} +// import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; +// import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +// import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +// import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; +// import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; + +// import "../contracts/interfaces/IDelegationManager.sol"; +// import "../contracts/core/DelegationManager.sol"; +// import "../contracts/core/AVSDirectory.sol"; + +// import "../contracts/interfaces/IETHPOSDeposit.sol"; + +// import "../contracts/core/StrategyManager.sol"; +// import "../contracts/strategies/StrategyBase.sol"; +// import "../contracts/core/Slasher.sol"; + +// import "../contracts/pods/EigenPod.sol"; +// import "../contracts/pods/EigenPodManager.sol"; + +// import "../contracts/permissions/PauserRegistry.sol"; + +// import "./utils/Operators.sol"; + +// import "./mocks/LiquidStakingToken.sol"; +// import "./mocks/EmptyContract.sol"; +// import "./mocks/ETHDepositMock.sol"; + +// import "forge-std/Test.sol"; + +// contract EigenLayerDeployer is Operators { +// Vm cheats = Vm(HEVM_ADDRESS); + +// // EigenLayer contracts +// ProxyAdmin public eigenLayerProxyAdmin; +// PauserRegistry public eigenLayerPauserReg; + +// AVSDirectory public avsDirectory; +// Slasher public slasher; +// DelegationManager public delegation; +// StrategyManager public strategyManager; +// EigenPodManager public eigenPodManager; +// IEigenPod public pod; +// IETHPOSDeposit public ethPOSDeposit; +// IBeacon public eigenPodBeacon; + +// // testing/mock contracts +// IERC20 public eigenToken; +// IERC20 public weth; +// StrategyBase public wethStrat; +// StrategyBase public eigenStrat; +// StrategyBase public baseStrategyImplementation; +// EmptyContract public emptyContract; + +// mapping(uint256 => IStrategy) public strategies; + +// //from testing seed phrase +// bytes32 priv_key_0 = 0x1234567812345678123456781234567812345678123456781234567812345678; +// bytes32 priv_key_1 = 0x1234567812345678123456781234567812345698123456781234567812348976; + +// //strategy indexes for undelegation (see commitUndelegation function) +// uint256[] public strategyIndexes; +// address[2] public stakers; +// address sample_registrant = cheats.addr(436364636); + +// address[] public slashingContracts; + +// uint256 wethInitialSupply = 10e50; +// uint256 public constant eigenTotalSupply = 1000e18; +// uint256 nonce = 69; +// uint256 public gasLimit = 750000; +// IStrategy[] public initializeStrategiesToSetDelayBlocks; +// uint256[] public initializeWithdrawalDelayBlocks; +// uint256 minWithdrawalDelayBlocks = 0; +// uint32 PARTIAL_WITHDRAWAL_FRAUD_PROOF_PERIOD_BLOCKS = 7 days / 12 seconds; +// uint256 REQUIRED_BALANCE_WEI = 32 ether; +// uint64 MAX_PARTIAL_WTIHDRAWAL_AMOUNT_GWEI = 1 ether / 1e9; +// uint64 GOERLI_GENESIS_TIME = 1616508000; + +// address pauser; +// address unpauser; +// address theMultiSig = address(420); +// address operator = address(0x4206904396bF2f8b173350ADdEc5007A52664293); //sk: e88d9d864d5d731226020c5d2f02b62a4ce2a4534a39c225d32d3db795f83319 +// address acct_0 = cheats.addr(uint256(priv_key_0)); +// address acct_1 = cheats.addr(uint256(priv_key_1)); +// address _challenger = address(0x6966904396bF2f8b173350bCcec5007A52669873); +// address public eigenLayerReputedMultisig = address(this); + +// address eigenLayerProxyAdminAddress; +// address eigenLayerPauserRegAddress; +// address slasherAddress; +// address delegationAddress; +// address strategyManagerAddress; +// address eigenPodManagerAddress; +// address podAddress; +// address eigenPodBeaconAddress; +// address emptyContractAddress; +// address operationsMultisig; +// address executorMultisig; + + +// // addresses excluded from fuzzing due to abnormal behavior. TODO: @Sidu28 define this better and give it a clearer name +// mapping(address => bool) fuzzedAddressMapping; + +// //ensures that a passed in address is not set to true in the fuzzedAddressMapping +// modifier fuzzedAddress(address addr) virtual { +// cheats.assume(fuzzedAddressMapping[addr] == false); +// _; +// } + +// modifier cannotReinit() { +// cheats.expectRevert(bytes("Initializable: contract is already initialized")); +// _; +// } + +// //performs basic deployment before each test +// function setUp() public virtual { +// try vm.envUint("CHAIN_ID") returns (uint256 chainId) { +// if (chainId == 31337) { +// _deployEigenLayerContractsLocal(); +// } +// // If CHAIN_ID ENV is not set, assume local deployment on 31337 +// } catch { +// _deployEigenLayerContractsLocal(); +// } + +// fuzzedAddressMapping[address(0)] = true; +// fuzzedAddressMapping[address(eigenLayerProxyAdmin)] = true; +// fuzzedAddressMapping[address(strategyManager)] = true; +// fuzzedAddressMapping[address(eigenPodManager)] = true; +// fuzzedAddressMapping[address(delegation)] = true; +// fuzzedAddressMapping[address(slasher)] = true; +// fuzzedAddressMapping[address(avsDirectory)] = true; +// } + +// function _deployEigenLayerContractsLocal() internal { +// pauser = address(69); +// unpauser = address(489); +// // deploy proxy admin for ability to upgrade proxy contracts +// eigenLayerProxyAdmin = new ProxyAdmin(); + +// //deploy pauser registry +// address[] memory pausers = new address[](1); +// pausers[0] = pauser; +// eigenLayerPauserReg = new PauserRegistry(pausers, unpauser); + +// /** +// * First, deploy upgradeable proxy contracts that **will point** to the implementations. Since the implementation contracts are +// * not yet deployed, we give these proxies an empty contract as the initial implementation, to act as if they have no code. +// */ +// emptyContract = new EmptyContract(); +// avsDirectory = AVSDirectory( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); +// delegation = DelegationManager( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); +// strategyManager = StrategyManager( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); +// slasher = Slasher( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); +// eigenPodManager = EigenPodManager( +// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) +// ); +// ethPOSDeposit = new ETHPOSDepositMock(); +// pod = new EigenPod( +// ethPOSDeposit, +// eigenPodManager, +// GOERLI_GENESIS_TIME +// ); + +// eigenPodBeacon = new UpgradeableBeacon(address(pod)); + +// // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs +// AVSDirectory avsDirectoryImplementation = new AVSDirectory(delegation); +// DelegationManager delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); +// StrategyManager strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher, avsDirectory); +// Slasher slasherImplementation = new Slasher(strategyManager, delegation); +// EigenPodManager eigenPodManagerImplementation = new EigenPodManager( +// ethPOSDeposit, +// eigenPodBeacon, +// strategyManager, +// slasher, +// delegation +// ); + +// // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(delegation))), +// address(delegationImplementation), +// abi.encodeWithSelector( +// DelegationManager.initialize.selector, +// eigenLayerReputedMultisig, +// eigenLayerPauserReg, +// 0 /*initialPausedStatus*/, +// minWithdrawalDelayBlocks, +// initializeStrategiesToSetDelayBlocks, +// initializeWithdrawalDelayBlocks +// ) +// ); +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(strategyManager))), +// address(strategyManagerImplementation), +// abi.encodeWithSelector( +// StrategyManager.initialize.selector, +// eigenLayerReputedMultisig, +// eigenLayerReputedMultisig, +// eigenLayerPauserReg, +// 0 /*initialPausedStatus*/ +// ) +// ); +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(slasher))), +// address(slasherImplementation), +// abi.encodeWithSelector( +// Slasher.initialize.selector, +// eigenLayerReputedMultisig, +// eigenLayerPauserReg, +// 0 /*initialPausedStatus*/ +// ) +// ); +// eigenLayerProxyAdmin.upgradeAndCall( +// TransparentUpgradeableProxy(payable(address(eigenPodManager))), +// address(eigenPodManagerImplementation), +// abi.encodeWithSelector( +// EigenPodManager.initialize.selector, +// eigenLayerReputedMultisig, +// eigenLayerPauserReg, +// 0 /*initialPausedStatus*/ +// ) +// ); + +// //simple ERC20 (**NOT** WETH-like!), used in a test strategy +// weth = new ERC20PresetFixedSupply("weth", "WETH", wethInitialSupply, address(this)); + +// // deploy StrategyBase contract implementation, then create upgradeable proxy that points to implementation and initialize it +// baseStrategyImplementation = new StrategyBase(strategyManager); +// wethStrat = StrategyBase( +// address( +// new TransparentUpgradeableProxy( +// address(baseStrategyImplementation), +// address(eigenLayerProxyAdmin), +// abi.encodeWithSelector(StrategyBase.initialize.selector, weth, eigenLayerPauserReg) +// ) +// ) +// ); + +// eigenToken = new ERC20PresetFixedSupply("eigen", "EIGEN", wethInitialSupply, address(this)); + +// // deploy upgradeable proxy that points to StrategyBase implementation and initialize it +// eigenStrat = StrategyBase( +// address( +// new TransparentUpgradeableProxy( +// address(baseStrategyImplementation), +// address(eigenLayerProxyAdmin), +// abi.encodeWithSelector(StrategyBase.initialize.selector, eigenToken, eigenLayerPauserReg) +// ) +// ) +// ); + +// stakers = [acct_0, acct_1]; +// } + +// function _setAddresses(string memory config) internal { +// eigenLayerProxyAdminAddress = stdJson.readAddress(config, ".addresses.eigenLayerProxyAdmin"); +// eigenLayerPauserRegAddress = stdJson.readAddress(config, ".addresses.eigenLayerPauserReg"); +// delegationAddress = stdJson.readAddress(config, ".addresses.delegation"); +// strategyManagerAddress = stdJson.readAddress(config, ".addresses.strategyManager"); +// slasherAddress = stdJson.readAddress(config, ".addresses.slasher"); +// eigenPodManagerAddress = stdJson.readAddress(config, ".addresses.eigenPodManager"); +// emptyContractAddress = stdJson.readAddress(config, ".addresses.emptyContract"); +// operationsMultisig = stdJson.readAddress(config, ".parameters.operationsMultisig"); +// executorMultisig = stdJson.readAddress(config, ".parameters.executorMultisig"); +// } +// } \ No newline at end of file diff --git a/src/test/EigenLayerTestHelper.t.sol b/src/test/EigenLayerTestHelper.t.sol index caebaca21..9690c8371 100644 --- a/src/test/EigenLayerTestHelper.t.sol +++ b/src/test/EigenLayerTestHelper.t.sol @@ -1,505 +1,505 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "../test/EigenLayerDeployer.t.sol"; -import "../contracts/interfaces/ISignatureUtils.sol"; - -contract EigenLayerTestHelper is EigenLayerDeployer { - uint8 durationToInit = 2; - uint256 public SECP256K1N_MODULUS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141; - uint256 public SECP256K1N_MODULUS_HALF = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0; - - uint256[] sharesBefore; - uint256[] balanceBefore; - uint256[] priorTotalShares; - uint256[] strategyTokenBalance; - - /** - * @notice Helper function to test `initiateDelegation` functionality. Handles registering as an operator, depositing tokens - * into both Weth and Eigen strategies, as well as delegating assets from "stakers" to the operator. - * @param operatorIndex is the index of the operator to use from the test-data/operators.json file - * @param amountEigenToDeposit amount of eigen token to deposit - * @param amountEthToDeposit amount of eth to deposit - */ - - function _testInitiateDelegation( - uint8 operatorIndex, - uint256 amountEigenToDeposit, - uint256 amountEthToDeposit - ) public returns (uint256 amountEthStaked, uint256 amountEigenStaked) { - address operator = getOperatorAddress(operatorIndex); - - //setting up operator's delegation terms - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: operator, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - _testRegisterAsOperator(operator, operatorDetails); - - for (uint256 i; i < stakers.length; i++) { - //initialize weth, eigen and eth balances for staker - eigenToken.transfer(stakers[i], amountEigenToDeposit); - weth.transfer(stakers[i], amountEthToDeposit); - - //deposit staker's eigen and weth into strategy manager - _testDepositEigen(stakers[i], amountEigenToDeposit); - _testDepositWeth(stakers[i], amountEthToDeposit); - - //delegate the staker's deposits to operator - uint256 operatorEigenSharesBefore = delegation.operatorShares(operator, eigenStrat); - uint256 operatorWETHSharesBefore = delegation.operatorShares(operator, wethStrat); - _testDelegateToOperator(stakers[i], operator); - //verify that `increaseOperatorShares` worked - assertTrue( - delegation.operatorShares(operator, eigenStrat) - operatorEigenSharesBefore == amountEigenToDeposit - ); - assertTrue(delegation.operatorShares(operator, wethStrat) - operatorWETHSharesBefore == amountEthToDeposit); - } - amountEthStaked += delegation.operatorShares(operator, wethStrat); - amountEigenStaked += delegation.operatorShares(operator, eigenStrat); - - return (amountEthStaked, amountEigenStaked); - } - - /** - * @notice Register 'sender' as an operator, setting their 'OperatorDetails' in DelegationManager to 'operatorDetails', verifies - * that the storage of DelegationManager contract is updated appropriately - * - * @param sender is the address being registered as an operator - * @param operatorDetails is the `sender`'s OperatorDetails struct - */ - function _testRegisterAsOperator( - address sender, - IDelegationManager.OperatorDetails memory operatorDetails - ) internal { - cheats.startPrank(sender); - string memory emptyStringForMetadataURI; - delegation.registerAsOperator(operatorDetails, emptyStringForMetadataURI); - assertTrue(delegation.isOperator(sender), "testRegisterAsOperator: sender is not a operator"); - - assertTrue( - keccak256(abi.encode(delegation.operatorDetails(sender))) == keccak256(abi.encode(operatorDetails)), - "_testRegisterAsOperator: operatorDetails not set appropriately" - ); - - assertTrue(delegation.isDelegated(sender), "_testRegisterAsOperator: sender not marked as actively delegated"); - cheats.stopPrank(); - } - - /** - * @notice Deposits `amountToDeposit` of WETH from address `sender` into `wethStrat`. - * @param sender The address to spoof calls from using `cheats.startPrank(sender)` - * @param amountToDeposit Amount of WETH that is first *transferred from this contract to `sender`* and then deposited by `sender` into `stratToDepositTo` - */ - function _testDepositWeth(address sender, uint256 amountToDeposit) internal returns (uint256 amountDeposited) { - cheats.assume(amountToDeposit <= wethInitialSupply); - amountDeposited = _testDepositToStrategy(sender, amountToDeposit, weth, wethStrat); - } - - /** - * @notice Deposits `amountToDeposit` of EIGEN from address `sender` into `eigenStrat`. - * @param sender The address to spoof calls from using `cheats.startPrank(sender)` - * @param amountToDeposit Amount of EIGEN that is first *transferred from this contract to `sender`* and then deposited by `sender` into `stratToDepositTo` - */ - function _testDepositEigen(address sender, uint256 amountToDeposit) internal returns (uint256 amountDeposited) { - cheats.assume(amountToDeposit <= eigenTotalSupply); - amountDeposited = _testDepositToStrategy(sender, amountToDeposit, eigenToken, eigenStrat); - } - - /** - * @notice Deposits `amountToDeposit` of `underlyingToken` from address `sender` into `stratToDepositTo`. - * *If* `sender` has zero shares prior to deposit, *then* checks that `stratToDepositTo` is correctly added to their `stakerStrategyList` array. - * - * @param sender The address to spoof calls from using `cheats.startPrank(sender)` - * @param amountToDeposit Amount of WETH that is first *transferred from this contract to `sender`* and then deposited by `sender` into `stratToDepositTo` - */ - function _testDepositToStrategy( - address sender, - uint256 amountToDeposit, - IERC20 underlyingToken, - IStrategy stratToDepositTo - ) internal returns (uint256 amountDeposited) { - // deposits will revert when amountToDeposit is 0 - cheats.assume(amountToDeposit > 0); - - // whitelist the strategy for deposit, in case it wasn't before - { - cheats.startPrank(strategyManager.strategyWhitelister()); - IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); - _strategy[0] = stratToDepositTo; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); - cheats.stopPrank(); - } - - uint256 operatorSharesBefore = strategyManager.stakerStrategyShares(sender, stratToDepositTo); - // assumes this contract already has the underlying token! - uint256 contractBalance = underlyingToken.balanceOf(address(this)); - // check the expected output - uint256 expectedSharesOut = stratToDepositTo.underlyingToShares(amountToDeposit); - // logging and error for misusing this function (see assumption above) - if (amountToDeposit > contractBalance) { - emit log("amountToDeposit > contractBalance"); - emit log_named_uint("amountToDeposit is", amountToDeposit); - emit log_named_uint("while contractBalance is", contractBalance); - revert("_testDepositToStrategy failure"); - } else { - underlyingToken.transfer(sender, amountToDeposit); - cheats.startPrank(sender); - underlyingToken.approve(address(strategyManager), type(uint256).max); - strategyManager.depositIntoStrategy(stratToDepositTo, underlyingToken, amountToDeposit); - amountDeposited = amountToDeposit; - - //check if depositor has never used this strat, that it is added correctly to stakerStrategyList array. - if (operatorSharesBefore == 0) { - // check that strategy is appropriately added to dynamic array of all of sender's strategies - assertTrue( - strategyManager.stakerStrategyList(sender, strategyManager.stakerStrategyListLength(sender) - 1) == - stratToDepositTo, - "_testDepositToStrategy: stakerStrategyList array updated incorrectly" - ); - } - - // check that the shares out match the expected amount out - assertEq( - strategyManager.stakerStrategyShares(sender, stratToDepositTo) - operatorSharesBefore, - expectedSharesOut, - "_testDepositToStrategy: actual shares out should match expected shares out" - ); - } - cheats.stopPrank(); - } - - /** - * @notice tries to delegate from 'staker' to 'operator', verifies that staker has at least some shares - * delegatedShares update correctly for 'operator' and delegated status is updated correctly for 'staker' - * @param staker the staker address to delegate from - * @param operator the operator address to delegate to - */ - function _testDelegateToOperator(address staker, address operator) internal { - //staker-specific information - (IStrategy[] memory delegateStrategies, uint256[] memory delegateShares) = strategyManager.getDeposits(staker); - - uint256 numStrats = delegateShares.length; - assertTrue(numStrats != 0, "_testDelegateToOperator: delegating from address with no deposits"); - uint256[] memory inititalSharesInStrats = new uint256[](numStrats); - for (uint256 i = 0; i < numStrats; ++i) { - inititalSharesInStrats[i] = delegation.operatorShares(operator, delegateStrategies[i]); - } - - cheats.startPrank(staker); - ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry; - delegation.delegateTo(operator, signatureWithExpiry, bytes32(0)); - cheats.stopPrank(); - - assertTrue( - delegation.delegatedTo(staker) == operator, - "_testDelegateToOperator: delegated address not set appropriately" - ); - assertTrue(delegation.isDelegated(staker), "_testDelegateToOperator: delegated status not set appropriately"); - - for (uint256 i = 0; i < numStrats; ++i) { - uint256 operatorSharesBefore = inititalSharesInStrats[i]; - uint256 operatorSharesAfter = delegation.operatorShares(operator, delegateStrategies[i]); - assertTrue( - operatorSharesAfter == (operatorSharesBefore + delegateShares[i]), - "_testDelegateToOperator: delegatedShares not increased correctly" - ); - } - } - - /** - * @notice deploys 'numStratsToAdd' strategies contracts and initializes them to treat `underlyingToken` as their underlying token - * and then deposits 'amountToDeposit' to each of them from 'sender' - * - * @param sender address that is depositing into the strategies - * @param amountToDeposit amount being deposited - * @param numStratsToAdd number of strategies that are being deployed and deposited into - */ - function _testDepositStrategies(address sender, uint256 amountToDeposit, uint8 numStratsToAdd) internal { - // hard-coded input - IERC20 underlyingToken = weth; - - cheats.assume(numStratsToAdd > 0 && numStratsToAdd <= 20); - IStrategy[] memory stratsToDepositTo = new IStrategy[](numStratsToAdd); - for (uint8 i = 0; i < numStratsToAdd; ++i) { - stratsToDepositTo[i] = StrategyBase( - address( - new TransparentUpgradeableProxy( - address(baseStrategyImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector(StrategyBase.initialize.selector, underlyingToken, eigenLayerPauserReg) - ) - ) - ); - _testDepositToStrategy(sender, amountToDeposit, weth, StrategyBase(address(stratsToDepositTo[i]))); - } - for (uint8 i = 0; i < numStratsToAdd; ++i) { - // check that strategy is appropriately added to dynamic array of all of sender's strategies - assertTrue( - strategyManager.stakerStrategyList(sender, i) == stratsToDepositTo[i], - "stakerStrategyList array updated incorrectly" - ); - - // TODO: perhaps remove this is we can. seems brittle if we don't track the number of strategies somewhere - //store strategy in mapping of strategies - strategies[i] = IStrategy(address(stratsToDepositTo[i])); - } - } - - /** - * @notice Creates a queued withdrawal from `staker`. Begins by registering the staker as a delegate (if specified), then deposits `amountToDeposit` - * into the WETH strategy, and then queues a withdrawal using - * `strategyManager.queueWithdrawal(strategyIndexes, strategyArray, tokensArray, shareAmounts, withdrawer)` - * @notice After initiating a queued withdrawal, this test checks that `strategyManager.canCompleteQueuedWithdrawal` immediately returns the correct - * response depending on whether `staker` is delegated or not. - * @param staker The address to initiate the queued withdrawal - * @param registerAsOperator If true, `staker` will also register as a delegate in the course of this function - * @param amountToDeposit The amount of WETH to deposit - */ - function _createQueuedWithdrawal( - address staker, - bool registerAsOperator, - uint256 amountToDeposit, - IStrategy[] memory strategyArray, - uint256[] memory shareAmounts, - uint256[] memory strategyIndexes, - address withdrawer - ) internal returns (bytes32 withdrawalRoot, IDelegationManager.Withdrawal memory queuedWithdrawal) { - require(amountToDeposit >= shareAmounts[0], "_createQueuedWithdrawal: sanity check failed"); - - // we do this here to ensure that `staker` is delegated if `registerAsOperator` is true - if (registerAsOperator) { - assertTrue(!delegation.isDelegated(staker), "_createQueuedWithdrawal: staker is already delegated"); - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: staker, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - _testRegisterAsOperator(staker, operatorDetails); - assertTrue( - delegation.isDelegated(staker), - "_createQueuedWithdrawal: staker isn't delegated when they should be" - ); - } - - queuedWithdrawal = IDelegationManager.Withdrawal({ - strategies: strategyArray, - shares: shareAmounts, - staker: staker, - withdrawer: withdrawer, - nonce: delegation.cumulativeWithdrawalsQueued(staker), - delegatedTo: delegation.delegatedTo(staker), - startBlock: uint32(block.number) - }); - - { - //make deposit in WETH strategy - uint256 amountDeposited = _testDepositWeth(staker, amountToDeposit); - // We can't withdraw more than we deposit - if (shareAmounts[0] > amountDeposited) { - cheats.expectRevert("StrategyManager._removeShares: shareAmount too high"); - } - } - - //queue the withdrawal - withdrawalRoot = _testQueueWithdrawal(staker, strategyIndexes, strategyArray, shareAmounts, withdrawer); - return (withdrawalRoot, queuedWithdrawal); - } - - /** - * Helper for ECDSA signatures: combines V and S into VS - if S is greater than SECP256K1N_MODULUS_HALF, then we - * get the modulus, so that the leading bit of s is always 0. Then we set the leading - * bit to be either 0 or 1 based on the value of v, which is either 27 or 28 - */ - function getVSfromVandS(uint8 v, bytes32 s) internal view returns (bytes32) { - if (uint256(s) > SECP256K1N_MODULUS_HALF) { - s = bytes32(SECP256K1N_MODULUS - uint256(s)); - } - - bytes32 vs = s; - if (v == 28) { - vs = bytes32(uint256(s) ^ (1 << 255)); - } - - return vs; - } - - /// @notice registers a fixed address as an operator, delegates to it from a second address, - /// and checks that the operator's voteWeights increase properly - /// @param operator is the operator being delegated to. - /// @param staker is the staker delegating stake to the operator. - /// @param ethAmount is the amount of ETH to deposit into the operator's strategy. - /// @param eigenAmount is the amount of EIGEN to deposit into the operator's strategy. - function _testDelegation( - address operator, - address staker, - uint256 ethAmount, - uint256 eigenAmount - ) internal { - if (!delegation.isOperator(operator)) { - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: operator, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - _testRegisterAsOperator(operator, operatorDetails); - } - - uint256 amountBefore = delegation.operatorShares(operator, wethStrat); - - //making additional deposits to the strategies - assertTrue(!delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); - _testDepositWeth(staker, ethAmount); - _testDepositEigen(staker, eigenAmount); - _testDelegateToOperator(staker, operator); - assertTrue(delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); - - (/*IStrategy[] memory updatedStrategies*/, uint256[] memory updatedShares) = strategyManager.getDeposits(staker); - - IStrategy _strat = wethStrat; - // IStrategy _strat = strategyManager.stakerStrategyList(staker, 0); - assertTrue(address(_strat) != address(0), "stakerStrategyList not updated correctly"); - - assertTrue( - delegation.operatorShares(operator, _strat) - updatedShares[0] == amountBefore, - "ETH operatorShares not updated correctly" - ); - } - - /** - * @notice Helper function to complete an existing queued withdrawal in shares - * @param depositor is the address of the staker who queued a withdrawal - * @param strategyArray is the array of strategies to withdraw from - * @param tokensArray is the array of tokens to withdraw from said strategies - * @param shareAmounts is the array of shares to be withdrawn from said strategies - * @param delegatedTo is the address the staker has delegated their shares to - * @param withdrawalStartBlock the block number of the original queued withdrawal - * @param middlewareTimesIndex index in the middlewareTimes array used to queue this withdrawal - */ - - function _testCompleteQueuedWithdrawalShares( - address depositor, - IStrategy[] memory strategyArray, - IERC20[] memory tokensArray, - uint256[] memory shareAmounts, - address delegatedTo, - address withdrawer, - uint256 nonce, - uint32 withdrawalStartBlock, - uint256 middlewareTimesIndex - ) internal { - cheats.startPrank(withdrawer); - - for (uint256 i = 0; i < strategyArray.length; i++) { - sharesBefore.push(strategyManager.stakerStrategyShares(withdrawer, strategyArray[i])); - } - // emit log_named_uint("strategies", strategyArray.length); - // emit log_named_uint("tokens", tokensArray.length); - // emit log_named_uint("shares", shareAmounts.length); - // emit log_named_address("depositor", depositor); - // emit log_named_uint("withdrawalStartBlock", withdrawalStartBlock); - // emit log_named_address("delegatedAddress", delegatedTo); - // emit log("************************************************************************************************"); - - IDelegationManager.Withdrawal memory queuedWithdrawal = IDelegationManager.Withdrawal({ - strategies: strategyArray, - shares: shareAmounts, - staker: depositor, - withdrawer: withdrawer, - nonce: nonce, - startBlock: withdrawalStartBlock, - delegatedTo: delegatedTo - }); - - // complete the queued withdrawal - delegation.completeQueuedWithdrawal(queuedWithdrawal, tokensArray, middlewareTimesIndex, false); - - for (uint256 i = 0; i < strategyArray.length; i++) { - require( - strategyManager.stakerStrategyShares(withdrawer, strategyArray[i]) == sharesBefore[i] + shareAmounts[i], - "_testCompleteQueuedWithdrawalShares: withdrawer shares not incremented" - ); - } - cheats.stopPrank(); - } - - /** - * @notice Helper function to complete an existing queued withdrawal in tokens - * @param depositor is the address of the staker who queued a withdrawal - * @param strategyArray is the array of strategies to withdraw from - * @param tokensArray is the array of tokens to withdraw from said strategies - * @param shareAmounts is the array of shares to be withdrawn from said strategies - * @param delegatedTo is the address the staker has delegated their shares to - * @param withdrawalStartBlock the block number of the original queued withdrawal - * @param middlewareTimesIndex index in the middlewareTimes array used to queue this withdrawal - */ - function _testCompleteQueuedWithdrawalTokens( - address depositor, - IStrategy[] memory strategyArray, - IERC20[] memory tokensArray, - uint256[] memory shareAmounts, - address delegatedTo, - address withdrawer, - uint256 nonce, - uint32 withdrawalStartBlock, - uint256 middlewareTimesIndex - ) internal { - cheats.startPrank(withdrawer); - - for (uint256 i = 0; i < strategyArray.length; i++) { - balanceBefore.push(strategyArray[i].underlyingToken().balanceOf(withdrawer)); - priorTotalShares.push(strategyArray[i].totalShares()); - strategyTokenBalance.push(strategyArray[i].underlyingToken().balanceOf(address(strategyArray[i]))); - } - - IDelegationManager.Withdrawal memory queuedWithdrawal = IDelegationManager.Withdrawal({ - strategies: strategyArray, - shares: shareAmounts, - staker: depositor, - withdrawer: withdrawer, - nonce: nonce, - startBlock: withdrawalStartBlock, - delegatedTo: delegatedTo - }); - // complete the queued withdrawal - delegation.completeQueuedWithdrawal(queuedWithdrawal, tokensArray, middlewareTimesIndex, true); - - for (uint256 i = 0; i < strategyArray.length; i++) { - //uint256 strategyTokenBalance = strategyArray[i].underlyingToken().balanceOf(address(strategyArray[i])); - uint256 tokenBalanceDelta = (strategyTokenBalance[i] * shareAmounts[i]) / priorTotalShares[i]; - - // filter out unrealistic case, where the withdrawer is the strategy contract itself - cheats.assume(withdrawer != address(strategyArray[i])); - require( - strategyArray[i].underlyingToken().balanceOf(withdrawer) == balanceBefore[i] + tokenBalanceDelta, - "_testCompleteQueuedWithdrawalTokens: withdrawer balance not incremented" - ); - } - cheats.stopPrank(); - } - - function _testQueueWithdrawal( - address depositor, - uint256[] memory /*strategyIndexes*/, - IStrategy[] memory strategyArray, - uint256[] memory shareAmounts, - address withdrawer - ) internal returns (bytes32) { - cheats.startPrank(depositor); - - IDelegationManager.QueuedWithdrawalParams[] memory params = new IDelegationManager.QueuedWithdrawalParams[](1); - - params[0] = IDelegationManager.QueuedWithdrawalParams({ - strategies: strategyArray, - shares: shareAmounts, - withdrawer: withdrawer - }); - - bytes32[] memory withdrawalRoots = new bytes32[](1); - withdrawalRoots = delegation.queueWithdrawals(params); - cheats.stopPrank(); - return withdrawalRoots[0]; - } -} +// import "../test/EigenLayerDeployer.t.sol"; +// import "../contracts/interfaces/ISignatureUtils.sol"; + +// contract EigenLayerTestHelper is EigenLayerDeployer { +// uint8 durationToInit = 2; +// uint256 public SECP256K1N_MODULUS = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141; +// uint256 public SECP256K1N_MODULUS_HALF = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0; + +// uint256[] sharesBefore; +// uint256[] balanceBefore; +// uint256[] priorTotalShares; +// uint256[] strategyTokenBalance; + +// /** +// * @notice Helper function to test `initiateDelegation` functionality. Handles registering as an operator, depositing tokens +// * into both Weth and Eigen strategies, as well as delegating assets from "stakers" to the operator. +// * @param operatorIndex is the index of the operator to use from the test-data/operators.json file +// * @param amountEigenToDeposit amount of eigen token to deposit +// * @param amountEthToDeposit amount of eth to deposit +// */ + +// function _testInitiateDelegation( +// uint8 operatorIndex, +// uint256 amountEigenToDeposit, +// uint256 amountEthToDeposit +// ) public returns (uint256 amountEthStaked, uint256 amountEigenStaked) { +// address operator = getOperatorAddress(operatorIndex); + +// //setting up operator's delegation terms +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: operator, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }); +// _testRegisterAsOperator(operator, operatorDetails); + +// for (uint256 i; i < stakers.length; i++) { +// //initialize weth, eigen and eth balances for staker +// eigenToken.transfer(stakers[i], amountEigenToDeposit); +// weth.transfer(stakers[i], amountEthToDeposit); + +// //deposit staker's eigen and weth into strategy manager +// _testDepositEigen(stakers[i], amountEigenToDeposit); +// _testDepositWeth(stakers[i], amountEthToDeposit); + +// //delegate the staker's deposits to operator +// uint256 operatorEigenSharesBefore = delegation.operatorShares(operator, eigenStrat); +// uint256 operatorWETHSharesBefore = delegation.operatorShares(operator, wethStrat); +// _testDelegateToOperator(stakers[i], operator); +// //verify that `increaseOperatorShares` worked +// assertTrue( +// delegation.operatorShares(operator, eigenStrat) - operatorEigenSharesBefore == amountEigenToDeposit +// ); +// assertTrue(delegation.operatorShares(operator, wethStrat) - operatorWETHSharesBefore == amountEthToDeposit); +// } +// amountEthStaked += delegation.operatorShares(operator, wethStrat); +// amountEigenStaked += delegation.operatorShares(operator, eigenStrat); + +// return (amountEthStaked, amountEigenStaked); +// } + +// /** +// * @notice Register 'sender' as an operator, setting their 'OperatorDetails' in DelegationManager to 'operatorDetails', verifies +// * that the storage of DelegationManager contract is updated appropriately +// * +// * @param sender is the address being registered as an operator +// * @param operatorDetails is the `sender`'s OperatorDetails struct +// */ +// function _testRegisterAsOperator( +// address sender, +// IDelegationManager.OperatorDetails memory operatorDetails +// ) internal { +// cheats.startPrank(sender); +// string memory emptyStringForMetadataURI; +// delegation.registerAsOperator(operatorDetails, emptyStringForMetadataURI); +// assertTrue(delegation.isOperator(sender), "testRegisterAsOperator: sender is not a operator"); + +// assertTrue( +// keccak256(abi.encode(delegation.operatorDetails(sender))) == keccak256(abi.encode(operatorDetails)), +// "_testRegisterAsOperator: operatorDetails not set appropriately" +// ); + +// assertTrue(delegation.isDelegated(sender), "_testRegisterAsOperator: sender not marked as actively delegated"); +// cheats.stopPrank(); +// } + +// /** +// * @notice Deposits `amountToDeposit` of WETH from address `sender` into `wethStrat`. +// * @param sender The address to spoof calls from using `cheats.startPrank(sender)` +// * @param amountToDeposit Amount of WETH that is first *transferred from this contract to `sender`* and then deposited by `sender` into `stratToDepositTo` +// */ +// function _testDepositWeth(address sender, uint256 amountToDeposit) internal returns (uint256 amountDeposited) { +// cheats.assume(amountToDeposit <= wethInitialSupply); +// amountDeposited = _testDepositToStrategy(sender, amountToDeposit, weth, wethStrat); +// } + +// /** +// * @notice Deposits `amountToDeposit` of EIGEN from address `sender` into `eigenStrat`. +// * @param sender The address to spoof calls from using `cheats.startPrank(sender)` +// * @param amountToDeposit Amount of EIGEN that is first *transferred from this contract to `sender`* and then deposited by `sender` into `stratToDepositTo` +// */ +// function _testDepositEigen(address sender, uint256 amountToDeposit) internal returns (uint256 amountDeposited) { +// cheats.assume(amountToDeposit <= eigenTotalSupply); +// amountDeposited = _testDepositToStrategy(sender, amountToDeposit, eigenToken, eigenStrat); +// } + +// /** +// * @notice Deposits `amountToDeposit` of `underlyingToken` from address `sender` into `stratToDepositTo`. +// * *If* `sender` has zero shares prior to deposit, *then* checks that `stratToDepositTo` is correctly added to their `stakerStrategyList` array. +// * +// * @param sender The address to spoof calls from using `cheats.startPrank(sender)` +// * @param amountToDeposit Amount of WETH that is first *transferred from this contract to `sender`* and then deposited by `sender` into `stratToDepositTo` +// */ +// function _testDepositToStrategy( +// address sender, +// uint256 amountToDeposit, +// IERC20 underlyingToken, +// IStrategy stratToDepositTo +// ) internal returns (uint256 amountDeposited) { +// // deposits will revert when amountToDeposit is 0 +// cheats.assume(amountToDeposit > 0); + +// // whitelist the strategy for deposit, in case it wasn't before +// { +// cheats.startPrank(strategyManager.strategyWhitelister()); +// IStrategy[] memory _strategy = new IStrategy[](1); +// bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); +// _strategy[0] = stratToDepositTo; +// strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); +// cheats.stopPrank(); +// } + +// uint256 operatorSharesBefore = strategyManager.stakerStrategyScaledShares(sender, stratToDepositTo); +// // assumes this contract already has the underlying token! +// uint256 contractBalance = underlyingToken.balanceOf(address(this)); +// // check the expected output +// uint256 expectedSharesOut = stratToDepositTo.underlyingToShares(amountToDeposit); +// // logging and error for misusing this function (see assumption above) +// if (amountToDeposit > contractBalance) { +// emit log("amountToDeposit > contractBalance"); +// emit log_named_uint("amountToDeposit is", amountToDeposit); +// emit log_named_uint("while contractBalance is", contractBalance); +// revert("_testDepositToStrategy failure"); +// } else { +// underlyingToken.transfer(sender, amountToDeposit); +// cheats.startPrank(sender); +// underlyingToken.approve(address(strategyManager), type(uint256).max); +// strategyManager.depositIntoStrategy(stratToDepositTo, underlyingToken, amountToDeposit); +// amountDeposited = amountToDeposit; + +// //check if depositor has never used this strat, that it is added correctly to stakerStrategyList array. +// if (operatorSharesBefore == 0) { +// // check that strategy is appropriately added to dynamic array of all of sender's strategies +// assertTrue( +// strategyManager.stakerStrategyList(sender, strategyManager.stakerStrategyListLength(sender) - 1) == +// stratToDepositTo, +// "_testDepositToStrategy: stakerStrategyList array updated incorrectly" +// ); +// } + +// // check that the shares out match the expected amount out +// assertEq( +// strategyManager.stakerStrategyScaledShares(sender, stratToDepositTo) - operatorSharesBefore, +// expectedSharesOut, +// "_testDepositToStrategy: actual shares out should match expected shares out" +// ); +// } +// cheats.stopPrank(); +// } + +// /** +// * @notice tries to delegate from 'staker' to 'operator', verifies that staker has at least some shares +// * delegatedShares update correctly for 'operator' and delegated status is updated correctly for 'staker' +// * @param staker the staker address to delegate from +// * @param operator the operator address to delegate to +// */ +// function _testDelegateToOperator(address staker, address operator) internal { +// //staker-specific information +// (IStrategy[] memory delegateStrategies, uint256[] memory delegateShares) = strategyManager.getDeposits(staker); + +// uint256 numStrats = delegateShares.length; +// assertTrue(numStrats != 0, "_testDelegateToOperator: delegating from address with no deposits"); +// uint256[] memory inititalSharesInStrats = new uint256[](numStrats); +// for (uint256 i = 0; i < numStrats; ++i) { +// inititalSharesInStrats[i] = delegation.operatorShares(operator, delegateStrategies[i]); +// } + +// cheats.startPrank(staker); +// ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry; +// delegation.delegateTo(operator, signatureWithExpiry, bytes32(0)); +// cheats.stopPrank(); + +// assertTrue( +// delegation.delegatedTo(staker) == operator, +// "_testDelegateToOperator: delegated address not set appropriately" +// ); +// assertTrue(delegation.isDelegated(staker), "_testDelegateToOperator: delegated status not set appropriately"); + +// for (uint256 i = 0; i < numStrats; ++i) { +// uint256 operatorSharesBefore = inititalSharesInStrats[i]; +// uint256 operatorSharesAfter = delegation.operatorShares(operator, delegateStrategies[i]); +// assertTrue( +// operatorSharesAfter == (operatorSharesBefore + delegateShares[i]), +// "_testDelegateToOperator: delegatedShares not increased correctly" +// ); +// } +// } + +// /** +// * @notice deploys 'numStratsToAdd' strategies contracts and initializes them to treat `underlyingToken` as their underlying token +// * and then deposits 'amountToDeposit' to each of them from 'sender' +// * +// * @param sender address that is depositing into the strategies +// * @param amountToDeposit amount being deposited +// * @param numStratsToAdd number of strategies that are being deployed and deposited into +// */ +// function _testDepositStrategies(address sender, uint256 amountToDeposit, uint8 numStratsToAdd) internal { +// // hard-coded input +// IERC20 underlyingToken = weth; + +// cheats.assume(numStratsToAdd > 0 && numStratsToAdd <= 20); +// IStrategy[] memory stratsToDepositTo = new IStrategy[](numStratsToAdd); +// for (uint8 i = 0; i < numStratsToAdd; ++i) { +// stratsToDepositTo[i] = StrategyBase( +// address( +// new TransparentUpgradeableProxy( +// address(baseStrategyImplementation), +// address(eigenLayerProxyAdmin), +// abi.encodeWithSelector(StrategyBase.initialize.selector, underlyingToken, eigenLayerPauserReg) +// ) +// ) +// ); +// _testDepositToStrategy(sender, amountToDeposit, weth, StrategyBase(address(stratsToDepositTo[i]))); +// } +// for (uint8 i = 0; i < numStratsToAdd; ++i) { +// // check that strategy is appropriately added to dynamic array of all of sender's strategies +// assertTrue( +// strategyManager.stakerStrategyList(sender, i) == stratsToDepositTo[i], +// "stakerStrategyList array updated incorrectly" +// ); + +// // TODO: perhaps remove this is we can. seems brittle if we don't track the number of strategies somewhere +// //store strategy in mapping of strategies +// strategies[i] = IStrategy(address(stratsToDepositTo[i])); +// } +// } + +// /** +// * @notice Creates a queued withdrawal from `staker`. Begins by registering the staker as a delegate (if specified), then deposits `amountToDeposit` +// * into the WETH strategy, and then queues a withdrawal using +// * `strategyManager.queueWithdrawal(strategyIndexes, strategyArray, tokensArray, shareAmounts, withdrawer)` +// * @notice After initiating a queued withdrawal, this test checks that `strategyManager.canCompleteQueuedWithdrawal` immediately returns the correct +// * response depending on whether `staker` is delegated or not. +// * @param staker The address to initiate the queued withdrawal +// * @param registerAsOperator If true, `staker` will also register as a delegate in the course of this function +// * @param amountToDeposit The amount of WETH to deposit +// */ +// function _createQueuedWithdrawal( +// address staker, +// bool registerAsOperator, +// uint256 amountToDeposit, +// IStrategy[] memory strategyArray, +// uint256[] memory shareAmounts, +// uint256[] memory strategyIndexes, +// address withdrawer +// ) internal returns (bytes32 withdrawalRoot, IDelegationManager.Withdrawal memory queuedWithdrawal) { +// require(amountToDeposit >= shareAmounts[0], "_createQueuedWithdrawal: sanity check failed"); + +// // we do this here to ensure that `staker` is delegated if `registerAsOperator` is true +// if (registerAsOperator) { +// assertTrue(!delegation.isDelegated(staker), "_createQueuedWithdrawal: staker is already delegated"); +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: staker, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }); +// _testRegisterAsOperator(staker, operatorDetails); +// assertTrue( +// delegation.isDelegated(staker), +// "_createQueuedWithdrawal: staker isn't delegated when they should be" +// ); +// } + +// queuedWithdrawal = IDelegationManager.Withdrawal({ +// strategies: strategyArray, +// scaledShares: shareAmounts, +// staker: staker, +// withdrawer: withdrawer, +// nonce: delegation.cumulativeWithdrawalsQueued(staker), +// delegatedTo: delegation.delegatedTo(staker), +// startBlock: uint32(block.number) +// }); + +// { +// //make deposit in WETH strategy +// uint256 amountDeposited = _testDepositWeth(staker, amountToDeposit); +// // We can't withdraw more than we deposit +// if (shareAmounts[0] > amountDeposited) { +// cheats.expectRevert("StrategyManager._removeScaledShares: shareAmount too high"); +// } +// } + +// //queue the withdrawal +// withdrawalRoot = _testQueueWithdrawal(staker, strategyIndexes, strategyArray, shareAmounts, withdrawer); +// return (withdrawalRoot, queuedWithdrawal); +// } + +// /** +// * Helper for ECDSA signatures: combines V and S into VS - if S is greater than SECP256K1N_MODULUS_HALF, then we +// * get the modulus, so that the leading bit of s is always 0. Then we set the leading +// * bit to be either 0 or 1 based on the value of v, which is either 27 or 28 +// */ +// function getVSfromVandS(uint8 v, bytes32 s) internal view returns (bytes32) { +// if (uint256(s) > SECP256K1N_MODULUS_HALF) { +// s = bytes32(SECP256K1N_MODULUS - uint256(s)); +// } + +// bytes32 vs = s; +// if (v == 28) { +// vs = bytes32(uint256(s) ^ (1 << 255)); +// } + +// return vs; +// } + +// /// @notice registers a fixed address as an operator, delegates to it from a second address, +// /// and checks that the operator's voteWeights increase properly +// /// @param operator is the operator being delegated to. +// /// @param staker is the staker delegating stake to the operator. +// /// @param ethAmount is the amount of ETH to deposit into the operator's strategy. +// /// @param eigenAmount is the amount of EIGEN to deposit into the operator's strategy. +// function _testDelegation( +// address operator, +// address staker, +// uint256 ethAmount, +// uint256 eigenAmount +// ) internal { +// if (!delegation.isOperator(operator)) { +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: operator, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }); +// _testRegisterAsOperator(operator, operatorDetails); +// } + +// uint256 amountBefore = delegation.operatorShares(operator, wethStrat); + +// //making additional deposits to the strategies +// assertTrue(!delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); +// _testDepositWeth(staker, ethAmount); +// _testDepositEigen(staker, eigenAmount); +// _testDelegateToOperator(staker, operator); +// assertTrue(delegation.isDelegated(staker) == true, "testDelegation: staker is not delegate"); + +// (/*IStrategy[] memory updatedStrategies*/, uint256[] memory updatedShares) = strategyManager.getDeposits(staker); + +// IStrategy _strat = wethStrat; +// // IStrategy _strat = strategyManager.stakerStrategyList(staker, 0); +// assertTrue(address(_strat) != address(0), "stakerStrategyList not updated correctly"); + +// assertTrue( +// delegation.operatorShares(operator, _strat) - updatedShares[0] == amountBefore, +// "ETH operatorShares not updated correctly" +// ); +// } + +// /** +// * @notice Helper function to complete an existing queued withdrawal in shares +// * @param depositor is the address of the staker who queued a withdrawal +// * @param strategyArray is the array of strategies to withdraw from +// * @param tokensArray is the array of tokens to withdraw from said strategies +// * @param shareAmounts is the array of shares to be withdrawn from said strategies +// * @param delegatedTo is the address the staker has delegated their shares to +// * @param withdrawalStartBlock the block number of the original queued withdrawal +// * @param middlewareTimesIndex index in the middlewareTimes array used to queue this withdrawal +// */ + +// function _testCompleteQueuedWithdrawalShares( +// address depositor, +// IStrategy[] memory strategyArray, +// IERC20[] memory tokensArray, +// uint256[] memory shareAmounts, +// address delegatedTo, +// address withdrawer, +// uint256 nonce, +// uint32 withdrawalStartBlock, +// uint256 middlewareTimesIndex +// ) internal { +// cheats.startPrank(withdrawer); + +// for (uint256 i = 0; i < strategyArray.length; i++) { +// sharesBefore.push(strategyManager.stakerStrategyScaledShares(withdrawer, strategyArray[i])); +// } +// // emit log_named_uint("strategies", strategyArray.length); +// // emit log_named_uint("tokens", tokensArray.length); +// // emit log_named_uint("shares", shareAmounts.length); +// // emit log_named_address("depositor", depositor); +// // emit log_named_uint("withdrawalStartBlock", withdrawalStartBlock); +// // emit log_named_address("delegatedAddress", delegatedTo); +// // emit log("************************************************************************************************"); + +// IDelegationManager.Withdrawal memory queuedWithdrawal = IDelegationManager.Withdrawal({ +// strategies: strategyArray, +// scaledShares: shareAmounts, +// staker: depositor, +// withdrawer: withdrawer, +// nonce: nonce, +// startBlock: withdrawalStartBlock, +// delegatedTo: delegatedTo +// }); + +// // complete the queued withdrawal +// delegation.completeQueuedWithdrawal(queuedWithdrawal, tokensArray, middlewareTimesIndex, false); + +// for (uint256 i = 0; i < strategyArray.length; i++) { +// require( +// strategyManager.stakerStrategyScaledShares(withdrawer, strategyArray[i]) == sharesBefore[i] + shareAmounts[i], +// "_testCompleteQueuedWithdrawalShares: withdrawer shares not incremented" +// ); +// } +// cheats.stopPrank(); +// } + +// /** +// * @notice Helper function to complete an existing queued withdrawal in tokens +// * @param depositor is the address of the staker who queued a withdrawal +// * @param strategyArray is the array of strategies to withdraw from +// * @param tokensArray is the array of tokens to withdraw from said strategies +// * @param shareAmounts is the array of shares to be withdrawn from said strategies +// * @param delegatedTo is the address the staker has delegated their shares to +// * @param withdrawalStartBlock the block number of the original queued withdrawal +// * @param middlewareTimesIndex index in the middlewareTimes array used to queue this withdrawal +// */ +// function _testCompleteQueuedWithdrawalTokens( +// address depositor, +// IStrategy[] memory strategyArray, +// IERC20[] memory tokensArray, +// uint256[] memory shareAmounts, +// address delegatedTo, +// address withdrawer, +// uint256 nonce, +// uint32 withdrawalStartBlock, +// uint256 middlewareTimesIndex +// ) internal { +// cheats.startPrank(withdrawer); + +// for (uint256 i = 0; i < strategyArray.length; i++) { +// balanceBefore.push(strategyArray[i].underlyingToken().balanceOf(withdrawer)); +// priorTotalShares.push(strategyArray[i].totalShares()); +// strategyTokenBalance.push(strategyArray[i].underlyingToken().balanceOf(address(strategyArray[i]))); +// } + +// IDelegationManager.Withdrawal memory queuedWithdrawal = IDelegationManager.Withdrawal({ +// strategies: strategyArray, +// scaledShares: shareAmounts, +// staker: depositor, +// withdrawer: withdrawer, +// nonce: nonce, +// startBlock: withdrawalStartBlock, +// delegatedTo: delegatedTo +// }); +// // complete the queued withdrawal +// delegation.completeQueuedWithdrawal(queuedWithdrawal, tokensArray, middlewareTimesIndex, true); + +// for (uint256 i = 0; i < strategyArray.length; i++) { +// //uint256 strategyTokenBalance = strategyArray[i].underlyingToken().balanceOf(address(strategyArray[i])); +// uint256 tokenBalanceDelta = (strategyTokenBalance[i] * shareAmounts[i]) / priorTotalShares[i]; + +// // filter out unrealistic case, where the withdrawer is the strategy contract itself +// cheats.assume(withdrawer != address(strategyArray[i])); +// require( +// strategyArray[i].underlyingToken().balanceOf(withdrawer) == balanceBefore[i] + tokenBalanceDelta, +// "_testCompleteQueuedWithdrawalTokens: withdrawer balance not incremented" +// ); +// } +// cheats.stopPrank(); +// } + +// function _testQueueWithdrawal( +// address depositor, +// uint256[] memory /*strategyIndexes*/, +// IStrategy[] memory strategyArray, +// uint256[] memory shareAmounts, +// address withdrawer +// ) internal returns (bytes32) { +// cheats.startPrank(depositor); + +// IDelegationManager.QueuedWithdrawalParams[] memory params = new IDelegationManager.QueuedWithdrawalParams[](1); + +// params[0] = IDelegationManager.QueuedWithdrawalParams({ +// strategies: strategyArray, +// scaledShares: shareAmounts, +// withdrawer: withdrawer +// }); + +// bytes32[] memory withdrawalRoots = new bytes32[](1); +// withdrawalRoots = delegation.queueWithdrawals(params); +// cheats.stopPrank(); +// return withdrawalRoots[0]; +// } +// } \ No newline at end of file diff --git a/src/test/Pausable.t.sol b/src/test/Pausable.t.sol index 19c00fd2f..2b6e5b1dd 100644 --- a/src/test/Pausable.t.sol +++ b/src/test/Pausable.t.sol @@ -2,89 +2,89 @@ pragma solidity ^0.8.27; -import "./EigenLayerTestHelper.t.sol"; - -contract PausableTests is EigenLayerTestHelper { - - /// @notice Emitted when the `pauserRegistry` is set to `newPauserRegistry`. - event PauserRegistrySet(IPauserRegistry pauserRegistry, IPauserRegistry newPauserRegistry); - - ///@dev test that pausing a contract works - function testPausingWithdrawalsFromStrategyManager(uint256 amountToDeposit, uint256 amountToWithdraw) public { - cheats.assume(amountToDeposit <= 1e38 - 1); - cheats.assume(amountToDeposit <= weth.balanceOf(address(this))); - // if first deposit amount to base strategy is too small, it will revert. ignore that case here. - cheats.assume(amountToDeposit >= 1); - cheats.assume(amountToWithdraw <= amountToDeposit); - - address sender = getOperatorAddress(0); - _testDepositToStrategy(sender, amountToDeposit, weth, wethStrat); - - cheats.startPrank(pauser); - strategyManager.pause(type(uint256).max); - cheats.stopPrank(); - - // uint256 strategyIndex = 0; - - cheats.prank(sender); - - // TODO: write this to work with completing a queued withdrawal - // cheats.expectRevert(bytes("Pausable: paused")); - // strategyManager.withdrawFromStrategy(strategyIndex, wethStrat, weth, amountToWithdraw); - // cheats.stopPrank(); - } - - function testUnauthorizedPauserStrategyManager(address unauthorizedPauser) - public - fuzzedAddress(unauthorizedPauser) - { - cheats.assume(!eigenLayerPauserReg.isPauser(unauthorizedPauser)); - cheats.startPrank(unauthorizedPauser); - cheats.expectRevert(bytes("msg.sender is not permissioned as pauser")); - strategyManager.pause(type(uint256).max); - cheats.stopPrank(); - } - - function testSetPauser(address newPauser) public fuzzedAddress(newPauser) { - cheats.startPrank(unpauser); - eigenLayerPauserReg.setIsPauser(newPauser, true); - cheats.stopPrank(); - } - - function testSetUnpauser(address newUnpauser) public fuzzedAddress(newUnpauser) { - cheats.startPrank(unpauser); - eigenLayerPauserReg.setUnpauser(newUnpauser); - cheats.stopPrank(); - } - - function testSetPauserUnauthorized(address fakePauser, address newPauser) - public - fuzzedAddress(newPauser) - fuzzedAddress(fakePauser) - { - cheats.assume(fakePauser != eigenLayerPauserReg.unpauser()); - cheats.startPrank(fakePauser); - cheats.expectRevert(bytes("msg.sender is not permissioned as unpauser")); - eigenLayerPauserReg.setIsPauser(newPauser, true); - cheats.stopPrank(); - } - - function testSetPauserRegistryUnpauser(IPauserRegistry newPauserRegistry) public { - cheats.assume(address(newPauserRegistry) != address(0)); - IPauserRegistry oldPauserRegistry = strategyManager.pauserRegistry(); - cheats.prank(unpauser); - cheats.expectEmit(true, true, true, true, address(strategyManager)); - emit PauserRegistrySet(oldPauserRegistry, newPauserRegistry); - strategyManager.setPauserRegistry(newPauserRegistry); +// import "./EigenLayerTestHelper.t.sol"; + +// contract PausableTests is EigenLayerTestHelper { + +// /// @notice Emitted when the `pauserRegistry` is set to `newPauserRegistry`. +// event PauserRegistrySet(IPauserRegistry pauserRegistry, IPauserRegistry newPauserRegistry); + +// ///@dev test that pausing a contract works +// function testPausingWithdrawalsFromStrategyManager(uint256 amountToDeposit, uint256 amountToWithdraw) public { +// cheats.assume(amountToDeposit <= 1e38 - 1); +// cheats.assume(amountToDeposit <= weth.balanceOf(address(this))); +// // if first deposit amount to base strategy is too small, it will revert. ignore that case here. +// cheats.assume(amountToDeposit >= 1); +// cheats.assume(amountToWithdraw <= amountToDeposit); + +// address sender = getOperatorAddress(0); +// _testDepositToStrategy(sender, amountToDeposit, weth, wethStrat); + +// cheats.startPrank(pauser); +// strategyManager.pause(type(uint256).max); +// cheats.stopPrank(); + +// // uint256 strategyIndex = 0; + +// cheats.prank(sender); + +// // TODO: write this to work with completing a queued withdrawal +// // cheats.expectRevert(bytes("Pausable: paused")); +// // strategyManager.withdrawFromStrategy(strategyIndex, wethStrat, weth, amountToWithdraw); +// // cheats.stopPrank(); +// } + +// function testUnauthorizedPauserStrategyManager(address unauthorizedPauser) +// public +// fuzzedAddress(unauthorizedPauser) +// { +// cheats.assume(!eigenLayerPauserReg.isPauser(unauthorizedPauser)); +// cheats.startPrank(unauthorizedPauser); +// cheats.expectRevert(bytes("msg.sender is not permissioned as pauser")); +// strategyManager.pause(type(uint256).max); +// cheats.stopPrank(); +// } + +// function testSetPauser(address newPauser) public fuzzedAddress(newPauser) { +// cheats.startPrank(unpauser); +// eigenLayerPauserReg.setIsPauser(newPauser, true); +// cheats.stopPrank(); +// } + +// function testSetUnpauser(address newUnpauser) public fuzzedAddress(newUnpauser) { +// cheats.startPrank(unpauser); +// eigenLayerPauserReg.setUnpauser(newUnpauser); +// cheats.stopPrank(); +// } + +// function testSetPauserUnauthorized(address fakePauser, address newPauser) +// public +// fuzzedAddress(newPauser) +// fuzzedAddress(fakePauser) +// { +// cheats.assume(fakePauser != eigenLayerPauserReg.unpauser()); +// cheats.startPrank(fakePauser); +// cheats.expectRevert(bytes("msg.sender is not permissioned as unpauser")); +// eigenLayerPauserReg.setIsPauser(newPauser, true); +// cheats.stopPrank(); +// } + +// function testSetPauserRegistryUnpauser(IPauserRegistry newPauserRegistry) public { +// cheats.assume(address(newPauserRegistry) != address(0)); +// IPauserRegistry oldPauserRegistry = strategyManager.pauserRegistry(); +// cheats.prank(unpauser); +// cheats.expectEmit(true, true, true, true, address(strategyManager)); +// emit PauserRegistrySet(oldPauserRegistry, newPauserRegistry); +// strategyManager.setPauserRegistry(newPauserRegistry); - assertEq(address(newPauserRegistry), address(strategyManager.pauserRegistry())); - } +// assertEq(address(newPauserRegistry), address(strategyManager.pauserRegistry())); +// } - function testSetPauserRegistyUnauthorized(IPauserRegistry newPauserRegistry, address notUnpauser) public fuzzedAddress(notUnpauser) { - cheats.assume(notUnpauser != eigenLayerPauserReg.unpauser()); +// function testSetPauserRegistyUnauthorized(IPauserRegistry newPauserRegistry, address notUnpauser) public fuzzedAddress(notUnpauser) { +// cheats.assume(notUnpauser != eigenLayerPauserReg.unpauser()); - cheats.prank(notUnpauser); - cheats.expectRevert(bytes("msg.sender is not permissioned as unpauser")); - strategyManager.setPauserRegistry(newPauserRegistry); - } -} +// cheats.prank(notUnpauser); +// cheats.expectRevert(bytes("msg.sender is not permissioned as unpauser")); +// strategyManager.setPauserRegistry(newPauserRegistry); +// } +// } \ No newline at end of file diff --git a/src/test/Strategy.t.sol b/src/test/Strategy.t.sol index 6bcad11ad..4ad9ed2fd 100644 --- a/src/test/Strategy.t.sol +++ b/src/test/Strategy.t.sol @@ -1,58 +1,58 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "./EigenLayerTestHelper.t.sol"; -import "../contracts/core/StrategyManagerStorage.sol"; - -contract StrategyTests is EigenLayerTestHelper { - /// @notice This function tests to ensure that a delegation contract - /// cannot be intitialized multiple times - function testCannotInitMultipleTimesDelegation() public cannotReinit { - wethStrat.initialize(weth, eigenLayerPauserReg); - } - - ///@notice This function tests to ensure that only the strategyManager - /// can deposit into a strategy - ///@param invalidDepositor is the non-registered depositor - function testInvalidCalltoDeposit(address invalidDepositor) public fuzzedAddress(invalidDepositor) { - IERC20 underlyingToken = wethStrat.underlyingToken(); - - cheats.startPrank(invalidDepositor); - cheats.expectRevert(bytes("StrategyBase.onlyStrategyManager")); - wethStrat.deposit(underlyingToken, 1e18); - cheats.stopPrank(); - } - - ///@notice This function tests to ensure that only the strategyManager - /// can deposit into a strategy - ///@param invalidWithdrawer is the non-registered withdrawer - ///@param depositor is the depositor for which the shares are being withdrawn - function testInvalidCalltoWithdraw(address depositor, address invalidWithdrawer) - public - fuzzedAddress(invalidWithdrawer) - { - IERC20 underlyingToken = wethStrat.underlyingToken(); - - cheats.startPrank(invalidWithdrawer); - cheats.expectRevert(bytes("StrategyBase.onlyStrategyManager")); - wethStrat.withdraw(depositor, underlyingToken, 1e18); - cheats.stopPrank(); - } - - ///@notice This function tests ensures that withdrawing for a depositor that never - /// actually deposited fails. - ///@param depositor is the depositor for which the shares are being withdrawn - function testWithdrawalExceedsTotalShares(address depositor, uint256 shares) public fuzzedAddress(depositor) { - cheats.assume(shares > strategyManager.stakerStrategyShares(depositor, wethStrat)); - IERC20 underlyingToken = wethStrat.underlyingToken(); - - cheats.startPrank(address(strategyManager)); - - cheats.expectRevert( - bytes("StrategyBase.withdraw: amountShares must be less than or equal to totalShares") - ); - wethStrat.withdraw(depositor, underlyingToken, shares); - - cheats.stopPrank(); - } -} +// import "./EigenLayerTestHelper.t.sol"; +// import "../contracts/core/StrategyManagerStorage.sol"; + +// contract StrategyTests is EigenLayerTestHelper { +// /// @notice This function tests to ensure that a delegation contract +// /// cannot be intitialized multiple times +// function testCannotInitMultipleTimesDelegation() public cannotReinit { +// wethStrat.initialize(weth, eigenLayerPauserReg); +// } + +// ///@notice This function tests to ensure that only the strategyManager +// /// can deposit into a strategy +// ///@param invalidDepositor is the non-registered depositor +// function testInvalidCalltoDeposit(address invalidDepositor) public fuzzedAddress(invalidDepositor) { +// IERC20 underlyingToken = wethStrat.underlyingToken(); + +// cheats.startPrank(invalidDepositor); +// cheats.expectRevert(bytes("StrategyBase.onlyStrategyManager")); +// wethStrat.deposit(underlyingToken, 1e18); +// cheats.stopPrank(); +// } + +// ///@notice This function tests to ensure that only the strategyManager +// /// can deposit into a strategy +// ///@param invalidWithdrawer is the non-registered withdrawer +// ///@param depositor is the depositor for which the shares are being withdrawn +// function testInvalidCalltoWithdraw(address depositor, address invalidWithdrawer) +// public +// fuzzedAddress(invalidWithdrawer) +// { +// IERC20 underlyingToken = wethStrat.underlyingToken(); + +// cheats.startPrank(invalidWithdrawer); +// cheats.expectRevert(bytes("StrategyBase.onlyStrategyManager")); +// wethStrat.withdraw(depositor, underlyingToken, 1e18); +// cheats.stopPrank(); +// } + +// ///@notice This function tests ensures that withdrawing for a depositor that never +// /// actually deposited fails. +// ///@param depositor is the depositor for which the shares are being withdrawn +// function testWithdrawalExceedsTotalShares(address depositor, uint256 shares) public fuzzedAddress(depositor) { +// cheats.assume(shares > strategyManager.stakerStrategyShares(depositor, wethStrat)); +// IERC20 underlyingToken = wethStrat.underlyingToken(); + +// cheats.startPrank(address(strategyManager)); + +// cheats.expectRevert( +// bytes("StrategyBase.withdraw: amountShares must be less than or equal to totalShares") +// ); +// wethStrat.withdraw(depositor, underlyingToken, shares); + +// cheats.stopPrank(); +// } +// } \ No newline at end of file diff --git a/src/test/Withdrawals.t.sol b/src/test/Withdrawals.t.sol index b95aef9f4..f806080f1 100644 --- a/src/test/Withdrawals.t.sol +++ b/src/test/Withdrawals.t.sol @@ -1,285 +1,284 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "../test/EigenLayerTestHelper.t.sol"; - -contract WithdrawalTests is EigenLayerTestHelper { - // packed info used to help handle stack-too-deep errors - struct DataForTestWithdrawal { - IStrategy[] delegatorStrategies; - uint256[] delegatorShares; - address withdrawer; - uint96 nonce; - } - - bytes32 defaultOperatorId = bytes32(uint256(0)); - - function setUp() public virtual override { - EigenLayerDeployer.setUp(); - } - - //This function helps with stack too deep issues with "testWithdrawal" test - function testWithdrawalWrapper( - address operator, - address depositor, - uint96 ethAmount, - uint96 eigenAmount, - bool withdrawAsTokens, - bool RANDAO - ) public fuzzedAddress(operator) fuzzedAddress(depositor) { - cheats.assume(depositor != operator); - cheats.assume(ethAmount >= 1 && ethAmount <= 1e18); - cheats.assume(eigenAmount >= 1 && eigenAmount <= 1e18); - - address withdrawer = depositor; - - if (RANDAO) { - _testWithdrawalAndDeregistration(operator, depositor, withdrawer, ethAmount, eigenAmount, withdrawAsTokens); - } else { - _testWithdrawalWithStakeUpdate(operator, depositor, withdrawer, ethAmount, eigenAmount, withdrawAsTokens); - } - } - - /// @notice test staker's ability to undelegate/withdraw from an operator. - /// @param operator is the operator being delegated to. - /// @param depositor is the staker delegating stake to the operator. - function _testWithdrawalAndDeregistration( - address operator, - address depositor, - address withdrawer, - uint96 ethAmount, - uint96 eigenAmount, - bool withdrawAsTokens - ) internal { - _initiateDelegation(operator, depositor, ethAmount, eigenAmount); - - address delegatedTo = delegation.delegatedTo(depositor); - - // packed data structure to deal with stack-too-deep issues - DataForTestWithdrawal memory dataForTestWithdrawal; - - // scoped block to deal with stack-too-deep issues - { - //delegator-specific information - (IStrategy[] memory delegatorStrategies, uint256[] memory delegatorShares) = strategyManager.getDeposits( - depositor - ); - dataForTestWithdrawal.delegatorStrategies = delegatorStrategies; - dataForTestWithdrawal.delegatorShares = delegatorShares; - dataForTestWithdrawal.withdrawer = withdrawer; - // harcoded nonce value - dataForTestWithdrawal.nonce = 0; - } - - uint256[] memory strategyIndexes = new uint256[](2); - IERC20[] memory tokensArray = new IERC20[](2); - { - // hardcoded values - strategyIndexes[0] = 0; - strategyIndexes[1] = 0; - tokensArray[0] = weth; - tokensArray[1] = eigenToken; - } - - cheats.warp(uint32(block.timestamp) + 1 days); - cheats.roll(uint32(block.timestamp) + 1 days); - - _testQueueWithdrawal( - depositor, - strategyIndexes, - dataForTestWithdrawal.delegatorStrategies, - dataForTestWithdrawal.delegatorShares, - withdrawer - ); - uint32 queuedWithdrawalBlock = uint32(block.number); - - //now withdrawal block time is before deregistration - cheats.warp(uint32(block.timestamp) + 2 days); - cheats.roll(uint32(block.timestamp) + 2 days); - - { - //warp past the serve until time, which is 3 days from the beginning. THis puts us at 4 days past that point - cheats.warp(uint32(block.timestamp) + 4 days); - cheats.roll(uint32(block.timestamp) + 4 days); - - uint256 middlewareTimeIndex = 1; - if (withdrawAsTokens) { - _testCompleteQueuedWithdrawalTokens( - depositor, - dataForTestWithdrawal.delegatorStrategies, - tokensArray, - dataForTestWithdrawal.delegatorShares, - delegatedTo, - dataForTestWithdrawal.withdrawer, - dataForTestWithdrawal.nonce, - queuedWithdrawalBlock, - middlewareTimeIndex - ); - } else { - _testCompleteQueuedWithdrawalShares( - depositor, - dataForTestWithdrawal.delegatorStrategies, - tokensArray, - dataForTestWithdrawal.delegatorShares, - delegatedTo, - dataForTestWithdrawal.withdrawer, - dataForTestWithdrawal.nonce, - queuedWithdrawalBlock, - middlewareTimeIndex - ); - } - } - } - - /// @notice test staker's ability to undelegate/withdraw from an operator. - /// @param operator is the operator being delegated to. - /// @param depositor is the staker delegating stake to the operator. - function _testWithdrawalWithStakeUpdate( - address operator, - address depositor, - address withdrawer, - uint96 ethAmount, - uint96 eigenAmount, - bool withdrawAsTokens - ) public { - _initiateDelegation(operator, depositor, ethAmount, eigenAmount); - - // emit log_named_uint("Linked list element 1", uint256(uint160(address(generalServiceManager1)))); - // emit log_named_uint("Linked list element 2", uint256(uint160(address(generalServiceManager2)))); - // emit log("________________________________________________________________"); - // emit log_named_uint("Middleware 1 Update Block", uint32(block.number)); - - cheats.warp(uint32(block.timestamp) + 1 days); - cheats.roll(uint32(block.number) + 1); - - // emit log_named_uint("Middleware 2 Update Block", uint32(block.number)); - - address delegatedTo = delegation.delegatedTo(depositor); - - // packed data structure to deal with stack-too-deep issues - DataForTestWithdrawal memory dataForTestWithdrawal; - - // scoped block to deal with stack-too-deep issues - { - //delegator-specific information - (IStrategy[] memory delegatorStrategies, uint256[] memory delegatorShares) = strategyManager.getDeposits( - depositor - ); - dataForTestWithdrawal.delegatorStrategies = delegatorStrategies; - dataForTestWithdrawal.delegatorShares = delegatorShares; - dataForTestWithdrawal.withdrawer = withdrawer; - // harcoded nonce value - dataForTestWithdrawal.nonce = 0; - } - - uint256[] memory strategyIndexes = new uint256[](2); - IERC20[] memory tokensArray = new IERC20[](2); - { - // hardcoded values - strategyIndexes[0] = 0; - strategyIndexes[1] = 0; - tokensArray[0] = weth; - tokensArray[1] = eigenToken; - } - - cheats.warp(uint32(block.timestamp) + 1 days); - cheats.roll(uint32(block.number) + 1); - - _testQueueWithdrawal( - depositor, - strategyIndexes, - dataForTestWithdrawal.delegatorStrategies, - dataForTestWithdrawal.delegatorShares, - dataForTestWithdrawal.withdrawer - ); - uint32 queuedWithdrawalBlock = uint32(block.number); - - //now withdrawal block time is before deregistration - cheats.warp(uint32(block.timestamp) + 2 days); - cheats.roll(uint32(block.number) + 2); - - // uint256 prevElement = uint256(uint160(address(generalServiceManager2))); - - cheats.warp(uint32(block.timestamp) + 1 days); - cheats.roll(uint32(block.number) + 1); - - // prevElement = uint256(uint160(address(generalServiceManager1))); - - { - //warp past the serve until time, which is 3 days from the beginning. THis puts us at 4 days past that point - cheats.warp(uint32(block.timestamp) + 4 days); - cheats.roll(uint32(block.number) + 4); - - uint256 middlewareTimeIndex = 3; - if (withdrawAsTokens) { - _testCompleteQueuedWithdrawalTokens( - depositor, - dataForTestWithdrawal.delegatorStrategies, - tokensArray, - dataForTestWithdrawal.delegatorShares, - delegatedTo, - dataForTestWithdrawal.withdrawer, - dataForTestWithdrawal.nonce, - queuedWithdrawalBlock, - middlewareTimeIndex - ); - } else { - _testCompleteQueuedWithdrawalShares( - depositor, - dataForTestWithdrawal.delegatorStrategies, - tokensArray, - dataForTestWithdrawal.delegatorShares, - delegatedTo, - dataForTestWithdrawal.withdrawer, - dataForTestWithdrawal.nonce, - queuedWithdrawalBlock, - middlewareTimeIndex - ); - } - } - } - - // @notice This function tests to ensure that a delegator can re-delegate to an operator after undelegating. - // @param operator is the operator being delegated to. - // @param staker is the staker delegating stake to the operator. - function testRedelegateAfterWithdrawal( - address operator, - address depositor, - uint96 ethAmount, - uint96 eigenAmount, - bool withdrawAsShares - ) public fuzzedAddress(operator) fuzzedAddress(depositor) { - cheats.assume(depositor != operator); - //this function performs delegation and subsequent withdrawal - testWithdrawalWrapper(operator, depositor, ethAmount, eigenAmount, withdrawAsShares, true); - - cheats.prank(depositor); - delegation.undelegate(depositor); - - //warps past fraudproof time interval - cheats.warp(block.timestamp + 7 days + 1); - _initiateDelegation(operator, depositor, ethAmount, eigenAmount); - } - - // Helper function to begin a delegation - function _initiateDelegation( - address operator, - address staker, - uint96 ethAmount, - uint96 eigenAmount - ) internal fuzzedAddress(operator) fuzzedAddress(staker) fuzzedAmounts(ethAmount, eigenAmount) { - cheats.assume(staker != operator); - // base strategy will revert if these amounts are too small on first deposit - cheats.assume(ethAmount >= 1); - cheats.assume(eigenAmount >= 2); - - _testDelegation(operator, staker, ethAmount, eigenAmount); - } - - modifier fuzzedAmounts(uint256 ethAmount, uint256 eigenAmount) { - cheats.assume(ethAmount >= 0 && ethAmount <= 1e18); - cheats.assume(eigenAmount >= 0 && eigenAmount <= 1e18); - _; - } -} - +// import "../test/EigenLayerTestHelper.t.sol"; + +// contract WithdrawalTests is EigenLayerTestHelper { +// // packed info used to help handle stack-too-deep errors +// struct DataForTestWithdrawal { +// IStrategy[] delegatorStrategies; +// uint256[] delegatorShares; +// address withdrawer; +// uint96 nonce; +// } + +// bytes32 defaultOperatorId = bytes32(uint256(0)); + +// function setUp() public virtual override { +// EigenLayerDeployer.setUp(); +// } + +// //This function helps with stack too deep issues with "testWithdrawal" test +// function testWithdrawalWrapper( +// address operator, +// address depositor, +// uint96 ethAmount, +// uint96 eigenAmount, +// bool withdrawAsTokens, +// bool RANDAO +// ) public fuzzedAddress(operator) fuzzedAddress(depositor) { +// cheats.assume(depositor != operator); +// cheats.assume(ethAmount >= 1 && ethAmount <= 1e18); +// cheats.assume(eigenAmount >= 1 && eigenAmount <= 1e18); + +// address withdrawer = depositor; + +// if (RANDAO) { +// _testWithdrawalAndDeregistration(operator, depositor, withdrawer, ethAmount, eigenAmount, withdrawAsTokens); +// } else { +// _testWithdrawalWithStakeUpdate(operator, depositor, withdrawer, ethAmount, eigenAmount, withdrawAsTokens); +// } +// } + +// /// @notice test staker's ability to undelegate/withdraw from an operator. +// /// @param operator is the operator being delegated to. +// /// @param depositor is the staker delegating stake to the operator. +// function _testWithdrawalAndDeregistration( +// address operator, +// address depositor, +// address withdrawer, +// uint96 ethAmount, +// uint96 eigenAmount, +// bool withdrawAsTokens +// ) internal { +// _initiateDelegation(operator, depositor, ethAmount, eigenAmount); + +// address delegatedTo = delegation.delegatedTo(depositor); + +// // packed data structure to deal with stack-too-deep issues +// DataForTestWithdrawal memory dataForTestWithdrawal; + +// // scoped block to deal with stack-too-deep issues +// { +// //delegator-specific information +// (IStrategy[] memory delegatorStrategies, uint256[] memory delegatorShares) = strategyManager.getDeposits( +// depositor +// ); +// dataForTestWithdrawal.delegatorStrategies = delegatorStrategies; +// dataForTestWithdrawal.delegatorShares = delegatorShares; +// dataForTestWithdrawal.withdrawer = withdrawer; +// // harcoded nonce value +// dataForTestWithdrawal.nonce = 0; +// } + +// uint256[] memory strategyIndexes = new uint256[](2); +// IERC20[] memory tokensArray = new IERC20[](2); +// { +// // hardcoded values +// strategyIndexes[0] = 0; +// strategyIndexes[1] = 0; +// tokensArray[0] = weth; +// tokensArray[1] = eigenToken; +// } + +// cheats.warp(uint32(block.timestamp) + 1 days); +// cheats.roll(uint32(block.timestamp) + 1 days); + +// _testQueueWithdrawal( +// depositor, +// strategyIndexes, +// dataForTestWithdrawal.delegatorStrategies, +// dataForTestWithdrawal.delegatorShares, +// withdrawer +// ); +// uint32 queuedWithdrawalBlock = uint32(block.number); + +// //now withdrawal block time is before deregistration +// cheats.warp(uint32(block.timestamp) + 2 days); +// cheats.roll(uint32(block.timestamp) + 2 days); + +// { +// //warp past the serve until time, which is 3 days from the beginning. THis puts us at 4 days past that point +// cheats.warp(uint32(block.timestamp) + 4 days); +// cheats.roll(uint32(block.timestamp) + 4 days); + +// uint256 middlewareTimeIndex = 1; +// if (withdrawAsTokens) { +// _testCompleteQueuedWithdrawalTokens( +// depositor, +// dataForTestWithdrawal.delegatorStrategies, +// tokensArray, +// dataForTestWithdrawal.delegatorShares, +// delegatedTo, +// dataForTestWithdrawal.withdrawer, +// dataForTestWithdrawal.nonce, +// queuedWithdrawalBlock, +// middlewareTimeIndex +// ); +// } else { +// _testCompleteQueuedWithdrawalShares( +// depositor, +// dataForTestWithdrawal.delegatorStrategies, +// tokensArray, +// dataForTestWithdrawal.delegatorShares, +// delegatedTo, +// dataForTestWithdrawal.withdrawer, +// dataForTestWithdrawal.nonce, +// queuedWithdrawalBlock, +// middlewareTimeIndex +// ); +// } +// } +// } + +// /// @notice test staker's ability to undelegate/withdraw from an operator. +// /// @param operator is the operator being delegated to. +// /// @param depositor is the staker delegating stake to the operator. +// function _testWithdrawalWithStakeUpdate( +// address operator, +// address depositor, +// address withdrawer, +// uint96 ethAmount, +// uint96 eigenAmount, +// bool withdrawAsTokens +// ) public { +// _initiateDelegation(operator, depositor, ethAmount, eigenAmount); + +// // emit log_named_uint("Linked list element 1", uint256(uint160(address(generalServiceManager1)))); +// // emit log_named_uint("Linked list element 2", uint256(uint160(address(generalServiceManager2)))); +// // emit log("________________________________________________________________"); +// // emit log_named_uint("Middleware 1 Update Block", uint32(block.number)); + +// cheats.warp(uint32(block.timestamp) + 1 days); +// cheats.roll(uint32(block.number) + 1); + +// // emit log_named_uint("Middleware 2 Update Block", uint32(block.number)); + +// address delegatedTo = delegation.delegatedTo(depositor); + +// // packed data structure to deal with stack-too-deep issues +// DataForTestWithdrawal memory dataForTestWithdrawal; + +// // scoped block to deal with stack-too-deep issues +// { +// //delegator-specific information +// (IStrategy[] memory delegatorStrategies, uint256[] memory delegatorShares) = strategyManager.getDeposits( +// depositor +// ); +// dataForTestWithdrawal.delegatorStrategies = delegatorStrategies; +// dataForTestWithdrawal.delegatorShares = delegatorShares; +// dataForTestWithdrawal.withdrawer = withdrawer; +// // harcoded nonce value +// dataForTestWithdrawal.nonce = 0; +// } + +// uint256[] memory strategyIndexes = new uint256[](2); +// IERC20[] memory tokensArray = new IERC20[](2); +// { +// // hardcoded values +// strategyIndexes[0] = 0; +// strategyIndexes[1] = 0; +// tokensArray[0] = weth; +// tokensArray[1] = eigenToken; +// } + +// cheats.warp(uint32(block.timestamp) + 1 days); +// cheats.roll(uint32(block.number) + 1); + +// _testQueueWithdrawal( +// depositor, +// strategyIndexes, +// dataForTestWithdrawal.delegatorStrategies, +// dataForTestWithdrawal.delegatorShares, +// dataForTestWithdrawal.withdrawer +// ); +// uint32 queuedWithdrawalBlock = uint32(block.number); + +// //now withdrawal block time is before deregistration +// cheats.warp(uint32(block.timestamp) + 2 days); +// cheats.roll(uint32(block.number) + 2); + +// // uint256 prevElement = uint256(uint160(address(generalServiceManager2))); + +// cheats.warp(uint32(block.timestamp) + 1 days); +// cheats.roll(uint32(block.number) + 1); + +// // prevElement = uint256(uint160(address(generalServiceManager1))); + +// { +// //warp past the serve until time, which is 3 days from the beginning. THis puts us at 4 days past that point +// cheats.warp(uint32(block.timestamp) + 4 days); +// cheats.roll(uint32(block.number) + 4); + +// uint256 middlewareTimeIndex = 3; +// if (withdrawAsTokens) { +// _testCompleteQueuedWithdrawalTokens( +// depositor, +// dataForTestWithdrawal.delegatorStrategies, +// tokensArray, +// dataForTestWithdrawal.delegatorShares, +// delegatedTo, +// dataForTestWithdrawal.withdrawer, +// dataForTestWithdrawal.nonce, +// queuedWithdrawalBlock, +// middlewareTimeIndex +// ); +// } else { +// _testCompleteQueuedWithdrawalShares( +// depositor, +// dataForTestWithdrawal.delegatorStrategies, +// tokensArray, +// dataForTestWithdrawal.delegatorShares, +// delegatedTo, +// dataForTestWithdrawal.withdrawer, +// dataForTestWithdrawal.nonce, +// queuedWithdrawalBlock, +// middlewareTimeIndex +// ); +// } +// } +// } + +// // @notice This function tests to ensure that a delegator can re-delegate to an operator after undelegating. +// // @param operator is the operator being delegated to. +// // @param staker is the staker delegating stake to the operator. +// function testRedelegateAfterWithdrawal( +// address operator, +// address depositor, +// uint96 ethAmount, +// uint96 eigenAmount, +// bool withdrawAsShares +// ) public fuzzedAddress(operator) fuzzedAddress(depositor) { +// cheats.assume(depositor != operator); +// //this function performs delegation and subsequent withdrawal +// testWithdrawalWrapper(operator, depositor, ethAmount, eigenAmount, withdrawAsShares, true); + +// cheats.prank(depositor); +// delegation.undelegate(depositor); + +// //warps past fraudproof time interval +// cheats.warp(block.timestamp + 7 days + 1); +// _initiateDelegation(operator, depositor, ethAmount, eigenAmount); +// } + +// // Helper function to begin a delegation +// function _initiateDelegation( +// address operator, +// address staker, +// uint96 ethAmount, +// uint96 eigenAmount +// ) internal fuzzedAddress(operator) fuzzedAddress(staker) fuzzedAmounts(ethAmount, eigenAmount) { +// cheats.assume(staker != operator); +// // base strategy will revert if these amounts are too small on first deposit +// cheats.assume(ethAmount >= 1); +// cheats.assume(eigenAmount >= 2); + +// _testDelegation(operator, staker, ethAmount, eigenAmount); +// } + +// modifier fuzzedAmounts(uint256 ethAmount, uint256 eigenAmount) { +// cheats.assume(ethAmount >= 0 && ethAmount <= 1e18); +// cheats.assume(eigenAmount >= 0 && eigenAmount <= 1e18); +// _; +// } +// } diff --git a/src/test/harnesses/EigenPodManagerWrapper.sol b/src/test/harnesses/EigenPodManagerWrapper.sol index 7bce6e9bc..0a65a1373 100644 --- a/src/test/harnesses/EigenPodManagerWrapper.sol +++ b/src/test/harnesses/EigenPodManagerWrapper.sol @@ -14,8 +14,8 @@ contract EigenPodManagerWrapper is EigenPodManager { IDelegationManager _delegationManager ) EigenPodManager(_ethPOS, _eigenPodBeacon, _strategyManager, _slasher, _delegationManager) {} - function calculateChangeInDelegatableShares(int256 sharesBefore, int256 sharesAfter) external pure returns (int256) { - return _calculateChangeInDelegatableShares(sharesBefore, sharesAfter); + function calculateChangeInDelegatableScaledShares(int256 sharesBefore, int256 sharesAfter) external pure returns (int256) { + return _calculateChangeInDelegatableScaledShares(sharesBefore, sharesAfter); } function setPodAddress(address owner, IEigenPod pod) external { diff --git a/src/test/integration/IntegrationBase.t.sol b/src/test/integration/IntegrationBase.t.sol index 872a547f2..774c7b388 100644 --- a/src/test/integration/IntegrationBase.t.sol +++ b/src/test/integration/IntegrationBase.t.sol @@ -185,7 +185,7 @@ abstract contract IntegrationBase is IntegrationDeployer { function assert_HasNoDelegatableShares(User user, string memory err) internal { (IStrategy[] memory strategies, uint[] memory shares) = - delegationManager.getDelegatableShares(address(user)); + delegationManager.getDelegatableScaledShares(address(user)); assertEq(strategies.length, 0, err); assertEq(strategies.length, shares.length, "assert_HasNoDelegatableShares: return length mismatch"); @@ -238,7 +238,7 @@ abstract contract IntegrationBase is IntegrationDeployer { actualShares = uint(shares); } else { - actualShares = strategyManager.stakerStrategyShares(address(user), strat); + actualShares = strategyManager.stakerStrategyScaledShares(address(user), strat); } assertApproxEqAbs(expectedShares[i], actualShares, 1, err); @@ -1051,7 +1051,7 @@ abstract contract IntegrationBase is IntegrationDeployer { curShares[i] = uint(shares); } else { - curShares[i] = strategyManager.stakerStrategyShares(address(staker), strat); + curShares[i] = strategyManager.stakerStrategyScaledShares(address(staker), strat); } } @@ -1076,7 +1076,7 @@ abstract contract IntegrationBase is IntegrationDeployer { if (strat == BEACONCHAIN_ETH_STRAT) { curShares[i] = eigenPodManager.podOwnerShares(address(staker)); } else { - curShares[i] = int(strategyManager.stakerStrategyShares(address(staker), strat)); + curShares[i] = int(strategyManager.stakerStrategyScaledShares(address(staker), strat)); } } diff --git a/src/test/integration/IntegrationChecks.t.sol b/src/test/integration/IntegrationChecks.t.sol index 3fc6583c3..adedd55f3 100644 --- a/src/test/integration/IntegrationChecks.t.sol +++ b/src/test/integration/IntegrationChecks.t.sol @@ -266,11 +266,11 @@ contract IntegrationCheckUtils is IntegrationBase { if (operator != staker) { assert_Snap_Unchanged_TokenBalances(User(operator), "operator should not have any change in underlying token balances"); } - assert_Snap_Added_OperatorShares(User(operator), withdrawal.strategies, withdrawal.shares, "operator should have received shares"); + assert_Snap_Added_OperatorShares(User(operator), withdrawal.strategies, withdrawal.scaledShares, "operator should have received scaledShares"); } } - /// @notice Difference from above is that operator shares do not increase since staker is not delegated + /// @notice Difference from above is that operator scaledShares do not increase since staker is not delegated function check_Withdrawal_AsShares_Undelegated_State( User staker, User operator, diff --git a/src/test/integration/IntegrationDeployer.t.sol b/src/test/integration/IntegrationDeployer.t.sol index 3b1a5e541..2808a5c39 100644 --- a/src/test/integration/IntegrationDeployer.t.sol +++ b/src/test/integration/IntegrationDeployer.t.sol @@ -257,7 +257,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( ethPOSDeposit, @@ -400,7 +400,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { // First, deploy the *implementation* contracts, using the *proxy contracts* as inputs delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( ethPOSDeposit, @@ -494,7 +494,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { // First, deploy the *implementation* contracts, using the *proxy contracts* as inputs delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( ethPOSDeposit, diff --git a/src/test/integration/tests/Deposit_Delegate_Queue_Complete.t.sol b/src/test/integration/tests/Deposit_Delegate_Queue_Complete.t.sol index c05f15206..2757f6aa8 100644 --- a/src/test/integration/tests/Deposit_Delegate_Queue_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Delegate_Queue_Complete.t.sol @@ -60,7 +60,7 @@ contract Integration_Deposit_Delegate_Queue_Complete is IntegrationCheckUtils { _rollBlocksForCompleteWithdrawals(strategies); for (uint256 i = 0; i < withdrawals.length; i++) { - uint256[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].shares); + uint256[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].scaledShares); IERC20[] memory tokens = staker.completeWithdrawalAsTokens(withdrawals[i]); check_Withdrawal_AsTokens_State(staker, operator, withdrawals[i], strategies, shares, tokens, expectedTokens); } @@ -192,7 +192,7 @@ contract Integration_Deposit_Delegate_Queue_Complete is IntegrationCheckUtils { // Fast forward to when we can complete the withdrawal _rollBlocksForCompleteWithdrawals(strategies); for (uint256 i = 0; i < withdrawals.length; i++) { - uint256[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].shares); + uint256[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].scaledShares); IERC20[] memory tokens = staker.completeWithdrawalAsTokens(withdrawals[i]); check_Withdrawal_AsTokens_State(staker, operator, withdrawals[i], withdrawStrats, withdrawShares, tokens, expectedTokens); } diff --git a/src/test/integration/tests/Deposit_Delegate_Redelegate_Complete.t.sol b/src/test/integration/tests/Deposit_Delegate_Redelegate_Complete.t.sol index efcca889f..3203e9619 100644 --- a/src/test/integration/tests/Deposit_Delegate_Redelegate_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Delegate_Redelegate_Complete.t.sol @@ -60,7 +60,7 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti _rollBlocksForCompleteWithdrawals(strategies); for (uint256 i = 0; i < withdrawals.length; ++i) { staker.completeWithdrawalAsShares(withdrawals[i]); - check_Withdrawal_AsShares_Undelegated_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].shares); + check_Withdrawal_AsShares_Undelegated_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].scaledShares); } // 5. Delegate to a new operator @@ -79,9 +79,9 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti // Complete withdrawals for (uint i = 0; i < withdrawals.length; i++) { - uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].shares); + uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].scaledShares); IERC20[] memory tokens = staker.completeWithdrawalAsTokens(withdrawals[i]); - check_Withdrawal_AsTokens_State(staker, operator2, withdrawals[i], withdrawals[i].strategies, withdrawals[i].shares, tokens, expectedTokens); + check_Withdrawal_AsTokens_State(staker, operator2, withdrawals[i], withdrawals[i].strategies, withdrawals[i].scaledShares, tokens, expectedTokens); } } @@ -132,7 +132,7 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti _rollBlocksForCompleteWithdrawals(strategies); for (uint256 i = 0; i < withdrawals.length; ++i) { staker.completeWithdrawalAsShares(withdrawals[i]); - check_Withdrawal_AsShares_Undelegated_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].shares); + check_Withdrawal_AsShares_Undelegated_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].scaledShares); } // 5. Delegate to a new operator @@ -227,7 +227,7 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti _rollBlocksForCompleteWithdrawals(strategies); for (uint256 i = 0; i < withdrawals.length; ++i) { staker.completeWithdrawalAsShares(withdrawals[i]); - check_Withdrawal_AsShares_Undelegated_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].shares); + check_Withdrawal_AsShares_Undelegated_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].scaledShares); } // 5. Delegate to a new operator @@ -255,7 +255,7 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti // Complete withdrawals for (uint i = 0; i < newWithdrawals.length; i++) { - uint[] memory expectedTokens = _calculateExpectedTokens(newWithdrawals[i].strategies, newWithdrawals[i].shares); + uint[] memory expectedTokens = _calculateExpectedTokens(newWithdrawals[i].strategies, newWithdrawals[i].scaledShares); IERC20[] memory tokens = staker.completeWithdrawalAsTokens(newWithdrawals[i]); check_Withdrawal_AsTokens_State(staker, operator2, newWithdrawals[i], strategies, shares, tokens, expectedTokens); } @@ -319,7 +319,7 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti _rollBlocksForCompleteWithdrawals(strategies); for (uint256 i = 0; i < withdrawals.length; ++i) { staker.completeWithdrawalAsShares(withdrawals[i]); - check_Withdrawal_AsShares_Undelegated_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].shares); + check_Withdrawal_AsShares_Undelegated_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].scaledShares); } // 5. Deposit into Strategies @@ -347,7 +347,7 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti // Complete withdrawals for (uint i = 0; i < newWithdrawals.length; i++) { - uint[] memory expectedTokens = _calculateExpectedTokens(newWithdrawals[i].strategies, newWithdrawals[i].shares); + uint[] memory expectedTokens = _calculateExpectedTokens(newWithdrawals[i].strategies, newWithdrawals[i].scaledShares); IERC20[] memory tokens = staker.completeWithdrawalAsTokens(newWithdrawals[i]); check_Withdrawal_AsTokens_State(staker, operator2, newWithdrawals[i], strategies, shares, tokens, expectedTokens); } @@ -396,9 +396,9 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti // Fast forward to when we can complete the withdrawal _rollBlocksForCompleteWithdrawals(strategies); for (uint256 i = 0; i < withdrawals.length; ++i) { - uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].shares); + uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].scaledShares); IERC20[] memory tokens = staker.completeWithdrawalAsTokens(withdrawals[i]); - check_Withdrawal_AsTokens_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].shares, tokens, expectedTokens); + check_Withdrawal_AsTokens_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].scaledShares, tokens, expectedTokens); } //5. Deposit into Strategies @@ -422,7 +422,7 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti // Complete withdrawals as tokens for (uint i = 0; i < withdrawals.length; i++) { - uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].shares); + uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].scaledShares); IERC20[] memory tokens = staker.completeWithdrawalAsTokens(withdrawals[i]); check_Withdrawal_AsTokens_State(staker, operator2, withdrawals[i], strategies, shares, tokens, expectedTokens); } @@ -470,9 +470,9 @@ contract Integration_Deposit_Delegate_Redelegate_Complete is IntegrationCheckUti // Fast forward to when we can complete the withdrawal _rollBlocksForCompleteWithdrawals(strategies); for (uint256 i = 0; i < withdrawals.length; ++i) { - uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].shares); + uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].scaledShares); IERC20[] memory tokens = staker.completeWithdrawalAsTokens(withdrawals[i]); - check_Withdrawal_AsTokens_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].shares, tokens, expectedTokens); + check_Withdrawal_AsTokens_State(staker, operator1, withdrawals[i], withdrawals[i].strategies, withdrawals[i].scaledShares, tokens, expectedTokens); } //5. Deposit into Strategies diff --git a/src/test/integration/tests/Deposit_Delegate_Undelegate_Complete.t.sol b/src/test/integration/tests/Deposit_Delegate_Undelegate_Complete.t.sol index 5921c17b4..4fbcda006 100644 --- a/src/test/integration/tests/Deposit_Delegate_Undelegate_Complete.t.sol +++ b/src/test/integration/tests/Deposit_Delegate_Undelegate_Complete.t.sol @@ -58,9 +58,9 @@ contract Integration_Deposit_Delegate_Undelegate_Complete is IntegrationCheckUti // Complete withdrawal for (uint256 i = 0; i < withdrawals.length; ++i) { - uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].shares); + uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].scaledShares); IERC20[] memory tokens = staker.completeWithdrawalAsTokens(withdrawals[i]); - check_Withdrawal_AsTokens_State(staker, operator, withdrawals[i], withdrawals[i].strategies, withdrawals[i].shares, tokens, expectedTokens); + check_Withdrawal_AsTokens_State(staker, operator, withdrawals[i], withdrawals[i].strategies, withdrawals[i].scaledShares, tokens, expectedTokens); } // Check Final State @@ -121,7 +121,7 @@ contract Integration_Deposit_Delegate_Undelegate_Complete is IntegrationCheckUti for (uint256 i = 0; i < withdrawals.length; ++i) { staker.completeWithdrawalAsShares(withdrawals[i]); - check_Withdrawal_AsShares_Undelegated_State(staker, operator, withdrawals[i], withdrawals[i].strategies, withdrawals[i].shares); + check_Withdrawal_AsShares_Undelegated_State(staker, operator, withdrawals[i], withdrawals[i].strategies, withdrawals[i].scaledShares); } // Check final state: @@ -176,9 +176,9 @@ contract Integration_Deposit_Delegate_Undelegate_Complete is IntegrationCheckUti _rollBlocksForCompleteWithdrawals(strategies); for (uint256 i = 0; i < withdrawals.length; ++i) { - uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].shares); + uint[] memory expectedTokens = _calculateExpectedTokens(withdrawals[i].strategies, withdrawals[i].scaledShares); IERC20[] memory tokens = staker.completeWithdrawalAsTokens(withdrawals[i]); - check_Withdrawal_AsTokens_State(staker, operator, withdrawals[i], withdrawals[i].strategies, withdrawals[i].shares, tokens, expectedTokens); + check_Withdrawal_AsTokens_State(staker, operator, withdrawals[i], withdrawals[i].strategies, withdrawals[i].scaledShares, tokens, expectedTokens); } // Check Final State @@ -233,7 +233,7 @@ contract Integration_Deposit_Delegate_Undelegate_Complete is IntegrationCheckUti _rollBlocksForCompleteWithdrawals(strategies); for (uint256 i = 0; i < withdrawals.length; ++i) { staker.completeWithdrawalAsShares(withdrawals[i]); - check_Withdrawal_AsShares_Undelegated_State(staker, operator, withdrawals[i], withdrawals[i].strategies, withdrawals[i].shares); + check_Withdrawal_AsShares_Undelegated_State(staker, operator, withdrawals[i], withdrawals[i].strategies, withdrawals[i].scaledShares); } // Check final state: diff --git a/src/test/integration/users/User.t.sol b/src/test/integration/users/User.t.sol index 86d70cdae..7203db39d 100644 --- a/src/test/integration/users/User.t.sol +++ b/src/test/integration/users/User.t.sol @@ -85,7 +85,7 @@ contract User is PrintUtils { stakerOptOutWindowBlocks: 0 }); - delegationManager.registerAsOperator(details, "metadata"); + delegationManager.registerAsOperator(details, 0, "metadata"); } /// @dev Delegate to the operator without a signature @@ -107,7 +107,7 @@ contract User is PrintUtils { emit log("expecting withdrawal:"); emit log_named_uint("nonce: ", expectedWithdrawals[i].nonce); emit log_named_address("strat: ", address(expectedWithdrawals[i].strategies[0])); - emit log_named_uint("shares: ", expectedWithdrawals[i].shares[0]); + emit log_named_uint("scaledShares: ", expectedWithdrawals[i].scaledShares[0]); } return expectedWithdrawals; @@ -125,7 +125,7 @@ contract User is PrintUtils { /// @dev Queues a single withdrawal for every share and strategy pair function queueWithdrawals( IStrategy[] memory strategies, - uint[] memory shares + uint[] memory scaledShares ) public createSnapshot virtual returns (IDelegationManager.Withdrawal[] memory) { _logM("queueWithdrawals"); @@ -137,7 +137,7 @@ contract User is PrintUtils { IDelegationManager.QueuedWithdrawalParams[] memory params = new IDelegationManager.QueuedWithdrawalParams[](1); params[0] = IDelegationManager.QueuedWithdrawalParams({ strategies: strategies, - shares: shares, + shares: scaledShares, withdrawer: withdrawer }); @@ -148,9 +148,9 @@ contract User is PrintUtils { delegatedTo: operator, withdrawer: withdrawer, nonce: nonce, - startBlock: uint32(block.number), + startTimestamp: uint32(block.number), //TODO strategies: strategies, - shares: shares + scaledShares: scaledShares }); bytes32[] memory withdrawalRoots = delegationManager.queueWithdrawals(params); @@ -339,7 +339,7 @@ contract User is PrintUtils { } } - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0, receiveAsTokens); + delegationManager.completeQueuedWithdrawal(withdrawal, tokens, receiveAsTokens); return tokens; } @@ -467,8 +467,8 @@ contract User is PrintUtils { /// @notice Gets the expected withdrawals to be created when the staker is undelegated via a call to `DelegationManager.undelegate()` /// @notice Assumes staker and withdrawer are the same and that all strategies and shares are withdrawn function _getExpectedWithdrawalStructsForStaker(address staker) internal view returns (IDelegationManager.Withdrawal[] memory) { - (IStrategy[] memory strategies, uint256[] memory shares) - = delegationManager.getDelegatableShares(staker); + (IStrategy[] memory strategies, uint256[] memory scaledShares) + = delegationManager.getDelegatableScaledShares(staker); IDelegationManager.Withdrawal[] memory expectedWithdrawals = new IDelegationManager.Withdrawal[](strategies.length); address delegatedTo = delegationManager.delegatedTo(staker); @@ -478,15 +478,15 @@ contract User is PrintUtils { IStrategy[] memory singleStrategy = new IStrategy[](1); uint256[] memory singleShares = new uint256[](1); singleStrategy[0] = strategies[i]; - singleShares[0] = shares[i]; + singleShares[0] = scaledShares[i]; expectedWithdrawals[i] = IDelegationManager.Withdrawal({ staker: staker, delegatedTo: delegatedTo, withdrawer: staker, nonce: (nonce + i), - startBlock: uint32(block.number), + startTimestamp: uint32(block.number), //TODO fix strategies: singleStrategy, - shares: singleShares + scaledShares: singleShares }); } diff --git a/src/test/mocks/AVSDirectoryMock.sol b/src/test/mocks/AVSDirectoryMock.sol index 5523cb713..a1f058562 100644 --- a/src/test/mocks/AVSDirectoryMock.sol +++ b/src/test/mocks/AVSDirectoryMock.sol @@ -48,10 +48,6 @@ contract AVSDirectoryMock is IAVSDirectory, Test { uint16[] calldata freeMagnitudes ) external {} - function initializeAllocationDelay( - uint32 delay - ) external {} - function slashOperator( address operator, uint32 operatorSetId, @@ -63,8 +59,6 @@ contract AVSDirectoryMock is IAVSDirectory, Test { function cancelSalt(bytes32 salt) external {} - function INITIAL_TOTAL_MAGNITUDE() external view returns (uint64) {} - function operatorSaltIsSpent(address operator, bytes32 salt) external view returns (bool) {} function isMember(address avs, address operator, uint32 operatorSetId) external view returns (bool) {} @@ -91,7 +85,11 @@ contract AVSDirectoryMock is IAVSDirectory, Test { uint16 numToComplete ) external view returns (uint64) {} - function getAllocationDelay(address operator) external view returns (bool, uint32) {} + function DEALLOCATION_DELAY() external view returns (uint32) {} + + function getTotalMagnitudes(address operator, IStrategy[] calldata strategies) external view returns (uint64[] memory) {} + + function getTotalMagnitudesAtTimestamp(address operator, IStrategy[] calldata strategies, uint32 timestamp) external view returns (uint64[] memory) {} function calculateOperatorAVSRegistrationDigestHash( address operator, diff --git a/src/test/mocks/DelegationManagerMock.sol b/src/test/mocks/DelegationManagerMock.sol index 0a4fe3141..a396083f1 100644 --- a/src/test/mocks/DelegationManagerMock.sol +++ b/src/test/mocks/DelegationManagerMock.sol @@ -21,7 +21,13 @@ contract DelegationManagerMock is IDelegationManager, Test { mapping (address => address) public delegatedTo; - function registerAsOperator(OperatorDetails calldata /*registeringOperatorDetails*/, string calldata /*metadataURI*/) external pure {} + function registerAsOperator( + OperatorDetails calldata /*registeringOperatorDetails*/, + uint32 /*allocationDelay*/, + string calldata /*metadataURI*/ + ) external pure {} + + function initializeAllocationDelay(uint32 /*delay*/) external {} function updateOperatorMetadataURI(string calldata /*metadataURI*/) external pure {} @@ -46,13 +52,13 @@ contract DelegationManagerMock is IDelegationManager, Test { return withdrawalRoot; } - function increaseDelegatedShares(address /*staker*/, IStrategy /*strategy*/, uint256 /*shares*/) external pure {} - - function decreaseDelegatedShares( - address /*staker*/, - IStrategy /*strategy*/, - uint256 /*shares*/ - ) external pure {} + function increaseDelegatedScaledShares( + address staker, + IStrategy strategy, + uint256 scaledShares + ) external {} + + function decreaseDelegatedScaledShares(address staker, IStrategy strategy, uint256 shares) external {} function operatorDetails(address operator) external pure returns (OperatorDetails memory) { OperatorDetails memory returnValue = OperatorDetails({ @@ -63,6 +69,8 @@ contract DelegationManagerMock is IDelegationManager, Test { return returnValue; } + function operatorAllocationDelay(address operator) external view returns (AllocationDelayDetails memory) {} + function delegationApprover(address operator) external pure returns (address) { return operator; } @@ -85,16 +93,35 @@ contract DelegationManagerMock is IDelegationManager, Test { function strategyWithdrawalDelayBlocks(IStrategy /*strategy*/) external pure returns (uint256) { return 0; } + + function getOperatorScaledShares( + address operator, + IStrategy[] memory strategies + ) external view returns (uint256[] memory) {} function getOperatorShares( address operator, IStrategy[] memory strategies ) external view returns (uint256[] memory) {} + function getStakerScaledShares( + address staker, + IStrategy strategy, + uint256 shares + ) external view returns (uint256 scaledShares) {} + + function getStakerShares( + address staker, + IStrategy strategy, + uint256 scaledShares + ) public view returns (uint256 shares) {} + function getWithdrawalDelay(IStrategy[] calldata /*strategies*/) public pure returns (uint256) { return 0; } + function operatorScaledShares(address operator, IStrategy strategy) external view returns (uint256) {} + function isDelegated(address staker) external view returns (bool) { return (delegatedTo[staker] != address(0)); } @@ -155,35 +182,33 @@ contract DelegationManagerMock is IDelegationManager, Test { function completeQueuedWithdrawal( Withdrawal calldata withdrawal, IERC20[] calldata tokens, - uint256 middlewareTimesIndex, bool receiveAsTokens ) external {} function completeQueuedWithdrawals( Withdrawal[] calldata withdrawals, IERC20[][] calldata tokens, - uint256[] calldata middlewareTimesIndexes, bool[] calldata receiveAsTokens ) external {} // onlyDelegationManager functions in StrategyManager - function addShares( + function addScaledShares( IStrategyManager strategyManager, address staker, IERC20 token, IStrategy strategy, uint256 shares ) external { - strategyManager.addShares(staker, token, strategy, shares); + strategyManager.addScaledShares(staker, token, strategy, shares); } - function removeShares( + function removeScaledShares( IStrategyManager strategyManager, address staker, IStrategy strategy, uint256 shares ) external { - strategyManager.removeShares(staker, strategy, shares); + strategyManager.removeScaledShares(staker, strategy, shares); } function withdrawSharesAsTokens( diff --git a/src/test/mocks/EigenPodManagerMock.sol b/src/test/mocks/EigenPodManagerMock.sol index 127fcc49a..ad48c0a06 100644 --- a/src/test/mocks/EigenPodManagerMock.sol +++ b/src/test/mocks/EigenPodManagerMock.sol @@ -41,6 +41,10 @@ contract EigenPodManagerMock is IEigenPodManager, Test, Pausable { return false; } + function podOwnerScaledShares(address podOwner) external view returns (int256) { + return podShares[podOwner]; + } + function podOwnerShares(address podOwner) external view returns (int256) { return podShares[podOwner]; } @@ -49,14 +53,14 @@ contract EigenPodManagerMock is IEigenPodManager, Test, Pausable { podShares[podOwner] = shares; } - function addShares(address /*podOwner*/, uint256 shares) external pure returns (uint256) { + function addScaledShares(address /*podOwner*/, uint256 scaledShares) external pure returns (uint256) { // this is the "increase in delegateable tokens" - return (shares); + return (scaledShares); } function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) external {} - function removeShares(address podOwner, uint256 shares) external {} + function removeScaledShares(address podOwner, uint256 scaledShares) external {} function numPods() external view returns (uint256) {} diff --git a/src/test/mocks/StrategyManagerMock.sol b/src/test/mocks/StrategyManagerMock.sol index d0bbc87a6..f75ffbfaa 100644 --- a/src/test/mocks/StrategyManagerMock.sol +++ b/src/test/mocks/StrategyManagerMock.sol @@ -67,7 +67,7 @@ contract StrategyManagerMock is returns (uint256 shares) {} /// @notice Returns the current shares of `user` in `strategy` - function stakerStrategyShares(address user, IStrategy strategy) external view returns (uint256 shares) {} + function stakerStrategyScaledShares(address user, IStrategy strategy) external view returns (uint256 shares) {} /** * @notice mocks the return value of getDeposits @@ -98,6 +98,13 @@ contract StrategyManagerMock is function stakerStrats(address staker) external view returns (IStrategy[] memory) {} uint256 public stakerStrategyListLengthReturnValue; + + /// @notice Returns the current shares of `user` in `strategy` + function stakerStrategyShares( + address user, + IStrategy strategy + ) external view returns (uint256 shares) {} + /// @notice Simple getter function that returns `stakerStrategyList[staker].length`. function stakerStrategyListLength(address /*staker*/) external view returns (uint256) { return stakerStrategyListLengthReturnValue; @@ -111,9 +118,9 @@ contract StrategyManagerMock is strategyIsWhitelistedForDeposit[strategy] = value; } - function removeShares(address staker, IStrategy strategy, uint256 shares) external {} + function removeScaledShares(address staker, IStrategy strategy, uint256 shares) external {} - function addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external {} + function addScaledShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external {} function withdrawSharesAsTokens(address recipient, IStrategy strategy, uint256 shares, IERC20 token) external {} diff --git a/src/test/unit/AVSDirectoryUnit.t.sol b/src/test/unit/AVSDirectoryUnit.t.sol index be166b3c4..b1d7b4562 100644 --- a/src/test/unit/AVSDirectoryUnit.t.sol +++ b/src/test/unit/AVSDirectoryUnit.t.sol @@ -160,7 +160,7 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { ) internal filterFuzzedAddressInputs(operator) { _filterOperatorDetails(operator, operatorDetails); cheats.prank(operator); - delegationManager.registerAsOperator(operatorDetails, metadataURI); + delegationManager.registerAsOperator(operatorDetails, 0,metadataURI); } function _filterOperatorDetails( diff --git a/src/test/unit/DelegationUnit.t.sol b/src/test/unit/DelegationUnit.t.sol index 1deb860fc..3fbd8db0e 100644 --- a/src/test/unit/DelegationUnit.t.sol +++ b/src/test/unit/DelegationUnit.t.sol @@ -1,3324 +1,3324 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; -import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; - -import "src/contracts/core/DelegationManager.sol"; -import "src/contracts/strategies/StrategyBase.sol"; - -import "src/test/events/IDelegationManagerEvents.sol"; -import "src/test/utils/EigenLayerUnitTestSetup.sol"; - -/** - * @notice Unit testing of the DelegationManager contract. Withdrawals are tightly coupled - * with EigenPodManager and StrategyManager and are part of integration tests. - * Contracts tested: DelegationManager - * Contracts not mocked: StrategyBase, PauserRegistry - */ -contract DelegationManagerUnitTests is EigenLayerUnitTestSetup, IDelegationManagerEvents { - // Contract under test - DelegationManager delegationManager; - DelegationManager delegationManagerImplementation; - - // Mocks - StrategyBase strategyImplementation; - StrategyBase strategyMock; - IERC20 mockToken; - uint256 mockTokenInitialSupply = 10e50; - - // Delegation signer - uint256 delegationSignerPrivateKey = uint256(0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80); - uint256 stakerPrivateKey = uint256(123_456_789); - - // empty string reused across many tests - string emptyStringForMetadataURI; - - // "empty" / zero salt, reused across many tests - bytes32 emptySalt; - - // reused in various tests. in storage to help handle stack-too-deep errors - address defaultStaker = cheats.addr(uint256(123_456_789)); - address defaultOperator = address(this); - address defaultApprover = cheats.addr(delegationSignerPrivateKey); - address defaultAVS = address(this); - - // 604800 seconds in week / 12 = 50,400 blocks - uint256 minWithdrawalDelayBlocks = 50400; - IStrategy[] public initializeStrategiesToSetDelayBlocks; - uint256[] public initializeWithdrawalDelayBlocks; - - IStrategy public constant beaconChainETHStrategy = IStrategy(0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0); - - // Index for flag that pauses new delegations when set. - uint8 internal constant PAUSED_NEW_DELEGATION = 0; - - // Index for flag that pauses queuing new withdrawals when set. - uint8 internal constant PAUSED_ENTER_WITHDRAWAL_QUEUE = 1; - - // Index for flag that pauses completing existing withdrawals when set. - uint8 internal constant PAUSED_EXIT_WITHDRAWAL_QUEUE = 2; - - // the number of 12-second blocks in 30 days (60 * 60 * 24 * 30 / 12 = 216,000) - uint256 public constant MAX_WITHDRAWAL_DELAY_BLOCKS = 216000; - - /// @notice mappings used to handle duplicate entries in fuzzed address array input - mapping(address => uint256) public totalSharesForStrategyInArray; - mapping(IStrategy => uint256) public delegatedSharesBefore; - - function setUp() public virtual override { - // Setup - EigenLayerUnitTestSetup.setUp(); - - // Deploy DelegationManager implmentation and proxy - initializeStrategiesToSetDelayBlocks = new IStrategy[](0); - initializeWithdrawalDelayBlocks = new uint256[](0); - delegationManagerImplementation = new DelegationManager(strategyManagerMock, slasherMock, eigenPodManagerMock); - delegationManager = DelegationManager( - address( - new TransparentUpgradeableProxy( - address(delegationManagerImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector( - DelegationManager.initialize.selector, - address(this), - pauserRegistry, - 0, // 0 is initialPausedStatus - minWithdrawalDelayBlocks, - initializeStrategiesToSetDelayBlocks, - initializeWithdrawalDelayBlocks - ) - ) - ) - ); - - // Deploy mock token and strategy - mockToken = new ERC20PresetFixedSupply("Mock Token", "MOCK", mockTokenInitialSupply, address(this)); - strategyImplementation = new StrategyBase(strategyManagerMock); - strategyMock = StrategyBase( - address( - new TransparentUpgradeableProxy( - address(strategyImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector(StrategyBase.initialize.selector, mockToken, pauserRegistry) - ) - ) - ); - - // Exclude delegation manager from fuzzed tests - addressIsExcludedFromFuzzedInputs[address(delegationManager)] = true; - addressIsExcludedFromFuzzedInputs[defaultApprover] = true; - } - - /** - * INTERNAL / HELPER FUNCTIONS - */ - - /** - * @notice internal function to deploy mock tokens and strategies and have the staker deposit into them. - * Since we are mocking the strategyManager we call strategyManagerMock.setDeposits so that when - * DelegationManager calls getDeposits, we can have these share amounts returned. - */ - function _deployAndDepositIntoStrategies( - address staker, - uint256[] memory sharesAmounts - ) internal returns (IStrategy[] memory) { - uint256 numStrats = sharesAmounts.length; - IStrategy[] memory strategies = new IStrategy[](numStrats); - uint256[] memory withdrawalDelayBlocks = new uint256[](strategies.length); - for (uint8 i = 0; i < numStrats; i++) { - withdrawalDelayBlocks[i] = bound(uint256(keccak256(abi.encode(staker, i))), 0, MAX_WITHDRAWAL_DELAY_BLOCKS); - ERC20PresetFixedSupply token = new ERC20PresetFixedSupply( - string(abi.encodePacked("Mock Token ", i)), - string(abi.encodePacked("MOCK", i)), - mockTokenInitialSupply, - address(this) - ); - strategies[i] = StrategyBase( - address( - new TransparentUpgradeableProxy( - address(strategyImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector(StrategyBase.initialize.selector, token, pauserRegistry) - ) - ) - ); - } - delegationManager.setStrategyWithdrawalDelayBlocks(strategies, withdrawalDelayBlocks); - strategyManagerMock.setDeposits(staker, strategies, sharesAmounts); - return strategies; - } - - /** - * @notice internal function for calculating a signature from the delegationSigner corresponding to `_delegationSignerPrivateKey`, approving - * the `staker` to delegate to `operator`, with the specified `salt`, and expiring at `expiry`. - */ - function _getApproverSignature( - uint256 _delegationSignerPrivateKey, - address staker, - address operator, - bytes32 salt, - uint256 expiry - ) internal view returns (ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry) { - approverSignatureAndExpiry.expiry = expiry; - { - bytes32 digestHash = delegationManager.calculateDelegationApprovalDigestHash( - staker, - operator, - delegationManager.delegationApprover(operator), - salt, - expiry - ); - (uint8 v, bytes32 r, bytes32 s) = cheats.sign(_delegationSignerPrivateKey, digestHash); - approverSignatureAndExpiry.signature = abi.encodePacked(r, s, v); - } - return approverSignatureAndExpiry; - } - - /** - * @notice internal function for calculating a signature from the staker corresponding to `_stakerPrivateKey`, delegating them to - * the `operator`, and expiring at `expiry`. - */ - function _getStakerSignature( - uint256 _stakerPrivateKey, - address operator, - uint256 expiry - ) internal view returns (ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry) { - address staker = cheats.addr(stakerPrivateKey); - stakerSignatureAndExpiry.expiry = expiry; - { - bytes32 digestHash = delegationManager.calculateCurrentStakerDelegationDigestHash(staker, operator, expiry); - (uint8 v, bytes32 r, bytes32 s) = cheats.sign(_stakerPrivateKey, digestHash); - stakerSignatureAndExpiry.signature = abi.encodePacked(r, s, v); - } - return stakerSignatureAndExpiry; - } - - // @notice Assumes operator does not have a delegation approver & staker != approver - function _delegateToOperatorWhoAcceptsAllStakers(address staker, address operator) internal { - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - cheats.prank(staker); - delegationManager.delegateTo(operator, approverSignatureAndExpiry, emptySalt); - } - - function _delegateToOperatorWhoRequiresSig(address staker, address operator, bytes32 salt) internal { - uint256 expiry = type(uint256).max; - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - staker, - operator, - salt, - expiry - ); - cheats.prank(staker); - delegationManager.delegateTo(operator, approverSignatureAndExpiry, salt); - } - - function _delegateToOperatorWhoRequiresSig(address staker, address operator) internal { - _delegateToOperatorWhoRequiresSig(staker, operator, emptySalt); - } - - function _delegateToBySignatureOperatorWhoAcceptsAllStakers( - address staker, - address caller, - address operator, - ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry, - bytes32 salt - ) internal { - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - cheats.prank(caller); - delegationManager.delegateToBySignature( - staker, - operator, - stakerSignatureAndExpiry, - approverSignatureAndExpiry, - salt - ); - } - - function _delegateToBySignatureOperatorWhoRequiresSig( - address staker, - address caller, - address operator, - ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry, - bytes32 salt - ) internal { - uint256 expiry = type(uint256).max; - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - staker, - operator, - salt, - expiry - ); - cheats.prank(caller); - delegationManager.delegateToBySignature( - staker, - operator, - stakerSignatureAndExpiry, - approverSignatureAndExpiry, - salt - ); - } - - function _registerOperatorWithBaseDetails(address operator) internal { - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: operator, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }); - _registerOperator(operator, operatorDetails, emptyStringForMetadataURI); - } - - function _registerOperatorWithDelegationApprover(address operator) internal { - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: operator, - delegationApprover: defaultApprover, - stakerOptOutWindowBlocks: 0 - }); - _registerOperator(operator, operatorDetails, emptyStringForMetadataURI); - } - - function _registerOperatorWith1271DelegationApprover(address operator) internal returns (ERC1271WalletMock) { - address delegationSigner = defaultApprover; - /** - * deploy a ERC1271WalletMock contract with the `delegationSigner` address as the owner, - * so that we can create valid signatures from the `delegationSigner` for the contract to check when called - */ - ERC1271WalletMock wallet = new ERC1271WalletMock(delegationSigner); - - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: operator, - delegationApprover: address(wallet), - stakerOptOutWindowBlocks: 0 - }); - _registerOperator(operator, operatorDetails, emptyStringForMetadataURI); - - return wallet; - } - - function _registerOperator( - address operator, - IDelegationManager.OperatorDetails memory operatorDetails, - string memory metadataURI - ) internal filterFuzzedAddressInputs(operator) { - _filterOperatorDetails(operator, operatorDetails); - cheats.prank(operator); - delegationManager.registerAsOperator(operatorDetails, metadataURI); - } - - function _filterOperatorDetails( - address operator, - IDelegationManager.OperatorDetails memory operatorDetails - ) internal view { - // filter out zero address since people can't delegate to the zero address and operators are delegated to themselves - cheats.assume(operator != address(0)); - // filter out disallowed stakerOptOutWindowBlocks values - cheats.assume(operatorDetails.stakerOptOutWindowBlocks <= delegationManager.MAX_STAKER_OPT_OUT_WINDOW_BLOCKS()); - } - - /** - * @notice Using this helper function to fuzz withdrawalAmounts since fuzzing two dynamic sized arrays of equal lengths - * reject too many inputs. - */ - function _fuzzWithdrawalAmounts(uint256[] memory depositAmounts) internal view returns (uint256[] memory) { - uint256[] memory withdrawalAmounts = new uint256[](depositAmounts.length); - for (uint256 i = 0; i < depositAmounts.length; i++) { - cheats.assume(depositAmounts[i] > 0); - // generate withdrawal amount within range s.t withdrawAmount <= depositAmount - withdrawalAmounts[i] = bound( - uint256(keccak256(abi.encodePacked(depositAmounts[i]))), - 0, - depositAmounts[i] - ); - } - return withdrawalAmounts; - } - - function _setUpQueueWithdrawalsSingleStrat( - address staker, - address withdrawer, - IStrategy strategy, - uint256 withdrawalAmount - ) internal view returns ( - IDelegationManager.QueuedWithdrawalParams[] memory, - IDelegationManager.Withdrawal memory, - bytes32 - ) { - IStrategy[] memory strategyArray = new IStrategy[](1); - strategyArray[0] = strategy; - uint256[] memory withdrawalAmounts = new uint256[](1); - withdrawalAmounts[0] = withdrawalAmount; - - IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams = new IDelegationManager.QueuedWithdrawalParams[](1); - queuedWithdrawalParams[0] = IDelegationManager.QueuedWithdrawalParams({ - strategies: strategyArray, - shares: withdrawalAmounts, - withdrawer: withdrawer - }); - - IDelegationManager.Withdrawal memory withdrawal = IDelegationManager.Withdrawal({ - staker: staker, - delegatedTo: delegationManager.delegatedTo(staker), - withdrawer: withdrawer, - nonce: delegationManager.cumulativeWithdrawalsQueued(staker), - startBlock: uint32(block.number), - strategies: strategyArray, - shares: withdrawalAmounts - }); - bytes32 withdrawalRoot = delegationManager.calculateWithdrawalRoot(withdrawal); +// // SPDX-License-Identifier: BUSL-1.1 +// pragma solidity ^0.8.12; + +// import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; +// import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; + +// import "src/contracts/core/DelegationManager.sol"; +// import "src/contracts/strategies/StrategyBase.sol"; + +// import "src/test/events/IDelegationManagerEvents.sol"; +// import "src/test/utils/EigenLayerUnitTestSetup.sol"; + +// /** +// * @notice Unit testing of the DelegationManager contract. Withdrawals are tightly coupled +// * with EigenPodManager and StrategyManager and are part of integration tests. +// * Contracts tested: DelegationManager +// * Contracts not mocked: StrategyBase, PauserRegistry +// */ +// contract DelegationManagerUnitTests is EigenLayerUnitTestSetup, IDelegationManagerEvents { +// // Contract under test +// DelegationManager delegationManager; +// DelegationManager delegationManagerImplementation; + +// // Mocks +// StrategyBase strategyImplementation; +// StrategyBase strategyMock; +// IERC20 mockToken; +// uint256 mockTokenInitialSupply = 10e50; + +// // Delegation signer +// uint256 delegationSignerPrivateKey = uint256(0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80); +// uint256 stakerPrivateKey = uint256(123_456_789); + +// // empty string reused across many tests +// string emptyStringForMetadataURI; + +// // "empty" / zero salt, reused across many tests +// bytes32 emptySalt; + +// // reused in various tests. in storage to help handle stack-too-deep errors +// address defaultStaker = cheats.addr(uint256(123_456_789)); +// address defaultOperator = address(this); +// address defaultApprover = cheats.addr(delegationSignerPrivateKey); +// address defaultAVS = address(this); + +// // 604800 seconds in week / 12 = 50,400 blocks +// uint256 minWithdrawalDelayBlocks = 50400; +// IStrategy[] public initializeStrategiesToSetDelayBlocks; +// uint256[] public initializeWithdrawalDelayBlocks; + +// IStrategy public constant beaconChainETHStrategy = IStrategy(0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0); + +// // Index for flag that pauses new delegations when set. +// uint8 internal constant PAUSED_NEW_DELEGATION = 0; + +// // Index for flag that pauses queuing new withdrawals when set. +// uint8 internal constant PAUSED_ENTER_WITHDRAWAL_QUEUE = 1; + +// // Index for flag that pauses completing existing withdrawals when set. +// uint8 internal constant PAUSED_EXIT_WITHDRAWAL_QUEUE = 2; + +// // the number of 12-second blocks in 30 days (60 * 60 * 24 * 30 / 12 = 216,000) +// uint256 public constant MAX_WITHDRAWAL_DELAY_BLOCKS = 216000; + +// /// @notice mappings used to handle duplicate entries in fuzzed address array input +// mapping(address => uint256) public totalSharesForStrategyInArray; +// mapping(IStrategy => uint256) public delegatedSharesBefore; + +// function setUp() public virtual override { +// // Setup +// EigenLayerUnitTestSetup.setUp(); + +// // Deploy DelegationManager implmentation and proxy +// initializeStrategiesToSetDelayBlocks = new IStrategy[](0); +// initializeWithdrawalDelayBlocks = new uint256[](0); +// delegationManagerImplementation = new DelegationManager(strategyManagerMock, slasherMock, eigenPodManagerMock); +// delegationManager = DelegationManager( +// address( +// new TransparentUpgradeableProxy( +// address(delegationManagerImplementation), +// address(eigenLayerProxyAdmin), +// abi.encodeWithSelector( +// DelegationManager.initialize.selector, +// address(this), +// pauserRegistry, +// 0, // 0 is initialPausedStatus +// minWithdrawalDelayBlocks, +// initializeStrategiesToSetDelayBlocks, +// initializeWithdrawalDelayBlocks +// ) +// ) +// ) +// ); + +// // Deploy mock token and strategy +// mockToken = new ERC20PresetFixedSupply("Mock Token", "MOCK", mockTokenInitialSupply, address(this)); +// strategyImplementation = new StrategyBase(strategyManagerMock); +// strategyMock = StrategyBase( +// address( +// new TransparentUpgradeableProxy( +// address(strategyImplementation), +// address(eigenLayerProxyAdmin), +// abi.encodeWithSelector(StrategyBase.initialize.selector, mockToken, pauserRegistry) +// ) +// ) +// ); + +// // Exclude delegation manager from fuzzed tests +// addressIsExcludedFromFuzzedInputs[address(delegationManager)] = true; +// addressIsExcludedFromFuzzedInputs[defaultApprover] = true; +// } + +// /** +// * INTERNAL / HELPER FUNCTIONS +// */ + +// /** +// * @notice internal function to deploy mock tokens and strategies and have the staker deposit into them. +// * Since we are mocking the strategyManager we call strategyManagerMock.setDeposits so that when +// * DelegationManager calls getDeposits, we can have these share amounts returned. +// */ +// function _deployAndDepositIntoStrategies( +// address staker, +// uint256[] memory sharesAmounts +// ) internal returns (IStrategy[] memory) { +// uint256 numStrats = sharesAmounts.length; +// IStrategy[] memory strategies = new IStrategy[](numStrats); +// uint256[] memory withdrawalDelayBlocks = new uint256[](strategies.length); +// for (uint8 i = 0; i < numStrats; i++) { +// withdrawalDelayBlocks[i] = bound(uint256(keccak256(abi.encode(staker, i))), 0, MAX_WITHDRAWAL_DELAY_BLOCKS); +// ERC20PresetFixedSupply token = new ERC20PresetFixedSupply( +// string(abi.encodePacked("Mock Token ", i)), +// string(abi.encodePacked("MOCK", i)), +// mockTokenInitialSupply, +// address(this) +// ); +// strategies[i] = StrategyBase( +// address( +// new TransparentUpgradeableProxy( +// address(strategyImplementation), +// address(eigenLayerProxyAdmin), +// abi.encodeWithSelector(StrategyBase.initialize.selector, token, pauserRegistry) +// ) +// ) +// ); +// } +// delegationManager.setStrategyWithdrawalDelayBlocks(strategies, withdrawalDelayBlocks); +// strategyManagerMock.setDeposits(staker, strategies, sharesAmounts); +// return strategies; +// } + +// /** +// * @notice internal function for calculating a signature from the delegationSigner corresponding to `_delegationSignerPrivateKey`, approving +// * the `staker` to delegate to `operator`, with the specified `salt`, and expiring at `expiry`. +// */ +// function _getApproverSignature( +// uint256 _delegationSignerPrivateKey, +// address staker, +// address operator, +// bytes32 salt, +// uint256 expiry +// ) internal view returns (ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry) { +// approverSignatureAndExpiry.expiry = expiry; +// { +// bytes32 digestHash = delegationManager.calculateDelegationApprovalDigestHash( +// staker, +// operator, +// delegationManager.delegationApprover(operator), +// salt, +// expiry +// ); +// (uint8 v, bytes32 r, bytes32 s) = cheats.sign(_delegationSignerPrivateKey, digestHash); +// approverSignatureAndExpiry.signature = abi.encodePacked(r, s, v); +// } +// return approverSignatureAndExpiry; +// } + +// /** +// * @notice internal function for calculating a signature from the staker corresponding to `_stakerPrivateKey`, delegating them to +// * the `operator`, and expiring at `expiry`. +// */ +// function _getStakerSignature( +// uint256 _stakerPrivateKey, +// address operator, +// uint256 expiry +// ) internal view returns (ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry) { +// address staker = cheats.addr(stakerPrivateKey); +// stakerSignatureAndExpiry.expiry = expiry; +// { +// bytes32 digestHash = delegationManager.calculateCurrentStakerDelegationDigestHash(staker, operator, expiry); +// (uint8 v, bytes32 r, bytes32 s) = cheats.sign(_stakerPrivateKey, digestHash); +// stakerSignatureAndExpiry.signature = abi.encodePacked(r, s, v); +// } +// return stakerSignatureAndExpiry; +// } + +// // @notice Assumes operator does not have a delegation approver & staker != approver +// function _delegateToOperatorWhoAcceptsAllStakers(address staker, address operator) internal { +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// cheats.prank(staker); +// delegationManager.delegateTo(operator, approverSignatureAndExpiry, emptySalt); +// } + +// function _delegateToOperatorWhoRequiresSig(address staker, address operator, bytes32 salt) internal { +// uint256 expiry = type(uint256).max; +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// staker, +// operator, +// salt, +// expiry +// ); +// cheats.prank(staker); +// delegationManager.delegateTo(operator, approverSignatureAndExpiry, salt); +// } + +// function _delegateToOperatorWhoRequiresSig(address staker, address operator) internal { +// _delegateToOperatorWhoRequiresSig(staker, operator, emptySalt); +// } + +// function _delegateToBySignatureOperatorWhoAcceptsAllStakers( +// address staker, +// address caller, +// address operator, +// ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry, +// bytes32 salt +// ) internal { +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// cheats.prank(caller); +// delegationManager.delegateToBySignature( +// staker, +// operator, +// stakerSignatureAndExpiry, +// approverSignatureAndExpiry, +// salt +// ); +// } + +// function _delegateToBySignatureOperatorWhoRequiresSig( +// address staker, +// address caller, +// address operator, +// ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry, +// bytes32 salt +// ) internal { +// uint256 expiry = type(uint256).max; +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// staker, +// operator, +// salt, +// expiry +// ); +// cheats.prank(caller); +// delegationManager.delegateToBySignature( +// staker, +// operator, +// stakerSignatureAndExpiry, +// approverSignatureAndExpiry, +// salt +// ); +// } + +// function _registerOperatorWithBaseDetails(address operator) internal { +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: operator, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }); +// _registerOperator(operator, operatorDetails, emptyStringForMetadataURI); +// } + +// function _registerOperatorWithDelegationApprover(address operator) internal { +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: operator, +// delegationApprover: defaultApprover, +// stakerOptOutWindowBlocks: 0 +// }); +// _registerOperator(operator, operatorDetails, emptyStringForMetadataURI); +// } + +// function _registerOperatorWith1271DelegationApprover(address operator) internal returns (ERC1271WalletMock) { +// address delegationSigner = defaultApprover; +// /** +// * deploy a ERC1271WalletMock contract with the `delegationSigner` address as the owner, +// * so that we can create valid signatures from the `delegationSigner` for the contract to check when called +// */ +// ERC1271WalletMock wallet = new ERC1271WalletMock(delegationSigner); + +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: operator, +// delegationApprover: address(wallet), +// stakerOptOutWindowBlocks: 0 +// }); +// _registerOperator(operator, operatorDetails, emptyStringForMetadataURI); + +// return wallet; +// } + +// function _registerOperator( +// address operator, +// IDelegationManager.OperatorDetails memory operatorDetails, +// string memory metadataURI +// ) internal filterFuzzedAddressInputs(operator) { +// _filterOperatorDetails(operator, operatorDetails); +// cheats.prank(operator); +// delegationManager.registerAsOperator(operatorDetails, metadataURI); +// } + +// function _filterOperatorDetails( +// address operator, +// IDelegationManager.OperatorDetails memory operatorDetails +// ) internal view { +// // filter out zero address since people can't delegate to the zero address and operators are delegated to themselves +// cheats.assume(operator != address(0)); +// // filter out disallowed stakerOptOutWindowBlocks values +// cheats.assume(operatorDetails.stakerOptOutWindowBlocks <= delegationManager.MAX_STAKER_OPT_OUT_WINDOW_BLOCKS()); +// } + +// /** +// * @notice Using this helper function to fuzz withdrawalAmounts since fuzzing two dynamic sized arrays of equal lengths +// * reject too many inputs. +// */ +// function _fuzzWithdrawalAmounts(uint256[] memory depositAmounts) internal view returns (uint256[] memory) { +// uint256[] memory withdrawalAmounts = new uint256[](depositAmounts.length); +// for (uint256 i = 0; i < depositAmounts.length; i++) { +// cheats.assume(depositAmounts[i] > 0); +// // generate withdrawal amount within range s.t withdrawAmount <= depositAmount +// withdrawalAmounts[i] = bound( +// uint256(keccak256(abi.encodePacked(depositAmounts[i]))), +// 0, +// depositAmounts[i] +// ); +// } +// return withdrawalAmounts; +// } + +// function _setUpQueueWithdrawalsSingleStrat( +// address staker, +// address withdrawer, +// IStrategy strategy, +// uint256 withdrawalAmount +// ) internal view returns ( +// IDelegationManager.QueuedWithdrawalParams[] memory, +// IDelegationManager.Withdrawal memory, +// bytes32 +// ) { +// IStrategy[] memory strategyArray = new IStrategy[](1); +// strategyArray[0] = strategy; +// uint256[] memory withdrawalAmounts = new uint256[](1); +// withdrawalAmounts[0] = withdrawalAmount; + +// IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams = new IDelegationManager.QueuedWithdrawalParams[](1); +// queuedWithdrawalParams[0] = IDelegationManager.QueuedWithdrawalParams({ +// strategies: strategyArray, +// shares: withdrawalAmounts, +// withdrawer: withdrawer +// }); + +// IDelegationManager.Withdrawal memory withdrawal = IDelegationManager.Withdrawal({ +// staker: staker, +// delegatedTo: delegationManager.delegatedTo(staker), +// withdrawer: withdrawer, +// nonce: delegationManager.cumulativeWithdrawalsQueued(staker), +// startBlock: uint32(block.number), +// strategies: strategyArray, +// scaledShares: withdrawalAmounts +// }); +// bytes32 withdrawalRoot = delegationManager.calculateWithdrawalRoot(withdrawal); - return (queuedWithdrawalParams, withdrawal, withdrawalRoot); - } - - function _setUpQueueWithdrawals( - address staker, - address withdrawer, - IStrategy[] memory strategies, - uint256[] memory withdrawalAmounts - ) internal view returns ( - IDelegationManager.QueuedWithdrawalParams[] memory, - IDelegationManager.Withdrawal memory, - bytes32 - ) { - IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams = new IDelegationManager.QueuedWithdrawalParams[](1); - queuedWithdrawalParams[0] = IDelegationManager.QueuedWithdrawalParams({ - strategies: strategies, - shares: withdrawalAmounts, - withdrawer: withdrawer - }); +// return (queuedWithdrawalParams, withdrawal, withdrawalRoot); +// } + +// function _setUpQueueWithdrawals( +// address staker, +// address withdrawer, +// IStrategy[] memory strategies, +// uint256[] memory withdrawalAmounts +// ) internal view returns ( +// IDelegationManager.QueuedWithdrawalParams[] memory, +// IDelegationManager.Withdrawal memory, +// bytes32 +// ) { +// IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams = new IDelegationManager.QueuedWithdrawalParams[](1); +// queuedWithdrawalParams[0] = IDelegationManager.QueuedWithdrawalParams({ +// strategies: strategies, +// shares: withdrawalAmounts, +// withdrawer: withdrawer +// }); - IDelegationManager.Withdrawal memory withdrawal = IDelegationManager.Withdrawal({ - staker: staker, - delegatedTo: delegationManager.delegatedTo(staker), - withdrawer: withdrawer, - nonce: delegationManager.cumulativeWithdrawalsQueued(staker), - startBlock: uint32(block.number), - strategies: strategies, - shares: withdrawalAmounts - }); - bytes32 withdrawalRoot = delegationManager.calculateWithdrawalRoot(withdrawal); +// IDelegationManager.Withdrawal memory withdrawal = IDelegationManager.Withdrawal({ +// staker: staker, +// delegatedTo: delegationManager.delegatedTo(staker), +// withdrawer: withdrawer, +// nonce: delegationManager.cumulativeWithdrawalsQueued(staker), +// startBlock: uint32(block.number), +// strategies: strategies, +// scaledShares: withdrawalAmounts +// }); +// bytes32 withdrawalRoot = delegationManager.calculateWithdrawalRoot(withdrawal); - return (queuedWithdrawalParams, withdrawal, withdrawalRoot); - } - - /** - * Deploy and deposit staker into a single strategy, then set up a queued withdrawal for the staker - * Assumptions: - * - operator is already a registered operator. - * - withdrawalAmount <= depositAmount - */ - function _setUpCompleteQueuedWithdrawalSingleStrat( - address staker, - address withdrawer, - uint256 depositAmount, - uint256 withdrawalAmount - ) internal returns (IDelegationManager.Withdrawal memory, IERC20[] memory, bytes32) { - uint256[] memory depositAmounts = new uint256[](1); - depositAmounts[0] = depositAmount; - IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, depositAmounts); - ( - IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, - IDelegationManager.Withdrawal memory withdrawal, - bytes32 withdrawalRoot - ) = _setUpQueueWithdrawalsSingleStrat({ - staker: staker, - withdrawer: withdrawer, - strategy: strategies[0], - withdrawalAmount: withdrawalAmount - }); - - cheats.prank(staker); - delegationManager.queueWithdrawals(queuedWithdrawalParams); - // Set the current deposits to be the depositAmount - withdrawalAmount - uint256[] memory currentAmounts = new uint256[](1); - currentAmounts[0] = depositAmount - withdrawalAmount; - strategyManagerMock.setDeposits(staker, strategies, currentAmounts); - - IERC20[] memory tokens = new IERC20[](1); - tokens[0] = strategies[0].underlyingToken(); - return (withdrawal, tokens, withdrawalRoot); - } - - /** - * Deploy and deposit staker into a single strategy, then set up a queued withdrawal for the staker - * Assumptions: - * - operator is already a registered operator. - * - withdrawalAmount <= depositAmount - */ - function _setUpCompleteQueuedWithdrawalBeaconStrat( - address staker, - address withdrawer, - uint256 depositAmount, - uint256 withdrawalAmount - ) internal returns (IDelegationManager.Withdrawal memory, IERC20[] memory, bytes32) { - uint256[] memory depositAmounts = new uint256[](1); - depositAmounts[0] = depositAmount; - IStrategy[] memory strategies = new IStrategy[](1); - strategies[0] = beaconChainETHStrategy; - ( - IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, - IDelegationManager.Withdrawal memory withdrawal, - bytes32 withdrawalRoot - ) = _setUpQueueWithdrawalsSingleStrat({ - staker: staker, - withdrawer: withdrawer, - strategy: strategies[0], - withdrawalAmount: withdrawalAmount - }); - - cheats.prank(staker); - delegationManager.queueWithdrawals(queuedWithdrawalParams); - // Set the current deposits to be the depositAmount - withdrawalAmount - uint256[] memory currentAmounts = new uint256[](1); - currentAmounts[0] = depositAmount - withdrawalAmount; - strategyManagerMock.setDeposits(staker, strategies, currentAmounts); - - IERC20[] memory tokens; - // tokens[0] = strategies[0].underlyingToken(); - return (withdrawal, tokens, withdrawalRoot); - } - - /** - * Deploy and deposit staker into strategies, then set up a queued withdrawal for the staker - * Assumptions: - * - operator is already a registered operator. - * - for each i, withdrawalAmount[i] <= depositAmount[i] (see filterFuzzedDepositWithdrawInputs above) - */ - function _setUpCompleteQueuedWithdrawal( - address staker, - address withdrawer, - uint256[] memory depositAmounts, - uint256[] memory withdrawalAmounts - ) internal returns (IDelegationManager.Withdrawal memory, IERC20[] memory, bytes32) { - IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, depositAmounts); - - IERC20[] memory tokens = new IERC20[](strategies.length); - for (uint256 i = 0; i < strategies.length; i++) { - tokens[i] = strategies[i].underlyingToken(); - } - - ( - IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, - IDelegationManager.Withdrawal memory withdrawal, - bytes32 withdrawalRoot - ) = _setUpQueueWithdrawals({ - staker: staker, - withdrawer: withdrawer, - strategies: strategies, - withdrawalAmounts: withdrawalAmounts - }); - - cheats.prank(staker); - delegationManager.queueWithdrawals(queuedWithdrawalParams); - - return (withdrawal, tokens, withdrawalRoot); - } -} - -contract DelegationManagerUnitTests_Initialization_Setters is DelegationManagerUnitTests { - function test_initialization() public { - assertEq( - address(delegationManager.strategyManager()), - address(strategyManagerMock), - "constructor / initializer incorrect, strategyManager set wrong" - ); - assertEq( - address(delegationManager.slasher()), - address(slasherMock), - "constructor / initializer incorrect, slasher set wrong" - ); - assertEq( - address(delegationManager.pauserRegistry()), - address(pauserRegistry), - "constructor / initializer incorrect, pauserRegistry set wrong" - ); - assertEq(delegationManager.owner(), address(this), "constructor / initializer incorrect, owner set wrong"); - assertEq(delegationManager.paused(), 0, "constructor / initializer incorrect, paused status set wrong"); - } - - /// @notice Verifies that the DelegationManager cannot be iniitalized multiple times - function test_initialize_revert_reinitialization() public { - cheats.expectRevert("Initializable: contract is already initialized"); - delegationManager.initialize( - address(this), - pauserRegistry, - 0, - 0, // minWithdrawalDelayBlocks - initializeStrategiesToSetDelayBlocks, - initializeWithdrawalDelayBlocks - ); - } - - function testFuzz_setMinWithdrawalDelayBlocks_revert_notOwner( - address invalidCaller - ) public filterFuzzedAddressInputs(invalidCaller) { - cheats.assume(invalidCaller != delegationManager.owner()); - cheats.prank(invalidCaller); - cheats.expectRevert("Ownable: caller is not the owner"); - delegationManager.setMinWithdrawalDelayBlocks(0); - } - - function testFuzz_setMinWithdrawalDelayBlocks_revert_tooLarge(uint256 newMinWithdrawalDelayBlocks) external { - // filter fuzzed inputs to disallowed amounts - cheats.assume(newMinWithdrawalDelayBlocks > delegationManager.MAX_WITHDRAWAL_DELAY_BLOCKS()); - - // attempt to set the `minWithdrawalDelayBlocks` variable - cheats.expectRevert("DelegationManager._setMinWithdrawalDelayBlocks: _minWithdrawalDelayBlocks cannot be > MAX_WITHDRAWAL_DELAY_BLOCKS"); - delegationManager.setMinWithdrawalDelayBlocks(newMinWithdrawalDelayBlocks); - } - - function testFuzz_initialize_Revert_WhenWithdrawalDelayBlocksTooLarge( - uint256[] memory withdrawalDelayBlocks, - uint256 invalidStrategyIndex - ) public { - // set withdrawalDelayBlocks to be too large - cheats.assume(withdrawalDelayBlocks.length > 0); - uint256 numStrats = withdrawalDelayBlocks.length; - IStrategy[] memory strategiesToSetDelayBlocks = new IStrategy[](numStrats); - for (uint256 i = 0; i < numStrats; i++) { - strategiesToSetDelayBlocks[i] = IStrategy(address(uint160(uint256(keccak256(abi.encode(strategyMock, i)))))); - } - - // set at least one index to be too large for withdrawalDelayBlocks - invalidStrategyIndex = invalidStrategyIndex % numStrats; - withdrawalDelayBlocks[invalidStrategyIndex] = MAX_WITHDRAWAL_DELAY_BLOCKS + 1; - - // Deploy DelegationManager implmentation and proxy - delegationManagerImplementation = new DelegationManager(strategyManagerMock, slasherMock, eigenPodManagerMock); - cheats.expectRevert( - "DelegationManager._setStrategyWithdrawalDelayBlocks: _withdrawalDelayBlocks cannot be > MAX_WITHDRAWAL_DELAY_BLOCKS" - ); - delegationManager = DelegationManager( - address( - new TransparentUpgradeableProxy( - address(delegationManagerImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector( - DelegationManager.initialize.selector, - address(this), - pauserRegistry, - 0, // 0 is initialPausedStatus - minWithdrawalDelayBlocks, - strategiesToSetDelayBlocks, - withdrawalDelayBlocks - ) - ) - ) - ); - } -} - -contract DelegationManagerUnitTests_RegisterModifyOperator is DelegationManagerUnitTests { - function test_registerAsOperator_revert_paused() public { - // set the pausing flag - cheats.prank(pauser); - delegationManager.pause(2 ** PAUSED_NEW_DELEGATION); - - cheats.expectRevert("Pausable: index is paused"); - delegationManager.registerAsOperator( - IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: defaultOperator, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }), - emptyStringForMetadataURI - ); - } - - // @notice Verifies that someone cannot successfully call `DelegationManager.registerAsOperator(operatorDetails)` again after registering for the first time - function testFuzz_registerAsOperator_revert_cannotRegisterMultipleTimes( - address operator, - IDelegationManager.OperatorDetails memory operatorDetails - ) public filterFuzzedAddressInputs(operator) { - _filterOperatorDetails(operator, operatorDetails); - - // Register once - cheats.startPrank(operator); - delegationManager.registerAsOperator(operatorDetails, emptyStringForMetadataURI); - - // Expect revert when register again - cheats.expectRevert("DelegationManager.registerAsOperator: caller is already actively delegated"); - delegationManager.registerAsOperator(operatorDetails, emptyStringForMetadataURI); - cheats.stopPrank(); - } - - /** - * @notice Verifies that an operator cannot register with `stakerOptOutWindowBlocks` set larger than `MAX_STAKER_OPT_OUT_WINDOW_BLOCKS` - */ - function testFuzz_registerAsOperator_revert_optOutBlocksTooLarge( - IDelegationManager.OperatorDetails memory operatorDetails - ) public { - // filter out *allowed* stakerOptOutWindowBlocks values - cheats.assume(operatorDetails.stakerOptOutWindowBlocks > delegationManager.MAX_STAKER_OPT_OUT_WINDOW_BLOCKS()); - - cheats.prank(defaultOperator); - cheats.expectRevert("DelegationManager._setOperatorDetails: stakerOptOutWindowBlocks cannot be > MAX_STAKER_OPT_OUT_WINDOW_BLOCKS"); - delegationManager.registerAsOperator(operatorDetails, emptyStringForMetadataURI); - } - - /** - * @notice `operator` registers via calling `DelegationManager.registerAsOperator(operatorDetails, metadataURI)` - * Should be able to set any parameters, other than too high value for `stakerOptOutWindowBlocks` - * The set parameters should match the desired parameters (correct storage update) - * Operator becomes delegated to themselves - * Properly emits events – especially the `OperatorRegistered` event, but also `StakerDelegated` & `OperatorDetailsModified` events - * Reverts appropriately if operator was already delegated to someone (including themselves, i.e. they were already an operator) - * @param operator and @param operatorDetails are fuzzed inputs - */ - function testFuzz_registerAsOperator( - address operator, - IDelegationManager.OperatorDetails memory operatorDetails, - string memory metadataURI - ) public filterFuzzedAddressInputs(operator) { - _filterOperatorDetails(operator, operatorDetails); - - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorDetailsModified(operator, operatorDetails); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(operator, operator); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorRegistered(operator, operatorDetails); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorMetadataURIUpdated(operator, metadataURI); - - cheats.prank(operator); - delegationManager.registerAsOperator(operatorDetails, metadataURI); - - // Storage checks - assertEq( - operatorDetails.delegationApprover, - delegationManager.delegationApprover(operator), - "delegationApprover not set correctly" - ); - assertEq( - operatorDetails.stakerOptOutWindowBlocks, - delegationManager.stakerOptOutWindowBlocks(operator), - "stakerOptOutWindowBlocks not set correctly" - ); - assertEq(delegationManager.delegatedTo(operator), operator, "operator not delegated to self"); - } - - // @notice Verifies that a staker who is actively delegated to an operator cannot register as an operator (without first undelegating, at least) - function testFuzz_registerAsOperator_cannotRegisterWhileDelegated( - address staker, - IDelegationManager.OperatorDetails memory operatorDetails - ) public filterFuzzedAddressInputs(staker) { - cheats.assume(staker != defaultOperator); - // Staker becomes an operator, so filter against staker's address - _filterOperatorDetails(staker, operatorDetails); - - // register *this contract* as an operator - _registerOperatorWithBaseDetails(defaultOperator); - - // delegate from the `staker` to the operator - cheats.startPrank(staker); - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); - - // expect revert if attempt to register as operator - cheats.expectRevert("DelegationManager.registerAsOperator: caller is already actively delegated"); - delegationManager.registerAsOperator(operatorDetails, emptyStringForMetadataURI); - - cheats.stopPrank(); - } - - /** - * @notice Tests that an operator can modify their OperatorDetails by calling `DelegationManager.modifyOperatorDetails` - * Should be able to set any parameters, other than setting their `earningsReceiver` to the zero address or too high value for `stakerOptOutWindowBlocks` - * The set parameters should match the desired parameters (correct storage update) - * Properly emits an `OperatorDetailsModified` event - * Reverts appropriately if the caller is not an operator - * Reverts if operator tries to decrease their `stakerOptOutWindowBlocks` parameter - * @param initialOperatorDetails and @param modifiedOperatorDetails are fuzzed inputs - */ - function testFuzz_modifyOperatorParameters( - IDelegationManager.OperatorDetails memory initialOperatorDetails, - IDelegationManager.OperatorDetails memory modifiedOperatorDetails - ) public { - _registerOperator(defaultOperator, initialOperatorDetails, emptyStringForMetadataURI); - - cheats.startPrank(defaultOperator); - - // either it fails for trying to set the stakerOptOutWindowBlocks - if (modifiedOperatorDetails.stakerOptOutWindowBlocks > delegationManager.MAX_STAKER_OPT_OUT_WINDOW_BLOCKS()) { - cheats.expectRevert( - "DelegationManager._setOperatorDetails: stakerOptOutWindowBlocks cannot be > MAX_STAKER_OPT_OUT_WINDOW_BLOCKS" - ); - delegationManager.modifyOperatorDetails(modifiedOperatorDetails); - // or the transition is allowed, - } else if ( - modifiedOperatorDetails.stakerOptOutWindowBlocks >= initialOperatorDetails.stakerOptOutWindowBlocks - ) { - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorDetailsModified(defaultOperator, modifiedOperatorDetails); - delegationManager.modifyOperatorDetails(modifiedOperatorDetails); - - assertEq( - modifiedOperatorDetails.delegationApprover, - delegationManager.delegationApprover(defaultOperator), - "delegationApprover not set correctly" - ); - assertEq( - modifiedOperatorDetails.stakerOptOutWindowBlocks, - delegationManager.stakerOptOutWindowBlocks(defaultOperator), - "stakerOptOutWindowBlocks not set correctly" - ); - assertEq(delegationManager.delegatedTo(defaultOperator), defaultOperator, "operator not delegated to self"); - // or else the transition is disallowed - } else { - cheats.expectRevert("DelegationManager._setOperatorDetails: stakerOptOutWindowBlocks cannot be decreased"); - delegationManager.modifyOperatorDetails(modifiedOperatorDetails); - } - - cheats.stopPrank(); - } - - // @notice Tests that an address which is not an operator cannot successfully call `updateOperatorMetadataURI`. - function test_updateOperatorMetadataUri_notRegistered() public { - assertFalse(delegationManager.isOperator(defaultOperator), "bad test setup"); - - cheats.prank(defaultOperator); - cheats.expectRevert("DelegationManager.updateOperatorMetadataURI: caller must be an operator"); - delegationManager.updateOperatorMetadataURI(emptyStringForMetadataURI); - } - - /** - * @notice Verifies that a staker cannot call cannot modify their `OperatorDetails` without first registering as an operator - * @dev This is an important check to ensure that our definition of 'operator' remains consistent, in particular for preserving the - * invariant that 'operators' are always delegated to themselves - */ - function testFuzz_updateOperatorMetadataUri_revert_notOperator( - IDelegationManager.OperatorDetails memory operatorDetails - ) public { - cheats.expectRevert("DelegationManager.modifyOperatorDetails: caller must be an operator"); - delegationManager.modifyOperatorDetails(operatorDetails); - } - - // @notice Tests that an operator who calls `updateOperatorMetadataURI` will correctly see an `OperatorMetadataURIUpdated` event emitted with their input - function testFuzz_UpdateOperatorMetadataURI(string memory metadataURI) public { - // register *this contract* as an operator - _registerOperatorWithBaseDetails(defaultOperator); - - // call `updateOperatorMetadataURI` and check for event - cheats.prank(defaultOperator); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorMetadataURIUpdated(defaultOperator, metadataURI); - delegationManager.updateOperatorMetadataURI(metadataURI); - } -} - -contract DelegationManagerUnitTests_delegateTo is DelegationManagerUnitTests { - function test_Revert_WhenPaused() public { - cheats.prank(defaultOperator); - delegationManager.registerAsOperator( - IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: defaultOperator, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }), - emptyStringForMetadataURI - ); - - // set the pausing flag - cheats.prank(pauser); - delegationManager.pause(2 ** PAUSED_NEW_DELEGATION); - - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - cheats.prank(defaultStaker); - cheats.expectRevert("Pausable: index is paused"); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); - } - - /** - * @notice Delegates from `staker` to an operator, then verifies that the `staker` cannot delegate to another `operator` (at least without first undelegating) - */ - function testFuzz_Revert_WhenDelegateWhileDelegated( - address staker, - address operator, - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry, - bytes32 salt - ) public filterFuzzedAddressInputs(staker) filterFuzzedAddressInputs(operator) { - // filter out input since if the staker tries to delegate again after registering as an operator, we will revert earlier than this test is designed to check - cheats.assume(staker != operator); - - // delegate from the staker to an operator - cheats.assume(operator != address(this)); - _registerOperatorWithBaseDetails(operator); - _delegateToOperatorWhoAcceptsAllStakers(staker, operator); - - // try to delegate again and check that the call reverts - cheats.startPrank(staker); - cheats.expectRevert("DelegationManager.delegateTo: staker is already actively delegated"); - delegationManager.delegateTo(operator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - } - - // @notice Verifies that `staker` cannot delegate to an unregistered `operator` - function testFuzz_Revert_WhenDelegateToUnregisteredOperator( - address staker, - address operator - ) public filterFuzzedAddressInputs(staker) filterFuzzedAddressInputs(operator) { - assertFalse(delegationManager.isOperator(operator), "incorrect test input?"); - - // try to delegate and check that the call reverts - cheats.startPrank(staker); - cheats.expectRevert("DelegationManager.delegateTo: operator is not registered in EigenLayer"); - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - delegationManager.delegateTo(operator, approverSignatureAndExpiry, emptySalt); - cheats.stopPrank(); - } - - /** - * @notice `staker` delegates to an operator who does not require any signature verification (i.e. the operator’s `delegationApprover` address is set to the zero address) - * via the `staker` calling `DelegationManager.delegateTo` - * The function should pass with any `operatorSignature` input (since it should be unused) - * Properly emits a `StakerDelegated` event - * Staker is correctly delegated after the call (i.e. correct storage update) - * Reverts if the staker is already delegated (to the operator or to anyone else) - * Reverts if the ‘operator’ is not actually registered as an operator - */ - function testFuzz_OperatorWhoAcceptsAllStakers_StrategyManagerShares( - address staker, - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry, - bytes32 salt, - uint256 shares - ) public filterFuzzedAddressInputs(staker) { - // register *this contract* as an operator - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - _registerOperatorWithBaseDetails(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - // Set staker shares in StrategyManager - IStrategy[] memory strategiesToReturn = new IStrategy[](1); - strategiesToReturn[0] = strategyMock; - uint256[] memory sharesToReturn = new uint256[](1); - sharesToReturn[0] = shares; - strategyManagerMock.setDeposits(staker, strategiesToReturn, sharesToReturn); - uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); - // delegate from the `staker` to the operator - cheats.startPrank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(staker, defaultOperator); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, staker, strategyMock, shares); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); - - assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); - assertTrue(delegationManager.isOperator(defaultOperator), "staker not registered as operator"); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - } - - /** - * @notice `staker` delegates to an operator who does not require any signature verification (i.e. the operator’s `delegationApprover` address is set to the zero address) - * via the `staker` calling `DelegationManager.delegateTo` - * The function should pass with any `operatorSignature` input (since it should be unused) - * Properly emits a `StakerDelegated` event - * Staker is correctly delegated after the call (i.e. correct storage update) - * OperatorSharesIncreased event should only be emitted if beaconShares is > 0. Since a staker can have negative shares nothing should happen in that case - */ - function testFuzz_OperatorWhoAcceptsAllStakers_BeaconChainStrategyShares( - address staker, - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry, - bytes32 salt, - int256 beaconShares - ) public filterFuzzedAddressInputs(staker) { - // register *this contract* as an operator - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - _registerOperatorWithBaseDetails(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - // Set staker shares in BeaconChainStrategy - eigenPodManagerMock.setPodOwnerShares(staker, beaconShares); - uint256 beaconSharesBefore = delegationManager.operatorShares(staker, beaconChainETHStrategy); - // delegate from the `staker` to the operator - cheats.startPrank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(staker, defaultOperator); - if (beaconShares > 0) { - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, staker, beaconChainETHStrategy, uint256(beaconShares)); - } - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); - if (beaconShares <= 0) { - assertEq( - beaconSharesBefore, - beaconSharesAfter, - "operator beaconchain shares should not have increased with negative shares" - ); - } else { - assertEq( - beaconSharesBefore + uint256(beaconShares), - beaconSharesAfter, - "operator beaconchain shares not increased correctly" - ); - } - assertTrue(delegationManager.isOperator(defaultOperator), "staker not registered as operator"); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - } - - /** - * @notice `staker` delegates to an operator who does not require any signature verification (i.e. the operator’s `delegationApprover` address is set to the zero address) - * via the `staker` calling `DelegationManager.delegateTo` - * Similar to tests above but now with staker who has both EigenPod and StrategyManager shares. - */ - function testFuzz_OperatorWhoAcceptsAllStakers_BeaconChainAndStrategyManagerShares( - address staker, - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry, - bytes32 salt, - int256 beaconShares, - uint256 shares - ) public filterFuzzedAddressInputs(staker) { - // register *this contract* as an operator - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - _registerOperatorWithBaseDetails(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - // Set staker shares in BeaconChainStrategy and StrategyMananger - IStrategy[] memory strategiesToReturn = new IStrategy[](1); - strategiesToReturn[0] = strategyMock; - uint256[] memory sharesToReturn = new uint256[](1); - sharesToReturn[0] = shares; - strategyManagerMock.setDeposits(staker, strategiesToReturn, sharesToReturn); - eigenPodManagerMock.setPodOwnerShares(staker, beaconShares); - uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); - uint256 beaconSharesBefore = delegationManager.operatorShares(staker, beaconChainETHStrategy); - // delegate from the `staker` to the operator - cheats.startPrank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(staker, defaultOperator); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, staker, strategyMock, shares); - if (beaconShares > 0) { - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, staker, beaconChainETHStrategy, uint256(beaconShares)); - } - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); - uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); - if (beaconShares <= 0) { - assertEq( - beaconSharesBefore, - beaconSharesAfter, - "operator beaconchain shares should not have increased with negative shares" - ); - } else { - assertEq( - beaconSharesBefore + uint256(beaconShares), - beaconSharesAfter, - "operator beaconchain shares not increased correctly" - ); - } - assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); - assertTrue(delegationManager.isOperator(defaultOperator), "staker not registered as operator"); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - } - - /** - * @notice `staker` delegates to a operator who does not require any signature verification similar to test above. - * In this scenario, staker doesn't have any delegatable shares and operator shares should not increase. Staker - * should still be correctly delegated to the operator after the call. - */ - function testFuzz_OperatorWhoAcceptsAllStakers_ZeroDelegatableShares( - address staker, - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry, - bytes32 salt - ) public filterFuzzedAddressInputs(staker) { - // register *this contract* as an operator - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - _registerOperatorWithBaseDetails(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - - // delegate from the `staker` to the operator - cheats.startPrank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(staker, defaultOperator); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - - assertTrue(delegationManager.isOperator(defaultOperator), "staker not registered as operator"); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - } - - /** - * @notice Like `testDelegateToOperatorWhoRequiresECDSASignature` but using an invalid expiry on purpose and checking that reversion occurs - */ - function testFuzz_Revert_WhenOperatorWhoRequiresECDSASignature_ExpiredDelegationApproverSignature( - address staker, - bytes32 salt, - uint256 expiry - ) public filterFuzzedAddressInputs(staker) { - // roll to a very late timestamp - skip(type(uint256).max / 2); - // filter to only *invalid* `expiry` values - expiry = bound(expiry, 0, block.timestamp - 1); - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - _registerOperatorWithDelegationApprover(defaultOperator); - - // calculate the delegationSigner's signature - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - staker, - defaultOperator, - salt, - expiry - ); - - // delegate from the `staker` to the operator - cheats.startPrank(staker); - cheats.expectRevert("DelegationManager._delegate: approver signature expired"); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - } - - /** - * @notice Like `testDelegateToOperatorWhoRequiresECDSASignature` but undelegating after delegating and trying the same approveSignature - * and checking that reversion occurs with the same salt - */ - function testFuzz_Revert_WhenOperatorWhoRequiresECDSASignature_PreviouslyUsedSalt( - address staker, - bytes32 salt, - uint256 expiry - ) public filterFuzzedAddressInputs(staker) { - // filter to only valid `expiry` values - cheats.assume(expiry >= block.timestamp); - - // filter inputs, since this will fail when the staker is already registered as an operator - // staker also must not be the delegationApprover so that signature verification process takes place - cheats.assume(staker != defaultOperator); - cheats.assume(staker != defaultApprover); - - _registerOperatorWithDelegationApprover(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - // calculate the delegationSigner's signature - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - staker, - defaultOperator, - salt, - expiry - ); - - // delegate from the `staker` to the operator, undelegate, and then try to delegate again with same approversalt - // to check that call reverts - cheats.startPrank(staker); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - assertTrue( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent not spent?" - ); - delegationManager.undelegate(staker); - cheats.expectRevert("DelegationManager._delegate: approverSalt already spent"); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - } - - /** - * @notice Like `testDelegateToOperatorWhoRequiresECDSASignature` but using an incorrect signature on purpose and checking that reversion occurs - */ - function testFuzz_Revert_WhenOperatorWhoRequiresECDSASignature_WithBadSignature( - address staker, - uint256 expiry - ) public filterFuzzedAddressInputs(staker) { - // filter to only valid `expiry` values - expiry = bound(expiry, block.timestamp + 1, type(uint256).max); - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator && staker != defaultApprover); - - _registerOperatorWithDelegationApprover(defaultOperator); - - // calculate the signature - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - approverSignatureAndExpiry.expiry = expiry; - { - bytes32 digestHash = delegationManager.calculateDelegationApprovalDigestHash( - staker, - defaultOperator, - delegationManager.delegationApprover(defaultOperator), - emptySalt, - expiry - ); - (uint8 v, bytes32 r, bytes32 s) = cheats.sign(delegationSignerPrivateKey, digestHash); - // mess up the signature by flipping v's parity - v = (v == 27 ? 28 : 27); - approverSignatureAndExpiry.signature = abi.encodePacked(r, s, v); - } - - // try to delegate from the `staker` to the operator, and check reversion - cheats.startPrank(staker); - cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: signature not from signer"); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); - cheats.stopPrank(); - } - - /** - * @notice `staker` delegates to an operator who requires signature verification through an EOA (i.e. the operator’s `delegationApprover` address is set to a nonzero EOA) - * via the `staker` calling `DelegationManager.delegateTo` - * The function should pass *only with a valid ECDSA signature from the `delegationApprover`, OR if called by the operator or their delegationApprover themselves - * Properly emits a `StakerDelegated` event - * Staker is correctly delegated after the call (i.e. correct storage update) - * Reverts if the staker is already delegated (to the operator or to anyone else) - * Reverts if the ‘operator’ is not actually registered as an operator - */ - function testFuzz_OperatorWhoRequiresECDSASignature( - address staker, - bytes32 salt, - uint256 expiry - ) public filterFuzzedAddressInputs(staker) { - // filter to only valid `expiry` values - cheats.assume(expiry >= block.timestamp); - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - _registerOperatorWithDelegationApprover(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - // calculate the delegationSigner's signature - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - staker, - defaultOperator, - salt, - expiry - ); - - // delegate from the `staker` to the operator - cheats.startPrank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(staker, defaultOperator); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - - if (staker == delegationManager.delegationApprover(defaultOperator)) { - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too incorrectly?" - ); - } else { - // verify that the salt is marked as used - assertTrue( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent not spent?" - ); - } - } - - /** - * @notice `staker` delegates to an operator who requires signature verification through an EOA (i.e. the operator’s `delegationApprover` address is set to a nonzero EOA) - * via the `staker` calling `DelegationManager.delegateTo` - * The function should pass *only with a valid ECDSA signature from the `delegationApprover`, OR if called by the operator or their delegationApprover themselves - * Properly emits a `StakerDelegated` event - * Staker is correctly delegated after the call (i.e. correct storage update) - * Operator shares should increase by the amount of shares delegated - * Reverts if the staker is already delegated (to the operator or to anyone else) - * Reverts if the ‘operator’ is not actually registered as an operator - */ - function testFuzz_OperatorWhoRequiresECDSASignature_StrategyManagerShares( - address staker, - bytes32 salt, - uint256 expiry, - uint256 shares - ) public filterFuzzedAddressInputs(staker) { - // filter to only valid `expiry` values - cheats.assume(expiry >= block.timestamp); - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - _registerOperatorWithDelegationApprover(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - // calculate the delegationSigner's signature - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - staker, - defaultOperator, - salt, - expiry - ); - - // Set staker shares in StrategyManager - IStrategy[] memory strategiesToReturn = new IStrategy[](1); - strategiesToReturn[0] = strategyMock; - uint256[] memory sharesToReturn = new uint256[](1); - sharesToReturn[0] = shares; - strategyManagerMock.setDeposits(staker, strategiesToReturn, sharesToReturn); - uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); - // delegate from the `staker` to the operator - cheats.startPrank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(staker, defaultOperator); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); - assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - - if (staker == delegationManager.delegationApprover(defaultOperator)) { - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too incorrectly?" - ); - } else { - // verify that the salt is marked as used - assertTrue( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent not spent?" - ); - } - } - - /** - * @notice `staker` delegates to an operator who requires signature verification through an EOA (i.e. the operator’s `delegationApprover` address is set to a nonzero EOA) - * via the `staker` calling `DelegationManager.delegateTo` - * The function should pass *only with a valid ECDSA signature from the `delegationApprover`, OR if called by the operator or their delegationApprover themselves - * Properly emits a `StakerDelegated` event - * Staker is correctly delegated after the call (i.e. correct storage update) - * Operator beaconShares should increase by the amount of shares delegated if beaconShares > 0 - * Reverts if the staker is already delegated (to the operator or to anyone else) - * Reverts if the ‘operator’ is not actually registered as an operator - */ - function testFuzz_OperatorWhoRequiresECDSASignature_BeaconChainStrategyShares( - address staker, - bytes32 salt, - uint256 expiry, - int256 beaconShares - ) public filterFuzzedAddressInputs(staker) { - // filter to only valid `expiry` values - cheats.assume(expiry >= block.timestamp); - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - _registerOperatorWithDelegationApprover(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - // calculate the delegationSigner's signature - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - staker, - defaultOperator, - salt, - expiry - ); - - // Set staker shares in BeaconChainStrategy - eigenPodManagerMock.setPodOwnerShares(staker, beaconShares); - uint256 beaconSharesBefore = delegationManager.operatorShares(staker, beaconChainETHStrategy); - // delegate from the `staker` to the operator - cheats.startPrank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(staker, defaultOperator); - if (beaconShares > 0) { - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, staker, beaconChainETHStrategy, uint256(beaconShares)); - } - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); - if (beaconShares <= 0) { - assertEq( - beaconSharesBefore, - beaconSharesAfter, - "operator beaconchain shares should not have increased with negative shares" - ); - } else { - assertEq( - beaconSharesBefore + uint256(beaconShares), - beaconSharesAfter, - "operator beaconchain shares not increased correctly" - ); - } - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - - if (staker == delegationManager.delegationApprover(defaultOperator)) { - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too incorrectly?" - ); - } else { - // verify that the salt is marked as used - assertTrue( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent not spent?" - ); - } - } - - /** - * @notice `staker` delegates to an operator who requires signature verification through an EOA (i.e. the operator’s `delegationApprover` address is set to a nonzero EOA) - * via the `staker` calling `DelegationManager.delegateTo` - * The function should pass *only with a valid ECDSA signature from the `delegationApprover`, OR if called by the operator or their delegationApprover themselves - * Properly emits a `StakerDelegated` event - * Staker is correctly delegated after the call (i.e. correct storage update) - * Operator beaconshares should increase by the amount of beaconShares delegated if beaconShares > 0 - * Operator strategy manager shares should icnrease by amount of shares - * Reverts if the staker is already delegated (to the operator or to anyone else) - * Reverts if the ‘operator’ is not actually registered as an operator - */ - function testFuzz_OperatorWhoRequiresECDSASignature_BeaconChainAndStrategyManagerShares( - address staker, - bytes32 salt, - uint256 expiry, - int256 beaconShares, - uint256 shares - ) public filterFuzzedAddressInputs(staker) { - // filter to only valid `expiry` values - cheats.assume(expiry >= block.timestamp); - - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - _registerOperatorWithDelegationApprover(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - // calculate the delegationSigner's signature - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - staker, - defaultOperator, - salt, - expiry - ); - - // Set staker shares in BeaconChainStrategy and StrategyMananger - { - IStrategy[] memory strategiesToReturn = new IStrategy[](1); - strategiesToReturn[0] = strategyMock; - uint256[] memory sharesToReturn = new uint256[](1); - sharesToReturn[0] = shares; - strategyManagerMock.setDeposits(staker, strategiesToReturn, sharesToReturn); - eigenPodManagerMock.setPodOwnerShares(staker, beaconShares); - } - uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); - uint256 beaconSharesBefore = delegationManager.operatorShares(staker, beaconChainETHStrategy); - // delegate from the `staker` to the operator - cheats.startPrank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(staker, defaultOperator); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, staker, strategyMock, shares); - if (beaconShares > 0) { - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, staker, beaconChainETHStrategy, uint256(beaconShares)); - } - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); - uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); - if (beaconShares <= 0) { - assertEq( - beaconSharesBefore, - beaconSharesAfter, - "operator beaconchain shares should not have increased with negative shares" - ); - } else { - assertEq( - beaconSharesBefore + uint256(beaconShares), - beaconSharesAfter, - "operator beaconchain shares not increased correctly" - ); - } - assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - - if (staker == delegationManager.delegationApprover(defaultOperator)) { - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too incorrectly?" - ); - } else { - // verify that the salt is marked as used - assertTrue( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent not spent?" - ); - } - } - - /** - * @notice delegateTo test with operator's delegationApprover address set to a contract address - * and check that reversion occurs when the signature is expired - */ - function testFuzz_Revert_WhenOperatorWhoRequiresEIP1271Signature_ExpiredDelegationApproverSignature( - address staker, - uint256 expiry - ) public filterFuzzedAddressInputs(staker) { - // roll to a very late timestamp - skip(type(uint256).max / 2); - // filter to only *invalid* `expiry` values - expiry = bound(expiry, 0, block.timestamp - 1); - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - _registerOperatorWithDelegationApprover(defaultOperator); - - // create the signature struct - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - approverSignatureAndExpiry.expiry = expiry; - - // try to delegate from the `staker` to the operator, and check reversion - cheats.startPrank(staker); - cheats.expectRevert("DelegationManager._delegate: approver signature expired"); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); - cheats.stopPrank(); - } - - /** - * @notice delegateTo test with operator's delegationApprover address set to a contract address - * and check that reversion occurs when the signature approverSalt is already used. - * Performed by delegating to operator, undelegating, and trying to reuse the same signature - */ - function testFuzz_Revert_WhenOperatorWhoRequiresEIP1271Signature_PreviouslyUsedSalt( - address staker, - bytes32 salt, - uint256 expiry - ) public filterFuzzedAddressInputs(staker) { - // filter to only valid `expiry` values - cheats.assume(expiry >= block.timestamp); - - // register *this contract* as an operator - // filter inputs, since this will fail when the staker is already registered as an operator - ERC1271WalletMock wallet = _registerOperatorWith1271DelegationApprover(defaultOperator); - cheats.assume(staker != address(wallet) && staker != defaultOperator); - - // calculate the delegationSigner's signature - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - staker, - defaultOperator, - salt, - expiry - ); - - // delegate from the `staker` to the operator - cheats.startPrank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(staker, defaultOperator); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - delegationManager.undelegate(staker); - // Reusing same signature should revert with salt already being used - cheats.expectRevert("DelegationManager._delegate: approverSalt already spent"); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - } - - /** - * @notice delegateTo test with operator's delegationApprover address set to a contract address that - * is non compliant with EIP1271 - */ - function testFuzz_Revert_WhenOperatorWhoRequiresEIP1271Signature_NonCompliantWallet( - address staker, - uint256 expiry - ) public filterFuzzedAddressInputs(staker) { - // filter to only valid `expiry` values - cheats.assume(expiry >= block.timestamp); - - // register *this contract* as an operator - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - // deploy a ERC1271MaliciousMock contract that will return an incorrect value when called - ERC1271MaliciousMock wallet = new ERC1271MaliciousMock(); - - // filter fuzzed input, since otherwise we can get a flaky failure here. if the caller itself is the 'delegationApprover' - // then we don't even trigger the signature verification call, so we won't get a revert as expected - cheats.assume(staker != address(wallet)); - - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: defaultOperator, - delegationApprover: address(wallet), - stakerOptOutWindowBlocks: 0 - }); - _registerOperator(defaultOperator, operatorDetails, emptyStringForMetadataURI); - - // create the signature struct - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - approverSignatureAndExpiry.expiry = expiry; - - // try to delegate from the `staker` to the operator, and check reversion - cheats.startPrank(staker); - // because the ERC1271MaliciousMock contract returns the wrong amount of data, we get a low-level "EvmError: Revert" message here rather than the error message bubbling up - cheats.expectRevert(); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); - cheats.stopPrank(); - } - - /** - * @notice delegateTo test with operator's delegationApprover address set to a contract address that - * returns a value other than the EIP1271 "magic bytes" and checking that reversion occurs appropriately - */ - function testFuzz_Revert_WhenOperatorWhoRequiresEIP1271Signature_IsValidSignatureFails( - address staker, - bytes32 salt, - uint256 expiry - ) public filterFuzzedAddressInputs(staker) { - // filter to only valid `expiry` values - cheats.assume(expiry >= block.timestamp); - - // register *this contract* as an operator - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - // deploy a ERC1271WalletMock contract that will return an incorrect value when called - // owner is the 0 address - ERC1271WalletMock wallet = new ERC1271WalletMock(address(1)); - - // filter fuzzed input, since otherwise we can get a flaky failure here. if the caller itself is the 'delegationApprover' - // then we don't even trigger the signature verification call, so we won't get a revert as expected - cheats.assume(staker != address(wallet)); - - IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: defaultOperator, - delegationApprover: address(wallet), - stakerOptOutWindowBlocks: 0 - }); - _registerOperator(defaultOperator, operatorDetails, emptyStringForMetadataURI); - - // calculate the delegationSigner's but this is not the correct signature from the wallet contract - // since the wallet owner is address(1) - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - staker, - defaultOperator, - salt, - expiry - ); - - // try to delegate from the `staker` to the operator, and check reversion - cheats.startPrank(staker); - // Signature should fail as the wallet will not return EIP1271_MAGICVALUE - cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: ERC1271 signature verification failed"); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); - cheats.stopPrank(); - } - - /** - * @notice `staker` delegates to an operator who requires signature verification through an EIP1271-compliant contract (i.e. the operator’s `delegationApprover` address is - * set to a nonzero and code-containing address) via the `staker` calling `DelegationManager.delegateTo` - * The function uses OZ's ERC1271WalletMock contract, and thus should pass *only when a valid ECDSA signature from the `owner` of the ERC1271WalletMock contract, - * OR if called by the operator or their delegationApprover themselves - * Properly emits a `StakerDelegated` event - * Staker is correctly delegated after the call (i.e. correct storage update) - * Reverts if the staker is already delegated (to the operator or to anyone else) - * Reverts if the ‘operator’ is not actually registered as an operator - */ - function testFuzz_OperatorWhoRequiresEIP1271Signature( - address staker, - bytes32 salt, - uint256 expiry - ) public filterFuzzedAddressInputs(staker) { - // filter to only valid `expiry` values - cheats.assume(expiry >= block.timestamp); - - // register *this contract* as an operator - // filter inputs, since this will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - _registerOperatorWith1271DelegationApprover(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - // calculate the delegationSigner's signature - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - staker, - defaultOperator, - salt, - expiry - ); - - // delegate from the `staker` to the operator - cheats.startPrank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(staker, defaultOperator); - delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); - cheats.stopPrank(); - - assertTrue(delegationManager.isDelegated(staker), "staker not delegated correctly"); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); - assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); - - // check that the nonce incremented appropriately - if (staker == defaultOperator || staker == delegationManager.delegationApprover(defaultOperator)) { - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too incorrectly?" - ); - } else { - // verify that the salt is marked as used - assertTrue( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent not spent?" - ); - } - } -} - -contract DelegationManagerUnitTests_delegateToBySignature is DelegationManagerUnitTests { - function test_revert_paused() public { - cheats.prank(defaultOperator); - delegationManager.registerAsOperator( - IDelegationManager.OperatorDetails({ - __deprecated_earningsReceiver: defaultOperator, - delegationApprover: address(0), - stakerOptOutWindowBlocks: 0 - }), - emptyStringForMetadataURI - ); - - // set the pausing flag - cheats.prank(pauser); - delegationManager.pause(2 ** PAUSED_NEW_DELEGATION); - - uint256 expiry = type(uint256).max; - ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( - stakerPrivateKey, - defaultOperator, - expiry - ); - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - cheats.expectRevert("Pausable: index is paused"); - delegationManager.delegateToBySignature( - defaultStaker, - defaultOperator, - stakerSignatureAndExpiry, - approverSignatureAndExpiry, - emptySalt - ); - } - - /// @notice Checks that `DelegationManager.delegateToBySignature` reverts if the staker's signature has expired - function testFuzz_Revert_WhenStakerSignatureExpired( - address staker, - address operator, - uint256 expiry, - bytes memory signature - ) public filterFuzzedAddressInputs(staker) filterFuzzedAddressInputs(operator) { - expiry = bound(expiry, 0, block.timestamp - 1); - cheats.expectRevert("DelegationManager.delegateToBySignature: staker signature expired"); - ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ - signature: signature, - expiry: expiry - }); - delegationManager.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, emptySalt); - } - - /// @notice Checks that `DelegationManager.delegateToBySignature` reverts if the staker's ECDSA signature verification fails - function test_Revert_EOAStaker_WhenStakerSignatureVerificationFails() public { - address invalidStaker = address(1000); - address caller = address(2000); - uint256 expiry = type(uint256).max; - - _registerOperatorWithBaseDetails(defaultOperator); - - ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( - stakerPrivateKey, - defaultOperator, - expiry - ); - - // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` - // Should revert from invalid signature as staker is not set as the address of signer - cheats.startPrank(caller); - cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: signature not from signer"); - // use an empty approver signature input since none is needed / the input is unchecked - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - delegationManager.delegateToBySignature( - invalidStaker, - defaultOperator, - stakerSignatureAndExpiry, - approverSignatureAndExpiry, - emptySalt - ); - cheats.stopPrank(); - } - - /// @notice Checks that `DelegationManager.delegateToBySignature` reverts if the staker's contract signature verification fails - function test_Revert_ERC1271Staker_WhenStakerSignatureVerficationFails() public { - address staker = address(new ERC1271WalletMock(address(1))); - address caller = address(2000); - uint256 expiry = type(uint256).max; - - _registerOperatorWithBaseDetails(defaultOperator); - - ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( - stakerPrivateKey, - defaultOperator, - expiry - ); - - // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` - // Should revert from invalid signature as staker is not set as the address of signer - cheats.startPrank(caller); - cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: ERC1271 signature verification failed"); - // use an empty approver signature input since none is needed / the input is unchecked - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - delegationManager.delegateToBySignature( - staker, - defaultOperator, - stakerSignatureAndExpiry, - approverSignatureAndExpiry, - emptySalt - ); - cheats.stopPrank(); - } - - /// @notice Checks that `DelegationManager.delegateToBySignature` reverts when the staker is already delegated - function test_Revert_Staker_WhenAlreadyDelegated() public { - address staker = cheats.addr(stakerPrivateKey); - address caller = address(2000); - uint256 expiry = type(uint256).max; - - _registerOperatorWithBaseDetails(defaultOperator); - - ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( - stakerPrivateKey, - defaultOperator, - expiry - ); - - _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); - // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` - // Should revert as `staker` has already delegated to `operator` - cheats.startPrank(caller); - cheats.expectRevert("DelegationManager.delegateToBySignature: staker is already actively delegated"); - // use an empty approver signature input since none is needed / the input is unchecked - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - delegationManager.delegateToBySignature( - staker, - defaultOperator, - stakerSignatureAndExpiry, - approverSignatureAndExpiry, - emptySalt - ); - cheats.stopPrank(); - } - - /// @notice Checks that `delegateToBySignature` reverts when operator is not registered after successful staker signature verification - function test_Revert_EOAStaker_OperatorNotRegistered() public { - address staker = cheats.addr(stakerPrivateKey); - address caller = address(2000); - uint256 expiry = type(uint256).max; - - ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( - stakerPrivateKey, - defaultOperator, - expiry - ); - - // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` - // Should revert as `operator` is not registered - cheats.startPrank(caller); - cheats.expectRevert("DelegationManager.delegateToBySignature: operator is not registered in EigenLayer"); - // use an empty approver signature input since none is needed / the input is unchecked - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; - delegationManager.delegateToBySignature( - staker, - defaultOperator, - stakerSignatureAndExpiry, - approverSignatureAndExpiry, - emptySalt - ); - cheats.stopPrank(); - } - - /** - * @notice Checks that `DelegationManager.delegateToBySignature` reverts if the delegationApprover's signature has expired - * after successful staker signature verification - */ - function testFuzz_Revert_WhenDelegationApproverSignatureExpired( - address caller, - uint256 stakerExpiry, - uint256 delegationApproverExpiry - ) public filterFuzzedAddressInputs(caller) { - cheats.assume(caller != defaultOperator); +// return (queuedWithdrawalParams, withdrawal, withdrawalRoot); +// } + +// /** +// * Deploy and deposit staker into a single strategy, then set up a queued withdrawal for the staker +// * Assumptions: +// * - operator is already a registered operator. +// * - withdrawalAmount <= depositAmount +// */ +// function _setUpCompleteQueuedWithdrawalSingleStrat( +// address staker, +// address withdrawer, +// uint256 depositAmount, +// uint256 withdrawalAmount +// ) internal returns (IDelegationManager.Withdrawal memory, IERC20[] memory, bytes32) { +// uint256[] memory depositAmounts = new uint256[](1); +// depositAmounts[0] = depositAmount; +// IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, depositAmounts); +// ( +// IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, +// IDelegationManager.Withdrawal memory withdrawal, +// bytes32 withdrawalRoot +// ) = _setUpQueueWithdrawalsSingleStrat({ +// staker: staker, +// withdrawer: withdrawer, +// strategy: strategies[0], +// withdrawalAmount: withdrawalAmount +// }); + +// cheats.prank(staker); +// delegationManager.queueWithdrawals(queuedWithdrawalParams); +// // Set the current deposits to be the depositAmount - withdrawalAmount +// uint256[] memory currentAmounts = new uint256[](1); +// currentAmounts[0] = depositAmount - withdrawalAmount; +// strategyManagerMock.setDeposits(staker, strategies, currentAmounts); + +// IERC20[] memory tokens = new IERC20[](1); +// tokens[0] = strategies[0].underlyingToken(); +// return (withdrawal, tokens, withdrawalRoot); +// } + +// /** +// * Deploy and deposit staker into a single strategy, then set up a queued withdrawal for the staker +// * Assumptions: +// * - operator is already a registered operator. +// * - withdrawalAmount <= depositAmount +// */ +// function _setUpCompleteQueuedWithdrawalBeaconStrat( +// address staker, +// address withdrawer, +// uint256 depositAmount, +// uint256 withdrawalAmount +// ) internal returns (IDelegationManager.Withdrawal memory, IERC20[] memory, bytes32) { +// uint256[] memory depositAmounts = new uint256[](1); +// depositAmounts[0] = depositAmount; +// IStrategy[] memory strategies = new IStrategy[](1); +// strategies[0] = beaconChainETHStrategy; +// ( +// IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, +// IDelegationManager.Withdrawal memory withdrawal, +// bytes32 withdrawalRoot +// ) = _setUpQueueWithdrawalsSingleStrat({ +// staker: staker, +// withdrawer: withdrawer, +// strategy: strategies[0], +// withdrawalAmount: withdrawalAmount +// }); + +// cheats.prank(staker); +// delegationManager.queueWithdrawals(queuedWithdrawalParams); +// // Set the current deposits to be the depositAmount - withdrawalAmount +// uint256[] memory currentAmounts = new uint256[](1); +// currentAmounts[0] = depositAmount - withdrawalAmount; +// strategyManagerMock.setDeposits(staker, strategies, currentAmounts); + +// IERC20[] memory tokens; +// // tokens[0] = strategies[0].underlyingToken(); +// return (withdrawal, tokens, withdrawalRoot); +// } + +// /** +// * Deploy and deposit staker into strategies, then set up a queued withdrawal for the staker +// * Assumptions: +// * - operator is already a registered operator. +// * - for each i, withdrawalAmount[i] <= depositAmount[i] (see filterFuzzedDepositWithdrawInputs above) +// */ +// function _setUpCompleteQueuedWithdrawal( +// address staker, +// address withdrawer, +// uint256[] memory depositAmounts, +// uint256[] memory withdrawalAmounts +// ) internal returns (IDelegationManager.Withdrawal memory, IERC20[] memory, bytes32) { +// IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, depositAmounts); + +// IERC20[] memory tokens = new IERC20[](strategies.length); +// for (uint256 i = 0; i < strategies.length; i++) { +// tokens[i] = strategies[i].underlyingToken(); +// } + +// ( +// IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, +// IDelegationManager.Withdrawal memory withdrawal, +// bytes32 withdrawalRoot +// ) = _setUpQueueWithdrawals({ +// staker: staker, +// withdrawer: withdrawer, +// strategies: strategies, +// withdrawalAmounts: withdrawalAmounts +// }); + +// cheats.prank(staker); +// delegationManager.queueWithdrawals(queuedWithdrawalParams); + +// return (withdrawal, tokens, withdrawalRoot); +// } +// } + +// contract DelegationManagerUnitTests_Initialization_Setters is DelegationManagerUnitTests { +// function test_initialization() public { +// assertEq( +// address(delegationManager.strategyManager()), +// address(strategyManagerMock), +// "constructor / initializer incorrect, strategyManager set wrong" +// ); +// assertEq( +// address(delegationManager.slasher()), +// address(slasherMock), +// "constructor / initializer incorrect, slasher set wrong" +// ); +// assertEq( +// address(delegationManager.pauserRegistry()), +// address(pauserRegistry), +// "constructor / initializer incorrect, pauserRegistry set wrong" +// ); +// assertEq(delegationManager.owner(), address(this), "constructor / initializer incorrect, owner set wrong"); +// assertEq(delegationManager.paused(), 0, "constructor / initializer incorrect, paused status set wrong"); +// } + +// /// @notice Verifies that the DelegationManager cannot be iniitalized multiple times +// function test_initialize_revert_reinitialization() public { +// cheats.expectRevert("Initializable: contract is already initialized"); +// delegationManager.initialize( +// address(this), +// pauserRegistry, +// 0, +// 0, // minWithdrawalDelayBlocks +// initializeStrategiesToSetDelayBlocks, +// initializeWithdrawalDelayBlocks +// ); +// } + +// function testFuzz_setMinWithdrawalDelayBlocks_revert_notOwner( +// address invalidCaller +// ) public filterFuzzedAddressInputs(invalidCaller) { +// cheats.assume(invalidCaller != delegationManager.owner()); +// cheats.prank(invalidCaller); +// cheats.expectRevert("Ownable: caller is not the owner"); +// delegationManager.setMinWithdrawalDelayBlocks(0); +// } + +// function testFuzz_setMinWithdrawalDelayBlocks_revert_tooLarge(uint256 newMinWithdrawalDelayBlocks) external { +// // filter fuzzed inputs to disallowed amounts +// cheats.assume(newMinWithdrawalDelayBlocks > delegationManager.MAX_WITHDRAWAL_DELAY_BLOCKS()); + +// // attempt to set the `minWithdrawalDelayBlocks` variable +// cheats.expectRevert("DelegationManager._setMinWithdrawalDelayBlocks: _minWithdrawalDelayBlocks cannot be > MAX_WITHDRAWAL_DELAY_BLOCKS"); +// delegationManager.setMinWithdrawalDelayBlocks(newMinWithdrawalDelayBlocks); +// } + +// function testFuzz_initialize_Revert_WhenWithdrawalDelayBlocksTooLarge( +// uint256[] memory withdrawalDelayBlocks, +// uint256 invalidStrategyIndex +// ) public { +// // set withdrawalDelayBlocks to be too large +// cheats.assume(withdrawalDelayBlocks.length > 0); +// uint256 numStrats = withdrawalDelayBlocks.length; +// IStrategy[] memory strategiesToSetDelayBlocks = new IStrategy[](numStrats); +// for (uint256 i = 0; i < numStrats; i++) { +// strategiesToSetDelayBlocks[i] = IStrategy(address(uint160(uint256(keccak256(abi.encode(strategyMock, i)))))); +// } + +// // set at least one index to be too large for withdrawalDelayBlocks +// invalidStrategyIndex = invalidStrategyIndex % numStrats; +// withdrawalDelayBlocks[invalidStrategyIndex] = MAX_WITHDRAWAL_DELAY_BLOCKS + 1; + +// // Deploy DelegationManager implmentation and proxy +// delegationManagerImplementation = new DelegationManager(strategyManagerMock, slasherMock, eigenPodManagerMock); +// cheats.expectRevert( +// "DelegationManager._setStrategyWithdrawalDelayBlocks: _withdrawalDelayBlocks cannot be > MAX_WITHDRAWAL_DELAY_BLOCKS" +// ); +// delegationManager = DelegationManager( +// address( +// new TransparentUpgradeableProxy( +// address(delegationManagerImplementation), +// address(eigenLayerProxyAdmin), +// abi.encodeWithSelector( +// DelegationManager.initialize.selector, +// address(this), +// pauserRegistry, +// 0, // 0 is initialPausedStatus +// minWithdrawalDelayBlocks, +// strategiesToSetDelayBlocks, +// withdrawalDelayBlocks +// ) +// ) +// ) +// ); +// } +// } + +// contract DelegationManagerUnitTests_RegisterModifyOperator is DelegationManagerUnitTests { +// function test_registerAsOperator_revert_paused() public { +// // set the pausing flag +// cheats.prank(pauser); +// delegationManager.pause(2 ** PAUSED_NEW_DELEGATION); + +// cheats.expectRevert("Pausable: index is paused"); +// delegationManager.registerAsOperator( +// IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: defaultOperator, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }), +// emptyStringForMetadataURI +// ); +// } + +// // @notice Verifies that someone cannot successfully call `DelegationManager.registerAsOperator(operatorDetails)` again after registering for the first time +// function testFuzz_registerAsOperator_revert_cannotRegisterMultipleTimes( +// address operator, +// IDelegationManager.OperatorDetails memory operatorDetails +// ) public filterFuzzedAddressInputs(operator) { +// _filterOperatorDetails(operator, operatorDetails); + +// // Register once +// cheats.startPrank(operator); +// delegationManager.registerAsOperator(operatorDetails, emptyStringForMetadataURI); + +// // Expect revert when register again +// cheats.expectRevert("DelegationManager.registerAsOperator: caller is already actively delegated"); +// delegationManager.registerAsOperator(operatorDetails, emptyStringForMetadataURI); +// cheats.stopPrank(); +// } + +// /** +// * @notice Verifies that an operator cannot register with `stakerOptOutWindowBlocks` set larger than `MAX_STAKER_OPT_OUT_WINDOW_BLOCKS` +// */ +// function testFuzz_registerAsOperator_revert_optOutBlocksTooLarge( +// IDelegationManager.OperatorDetails memory operatorDetails +// ) public { +// // filter out *allowed* stakerOptOutWindowBlocks values +// cheats.assume(operatorDetails.stakerOptOutWindowBlocks > delegationManager.MAX_STAKER_OPT_OUT_WINDOW_BLOCKS()); + +// cheats.prank(defaultOperator); +// cheats.expectRevert("DelegationManager._setOperatorDetails: stakerOptOutWindowBlocks cannot be > MAX_STAKER_OPT_OUT_WINDOW_BLOCKS"); +// delegationManager.registerAsOperator(operatorDetails, emptyStringForMetadataURI); +// } + +// /** +// * @notice `operator` registers via calling `DelegationManager.registerAsOperator(operatorDetails, metadataURI)` +// * Should be able to set any parameters, other than too high value for `stakerOptOutWindowBlocks` +// * The set parameters should match the desired parameters (correct storage update) +// * Operator becomes delegated to themselves +// * Properly emits events – especially the `OperatorRegistered` event, but also `StakerDelegated` & `OperatorDetailsModified` events +// * Reverts appropriately if operator was already delegated to someone (including themselves, i.e. they were already an operator) +// * @param operator and @param operatorDetails are fuzzed inputs +// */ +// function testFuzz_registerAsOperator( +// address operator, +// IDelegationManager.OperatorDetails memory operatorDetails, +// string memory metadataURI +// ) public filterFuzzedAddressInputs(operator) { +// _filterOperatorDetails(operator, operatorDetails); + +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorDetailsModified(operator, operatorDetails); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(operator, operator); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorRegistered(operator, operatorDetails); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorMetadataURIUpdated(operator, metadataURI); + +// cheats.prank(operator); +// delegationManager.registerAsOperator(operatorDetails, metadataURI); + +// // Storage checks +// assertEq( +// operatorDetails.delegationApprover, +// delegationManager.delegationApprover(operator), +// "delegationApprover not set correctly" +// ); +// assertEq( +// operatorDetails.stakerOptOutWindowBlocks, +// delegationManager.stakerOptOutWindowBlocks(operator), +// "stakerOptOutWindowBlocks not set correctly" +// ); +// assertEq(delegationManager.delegatedTo(operator), operator, "operator not delegated to self"); +// } + +// // @notice Verifies that a staker who is actively delegated to an operator cannot register as an operator (without first undelegating, at least) +// function testFuzz_registerAsOperator_cannotRegisterWhileDelegated( +// address staker, +// IDelegationManager.OperatorDetails memory operatorDetails +// ) public filterFuzzedAddressInputs(staker) { +// cheats.assume(staker != defaultOperator); +// // Staker becomes an operator, so filter against staker's address +// _filterOperatorDetails(staker, operatorDetails); + +// // register *this contract* as an operator +// _registerOperatorWithBaseDetails(defaultOperator); + +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); + +// // expect revert if attempt to register as operator +// cheats.expectRevert("DelegationManager.registerAsOperator: caller is already actively delegated"); +// delegationManager.registerAsOperator(operatorDetails, emptyStringForMetadataURI); + +// cheats.stopPrank(); +// } + +// /** +// * @notice Tests that an operator can modify their OperatorDetails by calling `DelegationManager.modifyOperatorDetails` +// * Should be able to set any parameters, other than setting their `earningsReceiver` to the zero address or too high value for `stakerOptOutWindowBlocks` +// * The set parameters should match the desired parameters (correct storage update) +// * Properly emits an `OperatorDetailsModified` event +// * Reverts appropriately if the caller is not an operator +// * Reverts if operator tries to decrease their `stakerOptOutWindowBlocks` parameter +// * @param initialOperatorDetails and @param modifiedOperatorDetails are fuzzed inputs +// */ +// function testFuzz_modifyOperatorParameters( +// IDelegationManager.OperatorDetails memory initialOperatorDetails, +// IDelegationManager.OperatorDetails memory modifiedOperatorDetails +// ) public { +// _registerOperator(defaultOperator, initialOperatorDetails, emptyStringForMetadataURI); + +// cheats.startPrank(defaultOperator); + +// // either it fails for trying to set the stakerOptOutWindowBlocks +// if (modifiedOperatorDetails.stakerOptOutWindowBlocks > delegationManager.MAX_STAKER_OPT_OUT_WINDOW_BLOCKS()) { +// cheats.expectRevert( +// "DelegationManager._setOperatorDetails: stakerOptOutWindowBlocks cannot be > MAX_STAKER_OPT_OUT_WINDOW_BLOCKS" +// ); +// delegationManager.modifyOperatorDetails(modifiedOperatorDetails); +// // or the transition is allowed, +// } else if ( +// modifiedOperatorDetails.stakerOptOutWindowBlocks >= initialOperatorDetails.stakerOptOutWindowBlocks +// ) { +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorDetailsModified(defaultOperator, modifiedOperatorDetails); +// delegationManager.modifyOperatorDetails(modifiedOperatorDetails); + +// assertEq( +// modifiedOperatorDetails.delegationApprover, +// delegationManager.delegationApprover(defaultOperator), +// "delegationApprover not set correctly" +// ); +// assertEq( +// modifiedOperatorDetails.stakerOptOutWindowBlocks, +// delegationManager.stakerOptOutWindowBlocks(defaultOperator), +// "stakerOptOutWindowBlocks not set correctly" +// ); +// assertEq(delegationManager.delegatedTo(defaultOperator), defaultOperator, "operator not delegated to self"); +// // or else the transition is disallowed +// } else { +// cheats.expectRevert("DelegationManager._setOperatorDetails: stakerOptOutWindowBlocks cannot be decreased"); +// delegationManager.modifyOperatorDetails(modifiedOperatorDetails); +// } + +// cheats.stopPrank(); +// } + +// // @notice Tests that an address which is not an operator cannot successfully call `updateOperatorMetadataURI`. +// function test_updateOperatorMetadataUri_notRegistered() public { +// assertFalse(delegationManager.isOperator(defaultOperator), "bad test setup"); + +// cheats.prank(defaultOperator); +// cheats.expectRevert("DelegationManager.updateOperatorMetadataURI: caller must be an operator"); +// delegationManager.updateOperatorMetadataURI(emptyStringForMetadataURI); +// } + +// /** +// * @notice Verifies that a staker cannot call cannot modify their `OperatorDetails` without first registering as an operator +// * @dev This is an important check to ensure that our definition of 'operator' remains consistent, in particular for preserving the +// * invariant that 'operators' are always delegated to themselves +// */ +// function testFuzz_updateOperatorMetadataUri_revert_notOperator( +// IDelegationManager.OperatorDetails memory operatorDetails +// ) public { +// cheats.expectRevert("DelegationManager.modifyOperatorDetails: caller must be an operator"); +// delegationManager.modifyOperatorDetails(operatorDetails); +// } + +// // @notice Tests that an operator who calls `updateOperatorMetadataURI` will correctly see an `OperatorMetadataURIUpdated` event emitted with their input +// function testFuzz_UpdateOperatorMetadataURI(string memory metadataURI) public { +// // register *this contract* as an operator +// _registerOperatorWithBaseDetails(defaultOperator); + +// // call `updateOperatorMetadataURI` and check for event +// cheats.prank(defaultOperator); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorMetadataURIUpdated(defaultOperator, metadataURI); +// delegationManager.updateOperatorMetadataURI(metadataURI); +// } +// } + +// contract DelegationManagerUnitTests_delegateTo is DelegationManagerUnitTests { +// function test_Revert_WhenPaused() public { +// cheats.prank(defaultOperator); +// delegationManager.registerAsOperator( +// IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: defaultOperator, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }), +// emptyStringForMetadataURI +// ); + +// // set the pausing flag +// cheats.prank(pauser); +// delegationManager.pause(2 ** PAUSED_NEW_DELEGATION); + +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// cheats.prank(defaultStaker); +// cheats.expectRevert("Pausable: index is paused"); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); +// } + +// /** +// * @notice Delegates from `staker` to an operator, then verifies that the `staker` cannot delegate to another `operator` (at least without first undelegating) +// */ +// function testFuzz_Revert_WhenDelegateWhileDelegated( +// address staker, +// address operator, +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry, +// bytes32 salt +// ) public filterFuzzedAddressInputs(staker) filterFuzzedAddressInputs(operator) { +// // filter out input since if the staker tries to delegate again after registering as an operator, we will revert earlier than this test is designed to check +// cheats.assume(staker != operator); + +// // delegate from the staker to an operator +// cheats.assume(operator != address(this)); +// _registerOperatorWithBaseDetails(operator); +// _delegateToOperatorWhoAcceptsAllStakers(staker, operator); + +// // try to delegate again and check that the call reverts +// cheats.startPrank(staker); +// cheats.expectRevert("DelegationManager.delegateTo: staker is already actively delegated"); +// delegationManager.delegateTo(operator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); +// } + +// // @notice Verifies that `staker` cannot delegate to an unregistered `operator` +// function testFuzz_Revert_WhenDelegateToUnregisteredOperator( +// address staker, +// address operator +// ) public filterFuzzedAddressInputs(staker) filterFuzzedAddressInputs(operator) { +// assertFalse(delegationManager.isOperator(operator), "incorrect test input?"); + +// // try to delegate and check that the call reverts +// cheats.startPrank(staker); +// cheats.expectRevert("DelegationManager.delegateTo: operator is not registered in EigenLayer"); +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// delegationManager.delegateTo(operator, approverSignatureAndExpiry, emptySalt); +// cheats.stopPrank(); +// } + +// /** +// * @notice `staker` delegates to an operator who does not require any signature verification (i.e. the operator’s `delegationApprover` address is set to the zero address) +// * via the `staker` calling `DelegationManager.delegateTo` +// * The function should pass with any `operatorSignature` input (since it should be unused) +// * Properly emits a `StakerDelegated` event +// * Staker is correctly delegated after the call (i.e. correct storage update) +// * Reverts if the staker is already delegated (to the operator or to anyone else) +// * Reverts if the ‘operator’ is not actually registered as an operator +// */ +// function testFuzz_OperatorWhoAcceptsAllStakers_StrategyManagerShares( +// address staker, +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry, +// bytes32 salt, +// uint256 shares +// ) public filterFuzzedAddressInputs(staker) { +// // register *this contract* as an operator +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// _registerOperatorWithBaseDetails(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// // Set staker shares in StrategyManager +// IStrategy[] memory strategiesToReturn = new IStrategy[](1); +// strategiesToReturn[0] = strategyMock; +// uint256[] memory sharesToReturn = new uint256[](1); +// sharesToReturn[0] = shares; +// strategyManagerMock.setDeposits(staker, strategiesToReturn, sharesToReturn); +// uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(staker, defaultOperator); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, staker, strategyMock, shares); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); +// uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); + +// assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); +// assertTrue(delegationManager.isOperator(defaultOperator), "staker not registered as operator"); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// } + +// /** +// * @notice `staker` delegates to an operator who does not require any signature verification (i.e. the operator’s `delegationApprover` address is set to the zero address) +// * via the `staker` calling `DelegationManager.delegateTo` +// * The function should pass with any `operatorSignature` input (since it should be unused) +// * Properly emits a `StakerDelegated` event +// * Staker is correctly delegated after the call (i.e. correct storage update) +// * OperatorSharesIncreased event should only be emitted if beaconShares is > 0. Since a staker can have negative shares nothing should happen in that case +// */ +// function testFuzz_OperatorWhoAcceptsAllStakers_BeaconChainStrategyShares( +// address staker, +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry, +// bytes32 salt, +// int256 beaconShares +// ) public filterFuzzedAddressInputs(staker) { +// // register *this contract* as an operator +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// _registerOperatorWithBaseDetails(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// // Set staker shares in BeaconChainStrategy +// eigenPodManagerMock.setPodOwnerShares(staker, beaconShares); +// uint256 beaconSharesBefore = delegationManager.operatorShares(staker, beaconChainETHStrategy); +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(staker, defaultOperator); +// if (beaconShares > 0) { +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, staker, beaconChainETHStrategy, uint256(beaconShares)); +// } +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); +// uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); +// if (beaconShares <= 0) { +// assertEq( +// beaconSharesBefore, +// beaconSharesAfter, +// "operator beaconchain shares should not have increased with negative shares" +// ); +// } else { +// assertEq( +// beaconSharesBefore + uint256(beaconShares), +// beaconSharesAfter, +// "operator beaconchain shares not increased correctly" +// ); +// } +// assertTrue(delegationManager.isOperator(defaultOperator), "staker not registered as operator"); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// } + +// /** +// * @notice `staker` delegates to an operator who does not require any signature verification (i.e. the operator’s `delegationApprover` address is set to the zero address) +// * via the `staker` calling `DelegationManager.delegateTo` +// * Similar to tests above but now with staker who has both EigenPod and StrategyManager shares. +// */ +// function testFuzz_OperatorWhoAcceptsAllStakers_BeaconChainAndStrategyManagerShares( +// address staker, +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry, +// bytes32 salt, +// int256 beaconShares, +// uint256 shares +// ) public filterFuzzedAddressInputs(staker) { +// // register *this contract* as an operator +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// _registerOperatorWithBaseDetails(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// // Set staker shares in BeaconChainStrategy and StrategyMananger +// IStrategy[] memory strategiesToReturn = new IStrategy[](1); +// strategiesToReturn[0] = strategyMock; +// uint256[] memory sharesToReturn = new uint256[](1); +// sharesToReturn[0] = shares; +// strategyManagerMock.setDeposits(staker, strategiesToReturn, sharesToReturn); +// eigenPodManagerMock.setPodOwnerShares(staker, beaconShares); +// uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); +// uint256 beaconSharesBefore = delegationManager.operatorShares(staker, beaconChainETHStrategy); +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(staker, defaultOperator); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, staker, strategyMock, shares); +// if (beaconShares > 0) { +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, staker, beaconChainETHStrategy, uint256(beaconShares)); +// } +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); +// uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); +// uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); +// if (beaconShares <= 0) { +// assertEq( +// beaconSharesBefore, +// beaconSharesAfter, +// "operator beaconchain shares should not have increased with negative shares" +// ); +// } else { +// assertEq( +// beaconSharesBefore + uint256(beaconShares), +// beaconSharesAfter, +// "operator beaconchain shares not increased correctly" +// ); +// } +// assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); +// assertTrue(delegationManager.isOperator(defaultOperator), "staker not registered as operator"); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// } + +// /** +// * @notice `staker` delegates to a operator who does not require any signature verification similar to test above. +// * In this scenario, staker doesn't have any delegatable shares and operator shares should not increase. Staker +// * should still be correctly delegated to the operator after the call. +// */ +// function testFuzz_OperatorWhoAcceptsAllStakers_ZeroDelegatableShares( +// address staker, +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry, +// bytes32 salt +// ) public filterFuzzedAddressInputs(staker) { +// // register *this contract* as an operator +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// _registerOperatorWithBaseDetails(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); + +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(staker, defaultOperator); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); + +// assertTrue(delegationManager.isOperator(defaultOperator), "staker not registered as operator"); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// } + +// /** +// * @notice Like `testDelegateToOperatorWhoRequiresECDSASignature` but using an invalid expiry on purpose and checking that reversion occurs +// */ +// function testFuzz_Revert_WhenOperatorWhoRequiresECDSASignature_ExpiredDelegationApproverSignature( +// address staker, +// bytes32 salt, +// uint256 expiry +// ) public filterFuzzedAddressInputs(staker) { +// // roll to a very late timestamp +// skip(type(uint256).max / 2); +// // filter to only *invalid* `expiry` values +// expiry = bound(expiry, 0, block.timestamp - 1); +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// _registerOperatorWithDelegationApprover(defaultOperator); + +// // calculate the delegationSigner's signature +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// staker, +// defaultOperator, +// salt, +// expiry +// ); + +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// cheats.expectRevert("DelegationManager._delegate: approver signature expired"); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); +// } + +// /** +// * @notice Like `testDelegateToOperatorWhoRequiresECDSASignature` but undelegating after delegating and trying the same approveSignature +// * and checking that reversion occurs with the same salt +// */ +// function testFuzz_Revert_WhenOperatorWhoRequiresECDSASignature_PreviouslyUsedSalt( +// address staker, +// bytes32 salt, +// uint256 expiry +// ) public filterFuzzedAddressInputs(staker) { +// // filter to only valid `expiry` values +// cheats.assume(expiry >= block.timestamp); + +// // filter inputs, since this will fail when the staker is already registered as an operator +// // staker also must not be the delegationApprover so that signature verification process takes place +// cheats.assume(staker != defaultOperator); +// cheats.assume(staker != defaultApprover); + +// _registerOperatorWithDelegationApprover(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// // calculate the delegationSigner's signature +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// staker, +// defaultOperator, +// salt, +// expiry +// ); + +// // delegate from the `staker` to the operator, undelegate, and then try to delegate again with same approversalt +// // to check that call reverts +// cheats.startPrank(staker); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// assertTrue( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent not spent?" +// ); +// delegationManager.undelegate(staker); +// cheats.expectRevert("DelegationManager._delegate: approverSalt already spent"); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); +// } + +// /** +// * @notice Like `testDelegateToOperatorWhoRequiresECDSASignature` but using an incorrect signature on purpose and checking that reversion occurs +// */ +// function testFuzz_Revert_WhenOperatorWhoRequiresECDSASignature_WithBadSignature( +// address staker, +// uint256 expiry +// ) public filterFuzzedAddressInputs(staker) { +// // filter to only valid `expiry` values +// expiry = bound(expiry, block.timestamp + 1, type(uint256).max); +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator && staker != defaultApprover); + +// _registerOperatorWithDelegationApprover(defaultOperator); + +// // calculate the signature +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// approverSignatureAndExpiry.expiry = expiry; +// { +// bytes32 digestHash = delegationManager.calculateDelegationApprovalDigestHash( +// staker, +// defaultOperator, +// delegationManager.delegationApprover(defaultOperator), +// emptySalt, +// expiry +// ); +// (uint8 v, bytes32 r, bytes32 s) = cheats.sign(delegationSignerPrivateKey, digestHash); +// // mess up the signature by flipping v's parity +// v = (v == 27 ? 28 : 27); +// approverSignatureAndExpiry.signature = abi.encodePacked(r, s, v); +// } + +// // try to delegate from the `staker` to the operator, and check reversion +// cheats.startPrank(staker); +// cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: signature not from signer"); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); +// cheats.stopPrank(); +// } + +// /** +// * @notice `staker` delegates to an operator who requires signature verification through an EOA (i.e. the operator’s `delegationApprover` address is set to a nonzero EOA) +// * via the `staker` calling `DelegationManager.delegateTo` +// * The function should pass *only with a valid ECDSA signature from the `delegationApprover`, OR if called by the operator or their delegationApprover themselves +// * Properly emits a `StakerDelegated` event +// * Staker is correctly delegated after the call (i.e. correct storage update) +// * Reverts if the staker is already delegated (to the operator or to anyone else) +// * Reverts if the ‘operator’ is not actually registered as an operator +// */ +// function testFuzz_OperatorWhoRequiresECDSASignature( +// address staker, +// bytes32 salt, +// uint256 expiry +// ) public filterFuzzedAddressInputs(staker) { +// // filter to only valid `expiry` values +// cheats.assume(expiry >= block.timestamp); +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// _registerOperatorWithDelegationApprover(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// // calculate the delegationSigner's signature +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// staker, +// defaultOperator, +// salt, +// expiry +// ); + +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(staker, defaultOperator); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); + +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); + +// if (staker == delegationManager.delegationApprover(defaultOperator)) { +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too incorrectly?" +// ); +// } else { +// // verify that the salt is marked as used +// assertTrue( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent not spent?" +// ); +// } +// } + +// /** +// * @notice `staker` delegates to an operator who requires signature verification through an EOA (i.e. the operator’s `delegationApprover` address is set to a nonzero EOA) +// * via the `staker` calling `DelegationManager.delegateTo` +// * The function should pass *only with a valid ECDSA signature from the `delegationApprover`, OR if called by the operator or their delegationApprover themselves +// * Properly emits a `StakerDelegated` event +// * Staker is correctly delegated after the call (i.e. correct storage update) +// * Operator shares should increase by the amount of shares delegated +// * Reverts if the staker is already delegated (to the operator or to anyone else) +// * Reverts if the ‘operator’ is not actually registered as an operator +// */ +// function testFuzz_OperatorWhoRequiresECDSASignature_StrategyManagerShares( +// address staker, +// bytes32 salt, +// uint256 expiry, +// uint256 shares +// ) public filterFuzzedAddressInputs(staker) { +// // filter to only valid `expiry` values +// cheats.assume(expiry >= block.timestamp); +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// _registerOperatorWithDelegationApprover(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// // calculate the delegationSigner's signature +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// staker, +// defaultOperator, +// salt, +// expiry +// ); + +// // Set staker shares in StrategyManager +// IStrategy[] memory strategiesToReturn = new IStrategy[](1); +// strategiesToReturn[0] = strategyMock; +// uint256[] memory sharesToReturn = new uint256[](1); +// sharesToReturn[0] = shares; +// strategyManagerMock.setDeposits(staker, strategiesToReturn, sharesToReturn); +// uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(staker, defaultOperator); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); +// uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); +// assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); + +// if (staker == delegationManager.delegationApprover(defaultOperator)) { +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too incorrectly?" +// ); +// } else { +// // verify that the salt is marked as used +// assertTrue( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent not spent?" +// ); +// } +// } + +// /** +// * @notice `staker` delegates to an operator who requires signature verification through an EOA (i.e. the operator’s `delegationApprover` address is set to a nonzero EOA) +// * via the `staker` calling `DelegationManager.delegateTo` +// * The function should pass *only with a valid ECDSA signature from the `delegationApprover`, OR if called by the operator or their delegationApprover themselves +// * Properly emits a `StakerDelegated` event +// * Staker is correctly delegated after the call (i.e. correct storage update) +// * Operator beaconShares should increase by the amount of shares delegated if beaconShares > 0 +// * Reverts if the staker is already delegated (to the operator or to anyone else) +// * Reverts if the ‘operator’ is not actually registered as an operator +// */ +// function testFuzz_OperatorWhoRequiresECDSASignature_BeaconChainStrategyShares( +// address staker, +// bytes32 salt, +// uint256 expiry, +// int256 beaconShares +// ) public filterFuzzedAddressInputs(staker) { +// // filter to only valid `expiry` values +// cheats.assume(expiry >= block.timestamp); +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// _registerOperatorWithDelegationApprover(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// // calculate the delegationSigner's signature +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// staker, +// defaultOperator, +// salt, +// expiry +// ); + +// // Set staker shares in BeaconChainStrategy +// eigenPodManagerMock.setPodOwnerShares(staker, beaconShares); +// uint256 beaconSharesBefore = delegationManager.operatorShares(staker, beaconChainETHStrategy); +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(staker, defaultOperator); +// if (beaconShares > 0) { +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, staker, beaconChainETHStrategy, uint256(beaconShares)); +// } +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); +// uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); +// if (beaconShares <= 0) { +// assertEq( +// beaconSharesBefore, +// beaconSharesAfter, +// "operator beaconchain shares should not have increased with negative shares" +// ); +// } else { +// assertEq( +// beaconSharesBefore + uint256(beaconShares), +// beaconSharesAfter, +// "operator beaconchain shares not increased correctly" +// ); +// } +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); + +// if (staker == delegationManager.delegationApprover(defaultOperator)) { +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too incorrectly?" +// ); +// } else { +// // verify that the salt is marked as used +// assertTrue( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent not spent?" +// ); +// } +// } + +// /** +// * @notice `staker` delegates to an operator who requires signature verification through an EOA (i.e. the operator’s `delegationApprover` address is set to a nonzero EOA) +// * via the `staker` calling `DelegationManager.delegateTo` +// * The function should pass *only with a valid ECDSA signature from the `delegationApprover`, OR if called by the operator or their delegationApprover themselves +// * Properly emits a `StakerDelegated` event +// * Staker is correctly delegated after the call (i.e. correct storage update) +// * Operator beaconshares should increase by the amount of beaconShares delegated if beaconShares > 0 +// * Operator strategy manager shares should icnrease by amount of shares +// * Reverts if the staker is already delegated (to the operator or to anyone else) +// * Reverts if the ‘operator’ is not actually registered as an operator +// */ +// function testFuzz_OperatorWhoRequiresECDSASignature_BeaconChainAndStrategyManagerShares( +// address staker, +// bytes32 salt, +// uint256 expiry, +// int256 beaconShares, +// uint256 shares +// ) public filterFuzzedAddressInputs(staker) { +// // filter to only valid `expiry` values +// cheats.assume(expiry >= block.timestamp); + +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); +// _registerOperatorWithDelegationApprover(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// // calculate the delegationSigner's signature +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// staker, +// defaultOperator, +// salt, +// expiry +// ); + +// // Set staker shares in BeaconChainStrategy and StrategyMananger +// { +// IStrategy[] memory strategiesToReturn = new IStrategy[](1); +// strategiesToReturn[0] = strategyMock; +// uint256[] memory sharesToReturn = new uint256[](1); +// sharesToReturn[0] = shares; +// strategyManagerMock.setDeposits(staker, strategiesToReturn, sharesToReturn); +// eigenPodManagerMock.setPodOwnerShares(staker, beaconShares); +// } +// uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); +// uint256 beaconSharesBefore = delegationManager.operatorShares(staker, beaconChainETHStrategy); +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(staker, defaultOperator); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, staker, strategyMock, shares); +// if (beaconShares > 0) { +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, staker, beaconChainETHStrategy, uint256(beaconShares)); +// } +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); +// uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); +// uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); +// if (beaconShares <= 0) { +// assertEq( +// beaconSharesBefore, +// beaconSharesAfter, +// "operator beaconchain shares should not have increased with negative shares" +// ); +// } else { +// assertEq( +// beaconSharesBefore + uint256(beaconShares), +// beaconSharesAfter, +// "operator beaconchain shares not increased correctly" +// ); +// } +// assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); + +// if (staker == delegationManager.delegationApprover(defaultOperator)) { +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too incorrectly?" +// ); +// } else { +// // verify that the salt is marked as used +// assertTrue( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent not spent?" +// ); +// } +// } + +// /** +// * @notice delegateTo test with operator's delegationApprover address set to a contract address +// * and check that reversion occurs when the signature is expired +// */ +// function testFuzz_Revert_WhenOperatorWhoRequiresEIP1271Signature_ExpiredDelegationApproverSignature( +// address staker, +// uint256 expiry +// ) public filterFuzzedAddressInputs(staker) { +// // roll to a very late timestamp +// skip(type(uint256).max / 2); +// // filter to only *invalid* `expiry` values +// expiry = bound(expiry, 0, block.timestamp - 1); +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// _registerOperatorWithDelegationApprover(defaultOperator); + +// // create the signature struct +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// approverSignatureAndExpiry.expiry = expiry; + +// // try to delegate from the `staker` to the operator, and check reversion +// cheats.startPrank(staker); +// cheats.expectRevert("DelegationManager._delegate: approver signature expired"); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); +// cheats.stopPrank(); +// } + +// /** +// * @notice delegateTo test with operator's delegationApprover address set to a contract address +// * and check that reversion occurs when the signature approverSalt is already used. +// * Performed by delegating to operator, undelegating, and trying to reuse the same signature +// */ +// function testFuzz_Revert_WhenOperatorWhoRequiresEIP1271Signature_PreviouslyUsedSalt( +// address staker, +// bytes32 salt, +// uint256 expiry +// ) public filterFuzzedAddressInputs(staker) { +// // filter to only valid `expiry` values +// cheats.assume(expiry >= block.timestamp); + +// // register *this contract* as an operator +// // filter inputs, since this will fail when the staker is already registered as an operator +// ERC1271WalletMock wallet = _registerOperatorWith1271DelegationApprover(defaultOperator); +// cheats.assume(staker != address(wallet) && staker != defaultOperator); + +// // calculate the delegationSigner's signature +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// staker, +// defaultOperator, +// salt, +// expiry +// ); + +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(staker, defaultOperator); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// delegationManager.undelegate(staker); +// // Reusing same signature should revert with salt already being used +// cheats.expectRevert("DelegationManager._delegate: approverSalt already spent"); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); +// } + +// /** +// * @notice delegateTo test with operator's delegationApprover address set to a contract address that +// * is non compliant with EIP1271 +// */ +// function testFuzz_Revert_WhenOperatorWhoRequiresEIP1271Signature_NonCompliantWallet( +// address staker, +// uint256 expiry +// ) public filterFuzzedAddressInputs(staker) { +// // filter to only valid `expiry` values +// cheats.assume(expiry >= block.timestamp); + +// // register *this contract* as an operator +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// // deploy a ERC1271MaliciousMock contract that will return an incorrect value when called +// ERC1271MaliciousMock wallet = new ERC1271MaliciousMock(); + +// // filter fuzzed input, since otherwise we can get a flaky failure here. if the caller itself is the 'delegationApprover' +// // then we don't even trigger the signature verification call, so we won't get a revert as expected +// cheats.assume(staker != address(wallet)); + +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: defaultOperator, +// delegationApprover: address(wallet), +// stakerOptOutWindowBlocks: 0 +// }); +// _registerOperator(defaultOperator, operatorDetails, emptyStringForMetadataURI); + +// // create the signature struct +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// approverSignatureAndExpiry.expiry = expiry; + +// // try to delegate from the `staker` to the operator, and check reversion +// cheats.startPrank(staker); +// // because the ERC1271MaliciousMock contract returns the wrong amount of data, we get a low-level "EvmError: Revert" message here rather than the error message bubbling up +// cheats.expectRevert(); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); +// cheats.stopPrank(); +// } + +// /** +// * @notice delegateTo test with operator's delegationApprover address set to a contract address that +// * returns a value other than the EIP1271 "magic bytes" and checking that reversion occurs appropriately +// */ +// function testFuzz_Revert_WhenOperatorWhoRequiresEIP1271Signature_IsValidSignatureFails( +// address staker, +// bytes32 salt, +// uint256 expiry +// ) public filterFuzzedAddressInputs(staker) { +// // filter to only valid `expiry` values +// cheats.assume(expiry >= block.timestamp); + +// // register *this contract* as an operator +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// // deploy a ERC1271WalletMock contract that will return an incorrect value when called +// // owner is the 0 address +// ERC1271WalletMock wallet = new ERC1271WalletMock(address(1)); + +// // filter fuzzed input, since otherwise we can get a flaky failure here. if the caller itself is the 'delegationApprover' +// // then we don't even trigger the signature verification call, so we won't get a revert as expected +// cheats.assume(staker != address(wallet)); + +// IDelegationManager.OperatorDetails memory operatorDetails = IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: defaultOperator, +// delegationApprover: address(wallet), +// stakerOptOutWindowBlocks: 0 +// }); +// _registerOperator(defaultOperator, operatorDetails, emptyStringForMetadataURI); + +// // calculate the delegationSigner's but this is not the correct signature from the wallet contract +// // since the wallet owner is address(1) +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// staker, +// defaultOperator, +// salt, +// expiry +// ); + +// // try to delegate from the `staker` to the operator, and check reversion +// cheats.startPrank(staker); +// // Signature should fail as the wallet will not return EIP1271_MAGICVALUE +// cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: ERC1271 signature verification failed"); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, emptySalt); +// cheats.stopPrank(); +// } + +// /** +// * @notice `staker` delegates to an operator who requires signature verification through an EIP1271-compliant contract (i.e. the operator’s `delegationApprover` address is +// * set to a nonzero and code-containing address) via the `staker` calling `DelegationManager.delegateTo` +// * The function uses OZ's ERC1271WalletMock contract, and thus should pass *only when a valid ECDSA signature from the `owner` of the ERC1271WalletMock contract, +// * OR if called by the operator or their delegationApprover themselves +// * Properly emits a `StakerDelegated` event +// * Staker is correctly delegated after the call (i.e. correct storage update) +// * Reverts if the staker is already delegated (to the operator or to anyone else) +// * Reverts if the ‘operator’ is not actually registered as an operator +// */ +// function testFuzz_OperatorWhoRequiresEIP1271Signature( +// address staker, +// bytes32 salt, +// uint256 expiry +// ) public filterFuzzedAddressInputs(staker) { +// // filter to only valid `expiry` values +// cheats.assume(expiry >= block.timestamp); + +// // register *this contract* as an operator +// // filter inputs, since this will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// _registerOperatorWith1271DelegationApprover(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// // calculate the delegationSigner's signature +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// staker, +// defaultOperator, +// salt, +// expiry +// ); + +// // delegate from the `staker` to the operator +// cheats.startPrank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(staker, defaultOperator); +// delegationManager.delegateTo(defaultOperator, approverSignatureAndExpiry, salt); +// cheats.stopPrank(); + +// assertTrue(delegationManager.isDelegated(staker), "staker not delegated correctly"); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker delegated to the wrong address"); +// assertFalse(delegationManager.isOperator(staker), "staker incorrectly registered as operator"); + +// // check that the nonce incremented appropriately +// if (staker == defaultOperator || staker == delegationManager.delegationApprover(defaultOperator)) { +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too incorrectly?" +// ); +// } else { +// // verify that the salt is marked as used +// assertTrue( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent not spent?" +// ); +// } +// } +// } + +// contract DelegationManagerUnitTests_delegateToBySignature is DelegationManagerUnitTests { +// function test_revert_paused() public { +// cheats.prank(defaultOperator); +// delegationManager.registerAsOperator( +// IDelegationManager.OperatorDetails({ +// __deprecated_earningsReceiver: defaultOperator, +// delegationApprover: address(0), +// stakerOptOutWindowBlocks: 0 +// }), +// emptyStringForMetadataURI +// ); + +// // set the pausing flag +// cheats.prank(pauser); +// delegationManager.pause(2 ** PAUSED_NEW_DELEGATION); + +// uint256 expiry = type(uint256).max; +// ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( +// stakerPrivateKey, +// defaultOperator, +// expiry +// ); +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// cheats.expectRevert("Pausable: index is paused"); +// delegationManager.delegateToBySignature( +// defaultStaker, +// defaultOperator, +// stakerSignatureAndExpiry, +// approverSignatureAndExpiry, +// emptySalt +// ); +// } + +// /// @notice Checks that `DelegationManager.delegateToBySignature` reverts if the staker's signature has expired +// function testFuzz_Revert_WhenStakerSignatureExpired( +// address staker, +// address operator, +// uint256 expiry, +// bytes memory signature +// ) public filterFuzzedAddressInputs(staker) filterFuzzedAddressInputs(operator) { +// expiry = bound(expiry, 0, block.timestamp - 1); +// cheats.expectRevert("DelegationManager.delegateToBySignature: staker signature expired"); +// ISignatureUtils.SignatureWithExpiry memory signatureWithExpiry = ISignatureUtils.SignatureWithExpiry({ +// signature: signature, +// expiry: expiry +// }); +// delegationManager.delegateToBySignature(staker, operator, signatureWithExpiry, signatureWithExpiry, emptySalt); +// } + +// /// @notice Checks that `DelegationManager.delegateToBySignature` reverts if the staker's ECDSA signature verification fails +// function test_Revert_EOAStaker_WhenStakerSignatureVerificationFails() public { +// address invalidStaker = address(1000); +// address caller = address(2000); +// uint256 expiry = type(uint256).max; + +// _registerOperatorWithBaseDetails(defaultOperator); + +// ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( +// stakerPrivateKey, +// defaultOperator, +// expiry +// ); + +// // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` +// // Should revert from invalid signature as staker is not set as the address of signer +// cheats.startPrank(caller); +// cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: signature not from signer"); +// // use an empty approver signature input since none is needed / the input is unchecked +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// delegationManager.delegateToBySignature( +// invalidStaker, +// defaultOperator, +// stakerSignatureAndExpiry, +// approverSignatureAndExpiry, +// emptySalt +// ); +// cheats.stopPrank(); +// } + +// /// @notice Checks that `DelegationManager.delegateToBySignature` reverts if the staker's contract signature verification fails +// function test_Revert_ERC1271Staker_WhenStakerSignatureVerficationFails() public { +// address staker = address(new ERC1271WalletMock(address(1))); +// address caller = address(2000); +// uint256 expiry = type(uint256).max; + +// _registerOperatorWithBaseDetails(defaultOperator); + +// ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( +// stakerPrivateKey, +// defaultOperator, +// expiry +// ); + +// // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` +// // Should revert from invalid signature as staker is not set as the address of signer +// cheats.startPrank(caller); +// cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: ERC1271 signature verification failed"); +// // use an empty approver signature input since none is needed / the input is unchecked +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// delegationManager.delegateToBySignature( +// staker, +// defaultOperator, +// stakerSignatureAndExpiry, +// approverSignatureAndExpiry, +// emptySalt +// ); +// cheats.stopPrank(); +// } + +// /// @notice Checks that `DelegationManager.delegateToBySignature` reverts when the staker is already delegated +// function test_Revert_Staker_WhenAlreadyDelegated() public { +// address staker = cheats.addr(stakerPrivateKey); +// address caller = address(2000); +// uint256 expiry = type(uint256).max; + +// _registerOperatorWithBaseDetails(defaultOperator); + +// ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( +// stakerPrivateKey, +// defaultOperator, +// expiry +// ); + +// _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); +// // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` +// // Should revert as `staker` has already delegated to `operator` +// cheats.startPrank(caller); +// cheats.expectRevert("DelegationManager.delegateToBySignature: staker is already actively delegated"); +// // use an empty approver signature input since none is needed / the input is unchecked +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// delegationManager.delegateToBySignature( +// staker, +// defaultOperator, +// stakerSignatureAndExpiry, +// approverSignatureAndExpiry, +// emptySalt +// ); +// cheats.stopPrank(); +// } + +// /// @notice Checks that `delegateToBySignature` reverts when operator is not registered after successful staker signature verification +// function test_Revert_EOAStaker_OperatorNotRegistered() public { +// address staker = cheats.addr(stakerPrivateKey); +// address caller = address(2000); +// uint256 expiry = type(uint256).max; + +// ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( +// stakerPrivateKey, +// defaultOperator, +// expiry +// ); + +// // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` +// // Should revert as `operator` is not registered +// cheats.startPrank(caller); +// cheats.expectRevert("DelegationManager.delegateToBySignature: operator is not registered in EigenLayer"); +// // use an empty approver signature input since none is needed / the input is unchecked +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry; +// delegationManager.delegateToBySignature( +// staker, +// defaultOperator, +// stakerSignatureAndExpiry, +// approverSignatureAndExpiry, +// emptySalt +// ); +// cheats.stopPrank(); +// } + +// /** +// * @notice Checks that `DelegationManager.delegateToBySignature` reverts if the delegationApprover's signature has expired +// * after successful staker signature verification +// */ +// function testFuzz_Revert_WhenDelegationApproverSignatureExpired( +// address caller, +// uint256 stakerExpiry, +// uint256 delegationApproverExpiry +// ) public filterFuzzedAddressInputs(caller) { +// cheats.assume(caller != defaultOperator); - // roll to a very late timestamp - skip(type(uint256).max / 2); - - // filter to only valid `stakerExpiry` values - stakerExpiry = bound(stakerExpiry, block.timestamp + 1, type(uint256).max); - // filter to only *invalid* `delegationApproverExpiry` values - delegationApproverExpiry = bound(delegationApproverExpiry, 0, block.timestamp - 1); - - console.log("timestamp: %s", block.timestamp); - console.log(stakerExpiry); - console.log(delegationApproverExpiry); - - - _registerOperatorWithDelegationApprover(defaultOperator); - - // calculate the delegationSigner's signature - ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( - delegationSignerPrivateKey, - defaultStaker, - defaultOperator, - emptySalt, - delegationApproverExpiry - ); - - // calculate the staker signature - ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( - stakerPrivateKey, - defaultOperator, - stakerExpiry - ); - - // try delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature`, and check for reversion - cheats.startPrank(caller); - cheats.expectRevert("DelegationManager._delegate: approver signature expired"); - delegationManager.delegateToBySignature( - defaultStaker, - defaultOperator, - stakerSignatureAndExpiry, - approverSignatureAndExpiry, - emptySalt - ); - cheats.stopPrank(); - } - - /** - * @notice `staker` becomes delegated to an operator who does not require any signature verification (i.e. the operator’s `delegationApprover` address is set to the zero address) - * via the `caller` calling `DelegationManager.delegateToBySignature` - * The function should pass with any `operatorSignature` input (since it should be unused) - * The function should pass only with a valid `stakerSignatureAndExpiry` input - * Properly emits a `StakerDelegated` event - * Staker is correctly delegated after the call (i.e. correct storage update) - * BeaconChainStrategy and StrategyManager operator shares should increase for operator - * Reverts if the staker is already delegated (to the operator or to anyone else) - * Reverts if the ‘operator’ is not actually registered as an operator - */ - function testFuzz_EOAStaker_OperatorWhoAcceptsAllStakers( - address caller, - uint256 expiry, - int256 beaconShares, - uint256 shares - ) public filterFuzzedAddressInputs(caller) { - cheats.assume(expiry >= block.timestamp); - cheats.assume(shares > 0); - - _registerOperatorWithBaseDetails(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - emptySalt - ), - "salt somehow spent too early?" - ); - { - // Set staker shares in BeaconChainStrategy and StrategyMananger - IStrategy[] memory strategiesToReturn = new IStrategy[](1); - strategiesToReturn[0] = strategyMock; - uint256[] memory sharesToReturn = new uint256[](1); - sharesToReturn[0] = shares; - strategyManagerMock.setDeposits(defaultStaker, strategiesToReturn, sharesToReturn); - eigenPodManagerMock.setPodOwnerShares(defaultStaker, beaconShares); - } - - uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); - uint256 beaconSharesBefore = delegationManager.operatorShares(defaultStaker, beaconChainETHStrategy); - // fetch the staker's current nonce - uint256 currentStakerNonce = delegationManager.stakerNonce(defaultStaker); - // calculate the staker signature - ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( - stakerPrivateKey, - defaultOperator, - expiry - ); - - // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(defaultStaker, defaultOperator); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, defaultStaker, strategyMock, shares); - if (beaconShares > 0) { - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, defaultStaker, beaconChainETHStrategy, uint256(beaconShares)); - } - _delegateToBySignatureOperatorWhoAcceptsAllStakers( - defaultStaker, - caller, - defaultOperator, - stakerSignatureAndExpiry, - emptySalt - ); - - // Check operator shares increases - uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); - uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); - if (beaconShares <= 0) { - assertEq( - beaconSharesBefore, - beaconSharesAfter, - "operator beaconchain shares should not have increased with negative shares" - ); - } else { - assertEq( - beaconSharesBefore + uint256(beaconShares), - beaconSharesAfter, - "operator beaconchain shares not increased correctly" - ); - } - assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); - // check all the delegation status changes - assertTrue(delegationManager.isDelegated(defaultStaker), "staker not delegated correctly"); - assertEq( - delegationManager.delegatedTo(defaultStaker), - defaultOperator, - "staker delegated to the wrong address" - ); - assertFalse(delegationManager.isOperator(defaultStaker), "staker incorrectly registered as operator"); - // check that the staker nonce incremented appropriately - assertEq( - delegationManager.stakerNonce(defaultStaker), - currentStakerNonce + 1, - "staker nonce did not increment" - ); - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - emptySalt - ), - "salt somehow spent too incorrectly?" - ); - } - - /** - * @notice `staker` becomes delegated to an operator who requires signature verification through an EOA (i.e. the operator’s `delegationApprover` address is set to a nonzero EOA) - * via the `caller` calling `DelegationManager.delegateToBySignature` - * The function should pass *only with a valid ECDSA signature from the `delegationApprover`, OR if called by the operator or their delegationApprover themselves - * AND with a valid `stakerSignatureAndExpiry` input - * Properly emits a `StakerDelegated` event - * Staker is correctly delegated after the call (i.e. correct storage update) - * BeaconChainStrategy and StrategyManager operator shares should increase for operator - * Reverts if the staker is already delegated (to the operator or to anyone else) - * Reverts if the ‘operator’ is not actually registered as an operator - */ - function testFuzz_EOAStaker_OperatorWhoRequiresECDSASignature( - address caller, - bytes32 salt, - uint256 expiry, - int256 beaconShares, - uint256 shares - ) public filterFuzzedAddressInputs(caller) { - // filter to only valid `expiry` values - cheats.assume(expiry >= block.timestamp); - cheats.assume(shares > 0); - - _registerOperatorWithDelegationApprover(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - { - // Set staker shares in BeaconChainStrategy and StrategyMananger - IStrategy[] memory strategiesToReturn = new IStrategy[](1); - strategiesToReturn[0] = strategyMock; - uint256[] memory sharesToReturn = new uint256[](1); - sharesToReturn[0] = shares; - strategyManagerMock.setDeposits(defaultStaker, strategiesToReturn, sharesToReturn); - eigenPodManagerMock.setPodOwnerShares(defaultStaker, beaconShares); - } - - uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); - uint256 beaconSharesBefore = delegationManager.operatorShares(defaultStaker, beaconChainETHStrategy); - // fetch the staker's current nonce - uint256 currentStakerNonce = delegationManager.stakerNonce(defaultStaker); - // calculate the staker signature - ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( - stakerPrivateKey, - defaultOperator, - expiry - ); - - // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(defaultStaker, defaultOperator); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, defaultStaker, strategyMock, shares); - if (beaconShares > 0) { - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, defaultStaker, beaconChainETHStrategy, uint256(beaconShares)); - } - _delegateToBySignatureOperatorWhoRequiresSig( - defaultStaker, - caller, - defaultOperator, - stakerSignatureAndExpiry, - salt - ); - { - // Check operator shares increases - uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); - uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); - if (beaconShares <= 0) { - assertEq( - beaconSharesBefore, - beaconSharesAfter, - "operator beaconchain shares should not have increased with negative shares" - ); - } else { - assertEq( - beaconSharesBefore + uint256(beaconShares), - beaconSharesAfter, - "operator beaconchain shares not increased correctly" - ); - } - assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); - } - assertTrue(delegationManager.isDelegated(defaultStaker), "staker not delegated correctly"); - assertEq( - delegationManager.delegatedTo(defaultStaker), - defaultOperator, - "staker delegated to the wrong address" - ); - assertFalse(delegationManager.isOperator(defaultStaker), "staker incorrectly registered as operator"); - - // check that the delegationApprover nonce incremented appropriately - if (caller == defaultOperator || caller == delegationManager.delegationApprover(defaultOperator)) { - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too incorrectly?" - ); - } else { - // verify that the salt is marked as used - assertTrue( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent not spent?" - ); - } - - // check that the staker nonce incremented appropriately - assertEq( - delegationManager.stakerNonce(defaultStaker), - currentStakerNonce + 1, - "staker nonce did not increment" - ); - } - - /** - * @notice `staker` becomes delegated to an operatorwho requires signature verification through an EIP1271-compliant contract (i.e. the operator’s `delegationApprover` address is - * set to a nonzero and code-containing address) via the `caller` calling `DelegationManager.delegateToBySignature` - * The function uses OZ's ERC1271WalletMock contract, and thus should pass *only when a valid ECDSA signature from the `owner` of the ERC1271WalletMock contract, - * OR if called by the operator or their delegationApprover themselves - * AND with a valid `stakerSignatureAndExpiry` input - * Properly emits a `StakerDelegated` event - * Staker is correctly delegated after the call (i.e. correct storage update) - * Reverts if the staker is already delegated (to the operator or to anyone else) - * Reverts if the ‘operator’ is not actually registered as an operator - */ - function testFuzz_EOAStaker_OperatorWhoRequiresEIP1271Signature( - address caller, - bytes32 salt, - uint256 expiry, - int256 beaconShares, - uint256 shares - ) public filterFuzzedAddressInputs(caller) { - cheats.assume(expiry >= block.timestamp); - cheats.assume(shares > 0); - - _registerOperatorWith1271DelegationApprover(defaultOperator); - - // verify that the salt hasn't been used before - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too early?" - ); - { - // Set staker shares in BeaconChainStrategy and StrategyMananger - IStrategy[] memory strategiesToReturn = new IStrategy[](1); - strategiesToReturn[0] = strategyMock; - uint256[] memory sharesToReturn = new uint256[](1); - sharesToReturn[0] = shares; - strategyManagerMock.setDeposits(defaultStaker, strategiesToReturn, sharesToReturn); - eigenPodManagerMock.setPodOwnerShares(defaultStaker, beaconShares); - } - - uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); - uint256 beaconSharesBefore = delegationManager.operatorShares(defaultStaker, beaconChainETHStrategy); - // fetch the staker's current nonce - uint256 currentStakerNonce = delegationManager.stakerNonce(defaultStaker); - // calculate the staker signature - ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( - stakerPrivateKey, - defaultOperator, - expiry - ); - - // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerDelegated(defaultStaker, defaultOperator); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, defaultStaker, strategyMock, shares); - if (beaconShares > 0) { - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, defaultStaker, beaconChainETHStrategy, uint256(beaconShares)); - } - _delegateToBySignatureOperatorWhoRequiresSig( - defaultStaker, - caller, - defaultOperator, - stakerSignatureAndExpiry, - salt - ); - - { - // Check operator shares increases - uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); - uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); - if (beaconShares <= 0) { - assertEq( - beaconSharesBefore, - beaconSharesAfter, - "operator beaconchain shares should not have increased with negative shares" - ); - } else { - assertEq( - beaconSharesBefore + uint256(beaconShares), - beaconSharesAfter, - "operator beaconchain shares not increased correctly" - ); - } - assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); - } - assertTrue(delegationManager.isDelegated(defaultStaker), "staker not delegated correctly"); - assertEq( - delegationManager.delegatedTo(defaultStaker), - defaultOperator, - "staker delegated to the wrong address" - ); - assertFalse(delegationManager.isOperator(defaultStaker), "staker incorrectly registered as operator"); - - // check that the delegationApprover nonce incremented appropriately - if (caller == defaultOperator || caller == delegationManager.delegationApprover(defaultOperator)) { - // verify that the salt is still marked as unused (since it wasn't checked or used) - assertFalse( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent too incorrectly?" - ); - } else { - // verify that the salt is marked as used - assertTrue( - delegationManager.delegationApproverSaltIsSpent( - delegationManager.delegationApprover(defaultOperator), - salt - ), - "salt somehow spent not spent?" - ); - } - - // check that the staker nonce incremented appropriately - assertEq( - delegationManager.stakerNonce(defaultStaker), - currentStakerNonce + 1, - "staker nonce did not increment" - ); - } - - /** - * @notice Calls same delegateToBySignature test but with the staker address being a ERC1271WalletMock - * Generates valid signatures from the staker to delegate to operator `defaultOperator` - */ - function testFuzz_ERC1271Staker_OperatorWhoAcceptsAllStakers( - address caller, - uint256 expiry, - int256 beaconShares, - uint256 shares - ) public filterFuzzedAddressInputs(caller) { - defaultStaker = address(ERC1271WalletMock(cheats.addr(stakerPrivateKey))); - testFuzz_EOAStaker_OperatorWhoAcceptsAllStakers(caller, expiry, beaconShares, shares); - } - - /** - * @notice Calls same delegateToBySignature test but with the staker address being a ERC1271WalletMock - * Generates valid signatures from the staker to delegate to operator `defaultOperator` who has - * a delegationApprover address set to a nonzero EOA - */ - function testFuzz_ERC1271Staker_OperatorWhoRequiresECDSASignature( - address caller, - bytes32 salt, - uint256 expiry, - int256 beaconShares, - uint256 shares - ) public filterFuzzedAddressInputs(caller) { - // Call same test but with the staker address being a ERC1271WalletMock - defaultStaker = address(ERC1271WalletMock(cheats.addr(stakerPrivateKey))); - testFuzz_EOAStaker_OperatorWhoRequiresECDSASignature(caller, salt, expiry, beaconShares, shares); - } - - /** - * @notice Calls same delegateToBySignature test but with the staker address being a ERC1271WalletMock - * Generates valid signatures from the staker to delegate to operator `defaultOperator` who has - * a delegationApprover address set to a nonzero ERC1271 compliant contract - */ - function testFuzz_ERC1271Staker_OperatorWhoRequiresEIP1271Signature( - address caller, - bytes32 salt, - uint256 expiry, - int256 beaconShares, - uint256 shares - ) public filterFuzzedAddressInputs(caller) { - // Call same test but with the staker address being a ERC1271WalletMock - defaultStaker = address(ERC1271WalletMock(cheats.addr(stakerPrivateKey))); - testFuzz_EOAStaker_OperatorWhoRequiresEIP1271Signature(caller, salt, expiry, beaconShares, shares); - } -} - -contract DelegationManagerUnitTests_ShareAdjustment is DelegationManagerUnitTests { - // @notice Verifies that `DelegationManager.increaseDelegatedShares` reverts if not called by the StrategyManager nor EigenPodManager - function testFuzz_increaseDelegatedShares_revert_invalidCaller( - address invalidCaller, - uint256 shares - ) public filterFuzzedAddressInputs(invalidCaller) { - cheats.assume(invalidCaller != address(strategyManagerMock)); - cheats.assume(invalidCaller != address(eigenPodManagerMock)); - cheats.assume(invalidCaller != address(eigenLayerProxyAdmin)); - - cheats.expectRevert("DelegationManager: onlyStrategyManagerOrEigenPodManager"); - delegationManager.increaseDelegatedShares(invalidCaller, strategyMock, shares); - } - - // @notice Verifies that there is no change in shares if the staker is not delegated - function testFuzz_increaseDelegatedShares_noop(address staker) public { - cheats.assume(staker != defaultOperator); - _registerOperatorWithBaseDetails(defaultOperator); - assertFalse(delegationManager.isDelegated(staker), "bad test setup"); - - cheats.prank(address(strategyManagerMock)); - delegationManager.increaseDelegatedShares(staker, strategyMock, 1); - assertEq(delegationManager.operatorShares(defaultOperator, strategyMock), 0, "shares should not have changed"); - } - - /** - * @notice Verifies that `DelegationManager.increaseDelegatedShares` properly increases the delegated `shares` that the operator - * who the `staker` is delegated to has in the strategy - * @dev Checks that there is no change if the staker is not delegated - */ - function testFuzz_increaseDelegatedShares( - address staker, - uint256 shares, - bool delegateFromStakerToOperator - ) public filterFuzzedAddressInputs(staker) { - // filter inputs, since delegating to the operator will fail when the staker is already registered as an operator - cheats.assume(staker != defaultOperator); - - // Register operator - _registerOperatorWithBaseDetails(defaultOperator); - - // delegate from the `staker` to the operator *if `delegateFromStakerToOperator` is 'true'* - if (delegateFromStakerToOperator) { - _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); - } - - uint256 _delegatedSharesBefore = delegationManager.operatorShares( - delegationManager.delegatedTo(staker), - strategyMock - ); - - if (delegationManager.isDelegated(staker)) { - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesIncreased(defaultOperator, staker, strategyMock, shares); - } - - cheats.prank(address(strategyManagerMock)); - delegationManager.increaseDelegatedShares(staker, strategyMock, shares); - - uint256 delegatedSharesAfter = delegationManager.operatorShares( - delegationManager.delegatedTo(staker), - strategyMock - ); - - if (delegationManager.isDelegated(staker)) { - assertEq( - delegatedSharesAfter, - _delegatedSharesBefore + shares, - "delegated shares did not increment correctly" - ); - } else { - assertEq(delegatedSharesAfter, _delegatedSharesBefore, "delegated shares incremented incorrectly"); - assertEq(_delegatedSharesBefore, 0, "nonzero shares delegated to zero address!"); - } - } - - // @notice Verifies that `DelegationManager.decreaseDelegatedShares` reverts if not called by the StrategyManager nor EigenPodManager - function testFuzz_decreaseDelegatedShares_revert_invalidCaller( - address invalidCaller, - uint256 shares - ) public filterFuzzedAddressInputs(invalidCaller) { - cheats.assume(invalidCaller != address(strategyManagerMock)); - cheats.assume(invalidCaller != address(eigenPodManagerMock)); - - cheats.startPrank(invalidCaller); - cheats.expectRevert("DelegationManager: onlyStrategyManagerOrEigenPodManager"); - delegationManager.decreaseDelegatedShares(invalidCaller, strategyMock, shares); - } - - // @notice Verifies that there is no change in shares if the staker is not delegated - function testFuzz_decreaseDelegatedShares_noop(address staker) public { - cheats.assume(staker != defaultOperator); - _registerOperatorWithBaseDetails(defaultOperator); - assertFalse(delegationManager.isDelegated(staker), "bad test setup"); - - cheats.prank(address(strategyManagerMock)); - delegationManager.decreaseDelegatedShares(staker, strategyMock, 1); - assertEq(delegationManager.operatorShares(defaultOperator, strategyMock), 0, "shares should not have changed"); - } - - /** - * @notice Verifies that `DelegationManager.decreaseDelegatedShares` properly decreases the delegated `shares` that the operator - * who the `staker` is delegated to has in the strategies - * @dev Checks that there is no change if the staker is not delegated - */ - function testFuzz_decreaseDelegatedShares( - address staker, - IStrategy[] memory strategies, - uint128 shares, - bool delegateFromStakerToOperator - ) public filterFuzzedAddressInputs(staker) { - // sanity-filtering on fuzzed input length & staker - cheats.assume(strategies.length <= 32); - cheats.assume(staker != defaultOperator); - - // Register operator - _registerOperatorWithBaseDetails(defaultOperator); - - // delegate from the `staker` to the operator *if `delegateFromStakerToOperator` is 'true'* - if (delegateFromStakerToOperator) { - _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); - } - - uint256[] memory sharesInputArray = new uint256[](strategies.length); - - address delegatedTo = delegationManager.delegatedTo(staker); - - // for each strategy in `strategies`, increase delegated shares by `shares` - // noop if the staker is not delegated - cheats.startPrank(address(strategyManagerMock)); - for (uint256 i = 0; i < strategies.length; ++i) { - delegationManager.increaseDelegatedShares(staker, strategies[i], shares); - // store delegated shares in a mapping - delegatedSharesBefore[strategies[i]] = delegationManager.operatorShares(delegatedTo, strategies[i]); - // also construct an array which we'll use in another loop - sharesInputArray[i] = shares; - totalSharesForStrategyInArray[address(strategies[i])] += sharesInputArray[i]; - } - cheats.stopPrank(); - - bool isDelegated = delegationManager.isDelegated(staker); - - // for each strategy in `strategies`, decrease delegated shares by `shares` - { - cheats.startPrank(address(strategyManagerMock)); - address operatorToDecreaseSharesOf = delegationManager.delegatedTo(staker); - if (isDelegated) { - for (uint256 i = 0; i < strategies.length; ++i) { - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit OperatorSharesDecreased( - operatorToDecreaseSharesOf, - staker, - strategies[i], - sharesInputArray[i] - ); - delegationManager.decreaseDelegatedShares(staker, strategies[i], sharesInputArray[i]); - } - } - cheats.stopPrank(); - } - - // check shares after call to `decreaseDelegatedShares` - for (uint256 i = 0; i < strategies.length; ++i) { - uint256 delegatedSharesAfter = delegationManager.operatorShares(delegatedTo, strategies[i]); - - if (isDelegated) { - assertEq( - delegatedSharesAfter + totalSharesForStrategyInArray[address(strategies[i])], - delegatedSharesBefore[strategies[i]], - "delegated shares did not decrement correctly" - ); - assertEq(delegatedSharesAfter, 0, "nonzero shares delegated to"); - } else { - assertEq( - delegatedSharesAfter, - delegatedSharesBefore[strategies[i]], - "delegated shares decremented incorrectly" - ); - assertEq(delegatedSharesBefore[strategies[i]], 0, "nonzero shares delegated to zero address!"); - } - } - } -} - -contract DelegationManagerUnitTests_Undelegate is DelegationManagerUnitTests { - // @notice Verifies that undelegating is not possible when the "undelegation paused" switch is flipped - function test_undelegate_revert_paused(address staker) public filterFuzzedAddressInputs(staker) { - // set the pausing flag - cheats.prank(pauser); - delegationManager.pause(2 ** PAUSED_ENTER_WITHDRAWAL_QUEUE); - - cheats.prank(staker); - cheats.expectRevert("Pausable: index is paused"); - delegationManager.undelegate(staker); - } - - function testFuzz_undelegate_revert_notDelgated( - address undelegatedStaker - ) public filterFuzzedAddressInputs(undelegatedStaker) { - cheats.assume(undelegatedStaker != defaultOperator); - assertFalse(delegationManager.isDelegated(undelegatedStaker), "bad test setup"); - - cheats.prank(undelegatedStaker); - cheats.expectRevert("DelegationManager.undelegate: staker must be delegated to undelegate"); - delegationManager.undelegate(undelegatedStaker); - } - - // @notice Verifies that an operator cannot undelegate from themself (this should always be forbidden) - function testFuzz_undelegate_revert_stakerIsOperator(address operator) public filterFuzzedAddressInputs(operator) { - _registerOperatorWithBaseDetails(operator); - - cheats.prank(operator); - cheats.expectRevert("DelegationManager.undelegate: operators cannot be undelegated"); - delegationManager.undelegate(operator); - } - - /** - * @notice verifies that `DelegationManager.undelegate` reverts if trying to undelegate an operator from themselves - * @param callFromOperatorOrApprover -- calls from the operator if 'false' and the 'approver' if true - */ - function testFuzz_undelegate_operatorCannotForceUndelegateThemself( - address delegationApprover, - bool callFromOperatorOrApprover - ) public filterFuzzedAddressInputs(delegationApprover) { - // register *this contract* as an operator with the default `delegationApprover` - _registerOperatorWithDelegationApprover(defaultOperator); - - address caller; - if (callFromOperatorOrApprover) { - caller = delegationApprover; - } else { - caller = defaultOperator; - } - - // try to call the `undelegate` function and check for reversion - cheats.prank(caller); - cheats.expectRevert("DelegationManager.undelegate: operators cannot be undelegated"); - delegationManager.undelegate(defaultOperator); - } - - //TODO: verify that this check is even needed - function test_undelegate_revert_zeroAddress() public { - _registerOperatorWithBaseDetails(defaultOperator); - _delegateToOperatorWhoAcceptsAllStakers(address(0), defaultOperator); - - cheats.prank(address(0)); - cheats.expectRevert("DelegationManager.undelegate: cannot undelegate zero address"); - delegationManager.undelegate(address(0)); - } - - /** - * @notice Verifies that the `undelegate` function has proper access controls (can only be called by the operator who the `staker` has delegated - * to or the operator's `delegationApprover`), or the staker themselves - */ - function testFuzz_undelegate_revert_invalidCaller( - address invalidCaller - ) public filterFuzzedAddressInputs(invalidCaller) { - address staker = address(0x123); - // filter out addresses that are actually allowed to call the function - cheats.assume(invalidCaller != staker); - cheats.assume(invalidCaller != defaultOperator); - cheats.assume(invalidCaller != defaultApprover); - - _registerOperatorWithDelegationApprover(defaultOperator); - _delegateToOperatorWhoRequiresSig(staker, defaultOperator); - - cheats.prank(invalidCaller); - cheats.expectRevert("DelegationManager.undelegate: caller cannot undelegate staker"); - delegationManager.undelegate(staker); - } - - /** - * Staker is undelegated from an operator, via a call to `undelegate`, properly originating from the staker's address. - * Reverts if the staker is themselves an operator (i.e. they are delegated to themselves) - * Does nothing if the staker is already undelegated - * Properly undelegates the staker, i.e. the staker becomes “delegated to” the zero address, and `isDelegated(staker)` returns ‘false’ - * Emits a `StakerUndelegated` event - */ - function testFuzz_undelegate_noDelegateableShares(address staker) public filterFuzzedAddressInputs(staker) { - cheats.assume(staker != defaultOperator); +// // roll to a very late timestamp +// skip(type(uint256).max / 2); + +// // filter to only valid `stakerExpiry` values +// stakerExpiry = bound(stakerExpiry, block.timestamp + 1, type(uint256).max); +// // filter to only *invalid* `delegationApproverExpiry` values +// delegationApproverExpiry = bound(delegationApproverExpiry, 0, block.timestamp - 1); + +// console.log("timestamp: %s", block.timestamp); +// console.log(stakerExpiry); +// console.log(delegationApproverExpiry); + + +// _registerOperatorWithDelegationApprover(defaultOperator); + +// // calculate the delegationSigner's signature +// ISignatureUtils.SignatureWithExpiry memory approverSignatureAndExpiry = _getApproverSignature( +// delegationSignerPrivateKey, +// defaultStaker, +// defaultOperator, +// emptySalt, +// delegationApproverExpiry +// ); + +// // calculate the staker signature +// ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( +// stakerPrivateKey, +// defaultOperator, +// stakerExpiry +// ); + +// // try delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature`, and check for reversion +// cheats.startPrank(caller); +// cheats.expectRevert("DelegationManager._delegate: approver signature expired"); +// delegationManager.delegateToBySignature( +// defaultStaker, +// defaultOperator, +// stakerSignatureAndExpiry, +// approverSignatureAndExpiry, +// emptySalt +// ); +// cheats.stopPrank(); +// } + +// /** +// * @notice `staker` becomes delegated to an operator who does not require any signature verification (i.e. the operator’s `delegationApprover` address is set to the zero address) +// * via the `caller` calling `DelegationManager.delegateToBySignature` +// * The function should pass with any `operatorSignature` input (since it should be unused) +// * The function should pass only with a valid `stakerSignatureAndExpiry` input +// * Properly emits a `StakerDelegated` event +// * Staker is correctly delegated after the call (i.e. correct storage update) +// * BeaconChainStrategy and StrategyManager operator shares should increase for operator +// * Reverts if the staker is already delegated (to the operator or to anyone else) +// * Reverts if the ‘operator’ is not actually registered as an operator +// */ +// function testFuzz_EOAStaker_OperatorWhoAcceptsAllStakers( +// address caller, +// uint256 expiry, +// int256 beaconShares, +// uint256 shares +// ) public filterFuzzedAddressInputs(caller) { +// cheats.assume(expiry >= block.timestamp); +// cheats.assume(shares > 0); + +// _registerOperatorWithBaseDetails(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// emptySalt +// ), +// "salt somehow spent too early?" +// ); +// { +// // Set staker shares in BeaconChainStrategy and StrategyMananger +// IStrategy[] memory strategiesToReturn = new IStrategy[](1); +// strategiesToReturn[0] = strategyMock; +// uint256[] memory sharesToReturn = new uint256[](1); +// sharesToReturn[0] = shares; +// strategyManagerMock.setDeposits(defaultStaker, strategiesToReturn, sharesToReturn); +// eigenPodManagerMock.setPodOwnerShares(defaultStaker, beaconShares); +// } + +// uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); +// uint256 beaconSharesBefore = delegationManager.operatorShares(defaultStaker, beaconChainETHStrategy); +// // fetch the staker's current nonce +// uint256 currentStakerNonce = delegationManager.stakerNonce(defaultStaker); +// // calculate the staker signature +// ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( +// stakerPrivateKey, +// defaultOperator, +// expiry +// ); + +// // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(defaultStaker, defaultOperator); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, defaultStaker, strategyMock, shares); +// if (beaconShares > 0) { +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, defaultStaker, beaconChainETHStrategy, uint256(beaconShares)); +// } +// _delegateToBySignatureOperatorWhoAcceptsAllStakers( +// defaultStaker, +// caller, +// defaultOperator, +// stakerSignatureAndExpiry, +// emptySalt +// ); + +// // Check operator shares increases +// uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); +// uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); +// if (beaconShares <= 0) { +// assertEq( +// beaconSharesBefore, +// beaconSharesAfter, +// "operator beaconchain shares should not have increased with negative shares" +// ); +// } else { +// assertEq( +// beaconSharesBefore + uint256(beaconShares), +// beaconSharesAfter, +// "operator beaconchain shares not increased correctly" +// ); +// } +// assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); +// // check all the delegation status changes +// assertTrue(delegationManager.isDelegated(defaultStaker), "staker not delegated correctly"); +// assertEq( +// delegationManager.delegatedTo(defaultStaker), +// defaultOperator, +// "staker delegated to the wrong address" +// ); +// assertFalse(delegationManager.isOperator(defaultStaker), "staker incorrectly registered as operator"); +// // check that the staker nonce incremented appropriately +// assertEq( +// delegationManager.stakerNonce(defaultStaker), +// currentStakerNonce + 1, +// "staker nonce did not increment" +// ); +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// emptySalt +// ), +// "salt somehow spent too incorrectly?" +// ); +// } + +// /** +// * @notice `staker` becomes delegated to an operator who requires signature verification through an EOA (i.e. the operator’s `delegationApprover` address is set to a nonzero EOA) +// * via the `caller` calling `DelegationManager.delegateToBySignature` +// * The function should pass *only with a valid ECDSA signature from the `delegationApprover`, OR if called by the operator or their delegationApprover themselves +// * AND with a valid `stakerSignatureAndExpiry` input +// * Properly emits a `StakerDelegated` event +// * Staker is correctly delegated after the call (i.e. correct storage update) +// * BeaconChainStrategy and StrategyManager operator shares should increase for operator +// * Reverts if the staker is already delegated (to the operator or to anyone else) +// * Reverts if the ‘operator’ is not actually registered as an operator +// */ +// function testFuzz_EOAStaker_OperatorWhoRequiresECDSASignature( +// address caller, +// bytes32 salt, +// uint256 expiry, +// int256 beaconShares, +// uint256 shares +// ) public filterFuzzedAddressInputs(caller) { +// // filter to only valid `expiry` values +// cheats.assume(expiry >= block.timestamp); +// cheats.assume(shares > 0); + +// _registerOperatorWithDelegationApprover(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// { +// // Set staker shares in BeaconChainStrategy and StrategyMananger +// IStrategy[] memory strategiesToReturn = new IStrategy[](1); +// strategiesToReturn[0] = strategyMock; +// uint256[] memory sharesToReturn = new uint256[](1); +// sharesToReturn[0] = shares; +// strategyManagerMock.setDeposits(defaultStaker, strategiesToReturn, sharesToReturn); +// eigenPodManagerMock.setPodOwnerShares(defaultStaker, beaconShares); +// } + +// uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); +// uint256 beaconSharesBefore = delegationManager.operatorShares(defaultStaker, beaconChainETHStrategy); +// // fetch the staker's current nonce +// uint256 currentStakerNonce = delegationManager.stakerNonce(defaultStaker); +// // calculate the staker signature +// ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( +// stakerPrivateKey, +// defaultOperator, +// expiry +// ); + +// // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(defaultStaker, defaultOperator); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, defaultStaker, strategyMock, shares); +// if (beaconShares > 0) { +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, defaultStaker, beaconChainETHStrategy, uint256(beaconShares)); +// } +// _delegateToBySignatureOperatorWhoRequiresSig( +// defaultStaker, +// caller, +// defaultOperator, +// stakerSignatureAndExpiry, +// salt +// ); +// { +// // Check operator shares increases +// uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); +// uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); +// if (beaconShares <= 0) { +// assertEq( +// beaconSharesBefore, +// beaconSharesAfter, +// "operator beaconchain shares should not have increased with negative shares" +// ); +// } else { +// assertEq( +// beaconSharesBefore + uint256(beaconShares), +// beaconSharesAfter, +// "operator beaconchain shares not increased correctly" +// ); +// } +// assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); +// } +// assertTrue(delegationManager.isDelegated(defaultStaker), "staker not delegated correctly"); +// assertEq( +// delegationManager.delegatedTo(defaultStaker), +// defaultOperator, +// "staker delegated to the wrong address" +// ); +// assertFalse(delegationManager.isOperator(defaultStaker), "staker incorrectly registered as operator"); + +// // check that the delegationApprover nonce incremented appropriately +// if (caller == defaultOperator || caller == delegationManager.delegationApprover(defaultOperator)) { +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too incorrectly?" +// ); +// } else { +// // verify that the salt is marked as used +// assertTrue( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent not spent?" +// ); +// } + +// // check that the staker nonce incremented appropriately +// assertEq( +// delegationManager.stakerNonce(defaultStaker), +// currentStakerNonce + 1, +// "staker nonce did not increment" +// ); +// } + +// /** +// * @notice `staker` becomes delegated to an operatorwho requires signature verification through an EIP1271-compliant contract (i.e. the operator’s `delegationApprover` address is +// * set to a nonzero and code-containing address) via the `caller` calling `DelegationManager.delegateToBySignature` +// * The function uses OZ's ERC1271WalletMock contract, and thus should pass *only when a valid ECDSA signature from the `owner` of the ERC1271WalletMock contract, +// * OR if called by the operator or their delegationApprover themselves +// * AND with a valid `stakerSignatureAndExpiry` input +// * Properly emits a `StakerDelegated` event +// * Staker is correctly delegated after the call (i.e. correct storage update) +// * Reverts if the staker is already delegated (to the operator or to anyone else) +// * Reverts if the ‘operator’ is not actually registered as an operator +// */ +// function testFuzz_EOAStaker_OperatorWhoRequiresEIP1271Signature( +// address caller, +// bytes32 salt, +// uint256 expiry, +// int256 beaconShares, +// uint256 shares +// ) public filterFuzzedAddressInputs(caller) { +// cheats.assume(expiry >= block.timestamp); +// cheats.assume(shares > 0); + +// _registerOperatorWith1271DelegationApprover(defaultOperator); + +// // verify that the salt hasn't been used before +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too early?" +// ); +// { +// // Set staker shares in BeaconChainStrategy and StrategyMananger +// IStrategy[] memory strategiesToReturn = new IStrategy[](1); +// strategiesToReturn[0] = strategyMock; +// uint256[] memory sharesToReturn = new uint256[](1); +// sharesToReturn[0] = shares; +// strategyManagerMock.setDeposits(defaultStaker, strategiesToReturn, sharesToReturn); +// eigenPodManagerMock.setPodOwnerShares(defaultStaker, beaconShares); +// } + +// uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, strategyMock); +// uint256 beaconSharesBefore = delegationManager.operatorShares(defaultStaker, beaconChainETHStrategy); +// // fetch the staker's current nonce +// uint256 currentStakerNonce = delegationManager.stakerNonce(defaultStaker); +// // calculate the staker signature +// ISignatureUtils.SignatureWithExpiry memory stakerSignatureAndExpiry = _getStakerSignature( +// stakerPrivateKey, +// defaultOperator, +// expiry +// ); + +// // delegate from the `staker` to the operator, via having the `caller` call `DelegationManager.delegateToBySignature` +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerDelegated(defaultStaker, defaultOperator); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, defaultStaker, strategyMock, shares); +// if (beaconShares > 0) { +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, defaultStaker, beaconChainETHStrategy, uint256(beaconShares)); +// } +// _delegateToBySignatureOperatorWhoRequiresSig( +// defaultStaker, +// caller, +// defaultOperator, +// stakerSignatureAndExpiry, +// salt +// ); + +// { +// // Check operator shares increases +// uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, strategyMock); +// uint256 beaconSharesAfter = delegationManager.operatorShares(defaultOperator, beaconChainETHStrategy); +// if (beaconShares <= 0) { +// assertEq( +// beaconSharesBefore, +// beaconSharesAfter, +// "operator beaconchain shares should not have increased with negative shares" +// ); +// } else { +// assertEq( +// beaconSharesBefore + uint256(beaconShares), +// beaconSharesAfter, +// "operator beaconchain shares not increased correctly" +// ); +// } +// assertEq(operatorSharesBefore + shares, operatorSharesAfter, "operator shares not increased correctly"); +// } +// assertTrue(delegationManager.isDelegated(defaultStaker), "staker not delegated correctly"); +// assertEq( +// delegationManager.delegatedTo(defaultStaker), +// defaultOperator, +// "staker delegated to the wrong address" +// ); +// assertFalse(delegationManager.isOperator(defaultStaker), "staker incorrectly registered as operator"); + +// // check that the delegationApprover nonce incremented appropriately +// if (caller == defaultOperator || caller == delegationManager.delegationApprover(defaultOperator)) { +// // verify that the salt is still marked as unused (since it wasn't checked or used) +// assertFalse( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent too incorrectly?" +// ); +// } else { +// // verify that the salt is marked as used +// assertTrue( +// delegationManager.delegationApproverSaltIsSpent( +// delegationManager.delegationApprover(defaultOperator), +// salt +// ), +// "salt somehow spent not spent?" +// ); +// } + +// // check that the staker nonce incremented appropriately +// assertEq( +// delegationManager.stakerNonce(defaultStaker), +// currentStakerNonce + 1, +// "staker nonce did not increment" +// ); +// } + +// /** +// * @notice Calls same delegateToBySignature test but with the staker address being a ERC1271WalletMock +// * Generates valid signatures from the staker to delegate to operator `defaultOperator` +// */ +// function testFuzz_ERC1271Staker_OperatorWhoAcceptsAllStakers( +// address caller, +// uint256 expiry, +// int256 beaconShares, +// uint256 shares +// ) public filterFuzzedAddressInputs(caller) { +// defaultStaker = address(ERC1271WalletMock(cheats.addr(stakerPrivateKey))); +// testFuzz_EOAStaker_OperatorWhoAcceptsAllStakers(caller, expiry, beaconShares, shares); +// } + +// /** +// * @notice Calls same delegateToBySignature test but with the staker address being a ERC1271WalletMock +// * Generates valid signatures from the staker to delegate to operator `defaultOperator` who has +// * a delegationApprover address set to a nonzero EOA +// */ +// function testFuzz_ERC1271Staker_OperatorWhoRequiresECDSASignature( +// address caller, +// bytes32 salt, +// uint256 expiry, +// int256 beaconShares, +// uint256 shares +// ) public filterFuzzedAddressInputs(caller) { +// // Call same test but with the staker address being a ERC1271WalletMock +// defaultStaker = address(ERC1271WalletMock(cheats.addr(stakerPrivateKey))); +// testFuzz_EOAStaker_OperatorWhoRequiresECDSASignature(caller, salt, expiry, beaconShares, shares); +// } + +// /** +// * @notice Calls same delegateToBySignature test but with the staker address being a ERC1271WalletMock +// * Generates valid signatures from the staker to delegate to operator `defaultOperator` who has +// * a delegationApprover address set to a nonzero ERC1271 compliant contract +// */ +// function testFuzz_ERC1271Staker_OperatorWhoRequiresEIP1271Signature( +// address caller, +// bytes32 salt, +// uint256 expiry, +// int256 beaconShares, +// uint256 shares +// ) public filterFuzzedAddressInputs(caller) { +// // Call same test but with the staker address being a ERC1271WalletMock +// defaultStaker = address(ERC1271WalletMock(cheats.addr(stakerPrivateKey))); +// testFuzz_EOAStaker_OperatorWhoRequiresEIP1271Signature(caller, salt, expiry, beaconShares, shares); +// } +// } + +// contract DelegationManagerUnitTests_ShareAdjustment is DelegationManagerUnitTests { +// // @notice Verifies that `DelegationManager.increaseDelegatedScaledShares` reverts if not called by the StrategyManager nor EigenPodManager +// function testFuzz_increaseDelegatedScaledShares_revert_invalidCaller( +// address invalidCaller, +// uint256 shares +// ) public filterFuzzedAddressInputs(invalidCaller) { +// cheats.assume(invalidCaller != address(strategyManagerMock)); +// cheats.assume(invalidCaller != address(eigenPodManagerMock)); +// cheats.assume(invalidCaller != address(eigenLayerProxyAdmin)); + +// cheats.expectRevert("DelegationManager: onlyStrategyManagerOrEigenPodManager"); +// delegationManager.increaseDelegatedScaledShares(invalidCaller, strategyMock, shares); +// } + +// // @notice Verifies that there is no change in shares if the staker is not delegated +// function testFuzz_increaseDelegatedScaledShares_noop(address staker) public { +// cheats.assume(staker != defaultOperator); +// _registerOperatorWithBaseDetails(defaultOperator); +// assertFalse(delegationManager.isDelegated(staker), "bad test setup"); + +// cheats.prank(address(strategyManagerMock)); +// delegationManager.increaseDelegatedScaledShares(staker, strategyMock, 1); +// assertEq(delegationManager.operatorShares(defaultOperator, strategyMock), 0, "shares should not have changed"); +// } + +// /** +// * @notice Verifies that `DelegationManager.increaseDelegatedScaledShares` properly increases the delegated `shares` that the operator +// * who the `staker` is delegated to has in the strategy +// * @dev Checks that there is no change if the staker is not delegated +// */ +// function testFuzz_increaseDelegatedScaledShares( +// address staker, +// uint256 shares, +// bool delegateFromStakerToOperator +// ) public filterFuzzedAddressInputs(staker) { +// // filter inputs, since delegating to the operator will fail when the staker is already registered as an operator +// cheats.assume(staker != defaultOperator); + +// // Register operator +// _registerOperatorWithBaseDetails(defaultOperator); + +// // delegate from the `staker` to the operator *if `delegateFromStakerToOperator` is 'true'* +// if (delegateFromStakerToOperator) { +// _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); +// } + +// uint256 _delegatedSharesBefore = delegationManager.operatorShares( +// delegationManager.delegatedTo(staker), +// strategyMock +// ); + +// if (delegationManager.isDelegated(staker)) { +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesIncreased(defaultOperator, staker, strategyMock, shares); +// } + +// cheats.prank(address(strategyManagerMock)); +// delegationManager.increaseDelegatedScaledShares(staker, strategyMock, shares); + +// uint256 delegatedSharesAfter = delegationManager.operatorShares( +// delegationManager.delegatedTo(staker), +// strategyMock +// ); + +// if (delegationManager.isDelegated(staker)) { +// assertEq( +// delegatedSharesAfter, +// _delegatedSharesBefore + shares, +// "delegated shares did not increment correctly" +// ); +// } else { +// assertEq(delegatedSharesAfter, _delegatedSharesBefore, "delegated shares incremented incorrectly"); +// assertEq(_delegatedSharesBefore, 0, "nonzero shares delegated to zero address!"); +// } +// } + +// // @notice Verifies that `DelegationManager.decreaseDelegatedScaledShares` reverts if not called by the StrategyManager nor EigenPodManager +// function testFuzz_decreaseDelegatedScaledShares_revert_invalidCaller( +// address invalidCaller, +// uint256 shares +// ) public filterFuzzedAddressInputs(invalidCaller) { +// cheats.assume(invalidCaller != address(strategyManagerMock)); +// cheats.assume(invalidCaller != address(eigenPodManagerMock)); + +// cheats.startPrank(invalidCaller); +// cheats.expectRevert("DelegationManager: onlyStrategyManagerOrEigenPodManager"); +// delegationManager.decreaseDelegatedScaledShares(invalidCaller, strategyMock, shares); +// } + +// // @notice Verifies that there is no change in shares if the staker is not delegated +// function testFuzz_decreaseDelegatedScaledShares_noop(address staker) public { +// cheats.assume(staker != defaultOperator); +// _registerOperatorWithBaseDetails(defaultOperator); +// assertFalse(delegationManager.isDelegated(staker), "bad test setup"); + +// cheats.prank(address(strategyManagerMock)); +// delegationManager.decreaseDelegatedScaledShares(staker, strategyMock, 1); +// assertEq(delegationManager.operatorShares(defaultOperator, strategyMock), 0, "shares should not have changed"); +// } + +// /** +// * @notice Verifies that `DelegationManager.decreaseDelegatedScaledShares` properly decreases the delegated `shares` that the operator +// * who the `staker` is delegated to has in the strategies +// * @dev Checks that there is no change if the staker is not delegated +// */ +// function testFuzz_decreaseDelegatedScaledShares( +// address staker, +// IStrategy[] memory strategies, +// uint128 shares, +// bool delegateFromStakerToOperator +// ) public filterFuzzedAddressInputs(staker) { +// // sanity-filtering on fuzzed input length & staker +// cheats.assume(strategies.length <= 32); +// cheats.assume(staker != defaultOperator); + +// // Register operator +// _registerOperatorWithBaseDetails(defaultOperator); + +// // delegate from the `staker` to the operator *if `delegateFromStakerToOperator` is 'true'* +// if (delegateFromStakerToOperator) { +// _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); +// } + +// uint256[] memory sharesInputArray = new uint256[](strategies.length); + +// address delegatedTo = delegationManager.delegatedTo(staker); + +// // for each strategy in `strategies`, increase delegated shares by `shares` +// // noop if the staker is not delegated +// cheats.startPrank(address(strategyManagerMock)); +// for (uint256 i = 0; i < strategies.length; ++i) { +// delegationManager.increaseDelegatedScaledShares(staker, strategies[i], shares); +// // store delegated shares in a mapping +// delegatedSharesBefore[strategies[i]] = delegationManager.operatorShares(delegatedTo, strategies[i]); +// // also construct an array which we'll use in another loop +// sharesInputArray[i] = shares; +// totalSharesForStrategyInArray[address(strategies[i])] += sharesInputArray[i]; +// } +// cheats.stopPrank(); + +// bool isDelegated = delegationManager.isDelegated(staker); + +// // for each strategy in `strategies`, decrease delegated shares by `shares` +// { +// cheats.startPrank(address(strategyManagerMock)); +// address operatorToDecreaseSharesOf = delegationManager.delegatedTo(staker); +// if (isDelegated) { +// for (uint256 i = 0; i < strategies.length; ++i) { +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit OperatorSharesDecreased( +// operatorToDecreaseSharesOf, +// staker, +// strategies[i], +// sharesInputArray[i] +// ); +// delegationManager.decreaseDelegatedScaledShares(staker, strategies[i], sharesInputArray[i]); +// } +// } +// cheats.stopPrank(); +// } + +// // check shares after call to `decreaseDelegatedScaledShares` +// for (uint256 i = 0; i < strategies.length; ++i) { +// uint256 delegatedSharesAfter = delegationManager.operatorShares(delegatedTo, strategies[i]); + +// if (isDelegated) { +// assertEq( +// delegatedSharesAfter + totalSharesForStrategyInArray[address(strategies[i])], +// delegatedSharesBefore[strategies[i]], +// "delegated shares did not decrement correctly" +// ); +// assertEq(delegatedSharesAfter, 0, "nonzero shares delegated to"); +// } else { +// assertEq( +// delegatedSharesAfter, +// delegatedSharesBefore[strategies[i]], +// "delegated shares decremented incorrectly" +// ); +// assertEq(delegatedSharesBefore[strategies[i]], 0, "nonzero shares delegated to zero address!"); +// } +// } +// } +// } + +// contract DelegationManagerUnitTests_Undelegate is DelegationManagerUnitTests { +// // @notice Verifies that undelegating is not possible when the "undelegation paused" switch is flipped +// function test_undelegate_revert_paused(address staker) public filterFuzzedAddressInputs(staker) { +// // set the pausing flag +// cheats.prank(pauser); +// delegationManager.pause(2 ** PAUSED_ENTER_WITHDRAWAL_QUEUE); + +// cheats.prank(staker); +// cheats.expectRevert("Pausable: index is paused"); +// delegationManager.undelegate(staker); +// } + +// function testFuzz_undelegate_revert_notDelgated( +// address undelegatedStaker +// ) public filterFuzzedAddressInputs(undelegatedStaker) { +// cheats.assume(undelegatedStaker != defaultOperator); +// assertFalse(delegationManager.isDelegated(undelegatedStaker), "bad test setup"); + +// cheats.prank(undelegatedStaker); +// cheats.expectRevert("DelegationManager.undelegate: staker must be delegated to undelegate"); +// delegationManager.undelegate(undelegatedStaker); +// } + +// // @notice Verifies that an operator cannot undelegate from themself (this should always be forbidden) +// function testFuzz_undelegate_revert_stakerIsOperator(address operator) public filterFuzzedAddressInputs(operator) { +// _registerOperatorWithBaseDetails(operator); + +// cheats.prank(operator); +// cheats.expectRevert("DelegationManager.undelegate: operators cannot be undelegated"); +// delegationManager.undelegate(operator); +// } + +// /** +// * @notice verifies that `DelegationManager.undelegate` reverts if trying to undelegate an operator from themselves +// * @param callFromOperatorOrApprover -- calls from the operator if 'false' and the 'approver' if true +// */ +// function testFuzz_undelegate_operatorCannotForceUndelegateThemself( +// address delegationApprover, +// bool callFromOperatorOrApprover +// ) public filterFuzzedAddressInputs(delegationApprover) { +// // register *this contract* as an operator with the default `delegationApprover` +// _registerOperatorWithDelegationApprover(defaultOperator); + +// address caller; +// if (callFromOperatorOrApprover) { +// caller = delegationApprover; +// } else { +// caller = defaultOperator; +// } + +// // try to call the `undelegate` function and check for reversion +// cheats.prank(caller); +// cheats.expectRevert("DelegationManager.undelegate: operators cannot be undelegated"); +// delegationManager.undelegate(defaultOperator); +// } + +// //TODO: verify that this check is even needed +// function test_undelegate_revert_zeroAddress() public { +// _registerOperatorWithBaseDetails(defaultOperator); +// _delegateToOperatorWhoAcceptsAllStakers(address(0), defaultOperator); + +// cheats.prank(address(0)); +// cheats.expectRevert("DelegationManager.undelegate: cannot undelegate zero address"); +// delegationManager.undelegate(address(0)); +// } + +// /** +// * @notice Verifies that the `undelegate` function has proper access controls (can only be called by the operator who the `staker` has delegated +// * to or the operator's `delegationApprover`), or the staker themselves +// */ +// function testFuzz_undelegate_revert_invalidCaller( +// address invalidCaller +// ) public filterFuzzedAddressInputs(invalidCaller) { +// address staker = address(0x123); +// // filter out addresses that are actually allowed to call the function +// cheats.assume(invalidCaller != staker); +// cheats.assume(invalidCaller != defaultOperator); +// cheats.assume(invalidCaller != defaultApprover); + +// _registerOperatorWithDelegationApprover(defaultOperator); +// _delegateToOperatorWhoRequiresSig(staker, defaultOperator); + +// cheats.prank(invalidCaller); +// cheats.expectRevert("DelegationManager.undelegate: caller cannot undelegate staker"); +// delegationManager.undelegate(staker); +// } + +// /** +// * Staker is undelegated from an operator, via a call to `undelegate`, properly originating from the staker's address. +// * Reverts if the staker is themselves an operator (i.e. they are delegated to themselves) +// * Does nothing if the staker is already undelegated +// * Properly undelegates the staker, i.e. the staker becomes “delegated to” the zero address, and `isDelegated(staker)` returns ‘false’ +// * Emits a `StakerUndelegated` event +// */ +// function testFuzz_undelegate_noDelegateableShares(address staker) public filterFuzzedAddressInputs(staker) { +// cheats.assume(staker != defaultOperator); - // register *this contract* as an operator and delegate from the `staker` to them - _registerOperatorWithBaseDetails(defaultOperator); - _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); - - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerUndelegated(staker, delegationManager.delegatedTo(staker)); - cheats.prank(staker); - bytes32[] memory withdrawalRoots = delegationManager.undelegate(staker); - - assertEq(withdrawalRoots.length, 0, "withdrawalRoot should be an empty array"); - assertEq( - delegationManager.delegatedTo(staker), - address(0), - "undelegated staker should be delegated to zero address" - ); - assertFalse(delegationManager.isDelegated(staker), "staker not undelegated"); - } - - /** - * @notice Verifies that the `undelegate` function allows for a force undelegation - */ - function testFuzz_undelegate_forceUndelegation_noDelegateableShares( - address staker, - bytes32 salt, - bool callFromOperatorOrApprover - ) public filterFuzzedAddressInputs(staker) { - cheats.assume(staker != defaultOperator); - - _registerOperatorWithDelegationApprover(defaultOperator); - _delegateToOperatorWhoRequiresSig(staker, defaultOperator, salt); - - address caller; - if (callFromOperatorOrApprover) { - caller = defaultApprover; - } else { - caller = defaultOperator; - } - - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerForceUndelegated(staker, defaultOperator); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit StakerUndelegated(staker, defaultOperator); - cheats.prank(caller); - bytes32[] memory withdrawalRoots = delegationManager.undelegate(staker); - - assertEq(withdrawalRoots.length, 0, "withdrawalRoot should be an empty array"); - assertEq( - delegationManager.delegatedTo(staker), - address(0), - "undelegated staker should be delegated to zero address" - ); - assertFalse(delegationManager.isDelegated(staker), "staker not undelegated"); - } -} - -contract DelegationManagerUnitTests_queueWithdrawals is DelegationManagerUnitTests { - function test_Revert_WhenEnterQueueWithdrawalsPaused() public { - cheats.prank(pauser); - delegationManager.pause(2 ** PAUSED_ENTER_WITHDRAWAL_QUEUE); - (IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, , ) = _setUpQueueWithdrawalsSingleStrat({ - staker: defaultStaker, - withdrawer: defaultStaker, - strategy: strategyMock, - withdrawalAmount: 100 - }); - cheats.expectRevert("Pausable: index is paused"); - delegationManager.queueWithdrawals(queuedWithdrawalParams); - } - - function test_Revert_WhenQueueWithdrawalParamsLengthMismatch() public { - IStrategy[] memory strategyArray = new IStrategy[](1); - strategyArray[0] = strategyMock; - uint256[] memory shareAmounts = new uint256[](2); - shareAmounts[0] = 100; - shareAmounts[1] = 100; - - IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams = new IDelegationManager.QueuedWithdrawalParams[](1); - queuedWithdrawalParams[0] = IDelegationManager.QueuedWithdrawalParams({ - strategies: strategyArray, - shares: shareAmounts, - withdrawer: defaultStaker - }); - - cheats.expectRevert("DelegationManager.queueWithdrawal: input length mismatch"); - delegationManager.queueWithdrawals(queuedWithdrawalParams); - } - - function test_Revert_WhenNotStakerWithdrawer(address withdrawer) public { - cheats.assume(withdrawer != defaultStaker); - - (IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, , ) = _setUpQueueWithdrawalsSingleStrat({ - staker: defaultStaker, - withdrawer: withdrawer, - strategy: strategyMock, - withdrawalAmount: 100 - }); - cheats.expectRevert("DelegationManager.queueWithdrawal: withdrawer must be staker"); - cheats.prank(defaultStaker); - delegationManager.queueWithdrawals(queuedWithdrawalParams); - } - - function test_Revert_WhenEmptyStrategiesArray() public { - IStrategy[] memory strategyArray = new IStrategy[](0); - uint256[] memory shareAmounts = new uint256[](0); - address withdrawer = defaultOperator; - - IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams = new IDelegationManager.QueuedWithdrawalParams[](1); - queuedWithdrawalParams[0] = IDelegationManager.QueuedWithdrawalParams({ - strategies: strategyArray, - shares: shareAmounts, - withdrawer: withdrawer - }); - - cheats.expectRevert("DelegationManager._removeSharesAndQueueWithdrawal: strategies cannot be empty"); - delegationManager.queueWithdrawals(queuedWithdrawalParams); - } - - /** - * @notice Verifies that `DelegationManager.queueWithdrawals` properly queues a withdrawal for the `withdrawer` - * from the `strategy` for the `sharesAmount`. - * - Asserts that staker is delegated to the operator - * - Asserts that shares for delegatedTo operator are decreased by `sharesAmount` - * - Asserts that staker cumulativeWithdrawalsQueued nonce is incremented - * - Checks that event was emitted with correct withdrawalRoot and withdrawal - */ - function testFuzz_queueWithdrawal_SingleStrat( - address staker, - uint256 depositAmount, - uint256 withdrawalAmount - ) public filterFuzzedAddressInputs(staker) { - cheats.assume(staker != defaultOperator); - cheats.assume(withdrawalAmount > 0 && withdrawalAmount <= depositAmount); - uint256[] memory sharesAmounts = new uint256[](1); - sharesAmounts[0] = depositAmount; - // sharesAmounts is single element so returns single strategy - IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, sharesAmounts); - _registerOperatorWithBaseDetails(defaultOperator); - _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); - ( - IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, - IDelegationManager.Withdrawal memory withdrawal, - bytes32 withdrawalRoot - ) = _setUpQueueWithdrawalsSingleStrat({ - staker: staker, - withdrawer: staker, - strategy: strategies[0], - withdrawalAmount: withdrawalAmount - }); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker should be delegated to operator"); - uint256 nonceBefore = delegationManager.cumulativeWithdrawalsQueued(staker); - uint256 delegatedSharesBefore = delegationManager.operatorShares(defaultOperator, strategies[0]); - - // queueWithdrawals - cheats.prank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit WithdrawalQueued(withdrawalRoot, withdrawal); - delegationManager.queueWithdrawals(queuedWithdrawalParams); - - uint256 nonceAfter = delegationManager.cumulativeWithdrawalsQueued(staker); - uint256 delegatedSharesAfter = delegationManager.operatorShares(defaultOperator, strategies[0]); - assertEq(nonceBefore + 1, nonceAfter, "staker nonce should have incremented"); - assertEq(delegatedSharesBefore - withdrawalAmount, delegatedSharesAfter, "delegated shares not decreased correctly"); - } - - /** - * @notice Verifies that `DelegationManager.queueWithdrawals` properly queues a withdrawal for the `withdrawer` - * with multiple strategies and sharesAmounts. Depending on length sharesAmounts, deploys corresponding number of strategies - * and deposits sharesAmounts into each strategy for the staker and delegates to operator. - * For each strategy, withdrawAmount <= depositAmount - * - Asserts that staker is delegated to the operator - * - Asserts that shares for delegatedTo operator are decreased by `sharesAmount` - * - Asserts that staker cumulativeWithdrawalsQueued nonce is incremented - * - Checks that event was emitted with correct withdrawalRoot and withdrawal - */ - function testFuzz_queueWithdrawal_MultipleStrats( - address staker, - uint256[] memory depositAmounts - ) public filterFuzzedAddressInputs(staker){ - cheats.assume(staker != defaultOperator); - cheats.assume(depositAmounts.length > 0 && depositAmounts.length <= 32); - uint256[] memory withdrawalAmounts = _fuzzWithdrawalAmounts(depositAmounts); - - IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, depositAmounts); - _registerOperatorWithBaseDetails(defaultOperator); - _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); - ( - IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, - IDelegationManager.Withdrawal memory withdrawal, - bytes32 withdrawalRoot - ) = _setUpQueueWithdrawals({ - staker: staker, - withdrawer: staker, - strategies: strategies, - withdrawalAmounts: withdrawalAmounts - }); - // Before queueWithdrawal state values - uint256 nonceBefore = delegationManager.cumulativeWithdrawalsQueued(staker); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker should be delegated to operator"); - uint256[] memory delegatedSharesBefore = new uint256[](strategies.length); - for (uint256 i = 0; i < strategies.length; i++) { - delegatedSharesBefore[i] = delegationManager.operatorShares(defaultOperator, strategies[i]); - } - - // queueWithdrawals - cheats.prank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit WithdrawalQueued(withdrawalRoot, withdrawal); - delegationManager.queueWithdrawals(queuedWithdrawalParams); - - // Post queueWithdrawal state values - for (uint256 i = 0; i < strategies.length; i++) { - assertEq( - delegatedSharesBefore[i] - withdrawalAmounts[i], // Shares before - withdrawal amount - delegationManager.operatorShares(defaultOperator, strategies[i]), // Shares after - "delegated shares not decreased correctly" - ); - } - uint256 nonceAfter = delegationManager.cumulativeWithdrawalsQueued(staker); - assertEq(nonceBefore + 1, nonceAfter, "staker nonce should have incremented"); - } - - /** - * @notice Verifies that `DelegationManager.queueWithdrawals` properly queues a withdrawal for the `withdrawer` - * with multiple strategies and sharesAmounts and with thirdPartyTransfersForbidden for one of the strategies. - * Queuing a withdrawal should pass as the `withdrawer` address is the same as the staker. - * - * Depending on length sharesAmounts, deploys corresponding number of strategies - * and deposits sharesAmounts into each strategy for the staker and delegates to operator. - * For each strategy, withdrawAmount <= depositAmount - * - Asserts that staker is delegated to the operator - * - Asserts that shares for delegatedTo operator are decreased by `sharesAmount` - * - Asserts that staker cumulativeWithdrawalsQueued nonce is incremented - * - Checks that event was emitted with correct withdrawalRoot and withdrawal - */ - function testFuzz_queueWithdrawal_ThirdPartyTransfersForbidden( - address staker, - uint256[] memory depositAmounts, - uint256 randSalt - ) public filterFuzzedAddressInputs(staker){ - cheats.assume(depositAmounts.length > 0 && depositAmounts.length <= 32); - cheats.assume(staker != defaultOperator); - uint256[] memory withdrawalAmounts = _fuzzWithdrawalAmounts(depositAmounts); - - IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, depositAmounts); - // Randomly set strategy true for thirdPartyTransfersForbidden - uint256 randStrategyIndex = randSalt % strategies.length; - strategyManagerMock.setThirdPartyTransfersForbidden(strategies[randStrategyIndex], true); - - _registerOperatorWithBaseDetails(defaultOperator); - _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); - ( - IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, - IDelegationManager.Withdrawal memory withdrawal, - bytes32 withdrawalRoot - ) = _setUpQueueWithdrawals({ - staker: staker, - withdrawer: staker, - strategies: strategies, - withdrawalAmounts: withdrawalAmounts - }); - // Before queueWithdrawal state values - uint256 nonceBefore = delegationManager.cumulativeWithdrawalsQueued(staker); - assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker should be delegated to operator"); - uint256[] memory delegatedSharesBefore = new uint256[](strategies.length); - for (uint256 i = 0; i < strategies.length; i++) { - delegatedSharesBefore[i] = delegationManager.operatorShares(defaultOperator, strategies[i]); - } - - // queueWithdrawals - cheats.prank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit WithdrawalQueued(withdrawalRoot, withdrawal); - delegationManager.queueWithdrawals(queuedWithdrawalParams); - - // Post queueWithdrawal state values - for (uint256 i = 0; i < strategies.length; i++) { - assertEq( - delegatedSharesBefore[i] - withdrawalAmounts[i], // Shares before - withdrawal amount - delegationManager.operatorShares(defaultOperator, strategies[i]), // Shares after - "delegated shares not decreased correctly" - ); - } - uint256 nonceAfter = delegationManager.cumulativeWithdrawalsQueued(staker); - assertEq(nonceBefore + 1, nonceAfter, "staker nonce should have incremented"); - } - - /** - * @notice Randomly selects one of the strategies to set thirdPartyTransfersForbidden to true. - * Verifies that `DelegationManager.queueWithdrawals` properly reverts a queuedWithdrawal since the `withdrawer` - * is not the same as the `staker`. - */ - function testFuzz_queueWithdrawal_Revert_WhenThirdPartyTransfersForbidden( - address staker, - address withdrawer, - uint256[] memory depositAmounts, - uint256 randSalt - ) public filterFuzzedAddressInputs(staker) { - cheats.assume(staker != withdrawer && staker != defaultOperator); - cheats.assume(depositAmounts.length > 0 && depositAmounts.length <= 32); - uint256[] memory withdrawalAmounts = _fuzzWithdrawalAmounts(depositAmounts); - - IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, depositAmounts); - // Randomly set strategy true for thirdPartyTransfersForbidden - uint256 randStrategyIndex = randSalt % strategies.length; - strategyManagerMock.setThirdPartyTransfersForbidden(strategies[randStrategyIndex], true); - _registerOperatorWithBaseDetails(defaultOperator); - _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); - (IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, , ) = _setUpQueueWithdrawals({ - staker: staker, - withdrawer: withdrawer, - strategies: strategies, - withdrawalAmounts: withdrawalAmounts - }); - - // queueWithdrawals - // NOTE: Originally, you could queue a withdrawal to a different address, which would fail with a specific error - // if third party transfers were forbidden. Now, withdrawing to a different address is forbidden regardless - // of third party transfer status. - cheats.expectRevert( - "DelegationManager.queueWithdrawal: withdrawer must be staker" - ); - cheats.prank(staker); - delegationManager.queueWithdrawals(queuedWithdrawalParams); - } -} - -contract DelegationManagerUnitTests_completeQueuedWithdrawal is DelegationManagerUnitTests { - function test_Revert_WhenExitWithdrawalQueuePaused() public { - cheats.prank(pauser); - delegationManager.pause(2 ** PAUSED_EXIT_WITHDRAWAL_QUEUE); - _registerOperatorWithBaseDetails(defaultOperator); - ( - IDelegationManager.Withdrawal memory withdrawal, - IERC20[] memory tokens, - /* bytes32 withdrawalRoot */ - ) = _setUpCompleteQueuedWithdrawalSingleStrat({ - staker: defaultStaker, - withdrawer: defaultStaker, - depositAmount: 100, - withdrawalAmount: 100 - }); - _delegateToOperatorWhoAcceptsAllStakers(defaultStaker, defaultOperator); - - cheats.expectRevert("Pausable: index is paused"); - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); - } - - function test_Revert_WhenInvalidWithdrawalRoot() public { - _registerOperatorWithBaseDetails(defaultOperator); - ( - IDelegationManager.Withdrawal memory withdrawal, - IERC20[] memory tokens, - bytes32 withdrawalRoot - ) = _setUpCompleteQueuedWithdrawalSingleStrat({ - staker: defaultStaker, - withdrawer: defaultStaker, - depositAmount: 100, - withdrawalAmount: 100 - }); - _delegateToOperatorWhoAcceptsAllStakers(defaultStaker, defaultOperator); - - assertTrue(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be pending"); - cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); - cheats.prank(defaultStaker); - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); - assertFalse(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be completed and marked false now"); - - cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); - cheats.expectRevert("DelegationManager._completeQueuedWithdrawal: action is not in queue"); - cheats.prank(defaultStaker); - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); - } - - /** - * @notice should revert if minWithdrawalDelayBlocks has not passed, and if - * delegationManager.getWithdrawalDelay returns a value greater than minWithdrawalDelayBlocks - * then it should revert if the validBlockNumber has not passed either. - */ - function test_Revert_WhenWithdrawalDelayBlocksNotPassed( - uint256[] memory depositAmounts, - bool receiveAsTokens - ) public { - cheats.assume(depositAmounts.length > 0 && depositAmounts.length <= 32); - uint256[] memory withdrawalAmounts = _fuzzWithdrawalAmounts(depositAmounts); +// // register *this contract* as an operator and delegate from the `staker` to them +// _registerOperatorWithBaseDetails(defaultOperator); +// _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); + +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerUndelegated(staker, delegationManager.delegatedTo(staker)); +// cheats.prank(staker); +// bytes32[] memory withdrawalRoots = delegationManager.undelegate(staker); + +// assertEq(withdrawalRoots.length, 0, "withdrawalRoot should be an empty array"); +// assertEq( +// delegationManager.delegatedTo(staker), +// address(0), +// "undelegated staker should be delegated to zero address" +// ); +// assertFalse(delegationManager.isDelegated(staker), "staker not undelegated"); +// } + +// /** +// * @notice Verifies that the `undelegate` function allows for a force undelegation +// */ +// function testFuzz_undelegate_forceUndelegation_noDelegateableShares( +// address staker, +// bytes32 salt, +// bool callFromOperatorOrApprover +// ) public filterFuzzedAddressInputs(staker) { +// cheats.assume(staker != defaultOperator); + +// _registerOperatorWithDelegationApprover(defaultOperator); +// _delegateToOperatorWhoRequiresSig(staker, defaultOperator, salt); + +// address caller; +// if (callFromOperatorOrApprover) { +// caller = defaultApprover; +// } else { +// caller = defaultOperator; +// } + +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerForceUndelegated(staker, defaultOperator); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit StakerUndelegated(staker, defaultOperator); +// cheats.prank(caller); +// bytes32[] memory withdrawalRoots = delegationManager.undelegate(staker); + +// assertEq(withdrawalRoots.length, 0, "withdrawalRoot should be an empty array"); +// assertEq( +// delegationManager.delegatedTo(staker), +// address(0), +// "undelegated staker should be delegated to zero address" +// ); +// assertFalse(delegationManager.isDelegated(staker), "staker not undelegated"); +// } +// } + +// contract DelegationManagerUnitTests_queueWithdrawals is DelegationManagerUnitTests { +// function test_Revert_WhenEnterQueueWithdrawalsPaused() public { +// cheats.prank(pauser); +// delegationManager.pause(2 ** PAUSED_ENTER_WITHDRAWAL_QUEUE); +// (IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, , ) = _setUpQueueWithdrawalsSingleStrat({ +// staker: defaultStaker, +// withdrawer: defaultStaker, +// strategy: strategyMock, +// withdrawalAmount: 100 +// }); +// cheats.expectRevert("Pausable: index is paused"); +// delegationManager.queueWithdrawals(queuedWithdrawalParams); +// } + +// function test_Revert_WhenQueueWithdrawalParamsLengthMismatch() public { +// IStrategy[] memory strategyArray = new IStrategy[](1); +// strategyArray[0] = strategyMock; +// uint256[] memory shareAmounts = new uint256[](2); +// shareAmounts[0] = 100; +// shareAmounts[1] = 100; + +// IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams = new IDelegationManager.QueuedWithdrawalParams[](1); +// queuedWithdrawalParams[0] = IDelegationManager.QueuedWithdrawalParams({ +// strategies: strategyArray, +// shares: shareAmounts, +// withdrawer: defaultStaker +// }); + +// cheats.expectRevert("DelegationManager.queueWithdrawal: input length mismatch"); +// delegationManager.queueWithdrawals(queuedWithdrawalParams); +// } + +// function test_Revert_WhenNotStakerWithdrawer(address withdrawer) public { +// cheats.assume(withdrawer != defaultStaker); + +// (IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, , ) = _setUpQueueWithdrawalsSingleStrat({ +// staker: defaultStaker, +// withdrawer: withdrawer, +// strategy: strategyMock, +// withdrawalAmount: 100 +// }); +// cheats.expectRevert("DelegationManager.queueWithdrawal: withdrawer must be staker"); +// cheats.prank(defaultStaker); +// delegationManager.queueWithdrawals(queuedWithdrawalParams); +// } + +// function test_Revert_WhenEmptyStrategiesArray() public { +// IStrategy[] memory strategyArray = new IStrategy[](0); +// uint256[] memory shareAmounts = new uint256[](0); +// address withdrawer = defaultOperator; + +// IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams = new IDelegationManager.QueuedWithdrawalParams[](1); +// queuedWithdrawalParams[0] = IDelegationManager.QueuedWithdrawalParams({ +// strategies: strategyArray, +// shares: shareAmounts, +// withdrawer: withdrawer +// }); + +// cheats.expectRevert("DelegationManager._removeSharesAndQueueWithdrawal: strategies cannot be empty"); +// delegationManager.queueWithdrawals(queuedWithdrawalParams); +// } + +// /** +// * @notice Verifies that `DelegationManager.queueWithdrawals` properly queues a withdrawal for the `withdrawer` +// * from the `strategy` for the `sharesAmount`. +// * - Asserts that staker is delegated to the operator +// * - Asserts that shares for delegatedTo operator are decreased by `sharesAmount` +// * - Asserts that staker cumulativeWithdrawalsQueued nonce is incremented +// * - Checks that event was emitted with correct withdrawalRoot and withdrawal +// */ +// function testFuzz_queueWithdrawal_SingleStrat( +// address staker, +// uint256 depositAmount, +// uint256 withdrawalAmount +// ) public filterFuzzedAddressInputs(staker) { +// cheats.assume(staker != defaultOperator); +// cheats.assume(withdrawalAmount > 0 && withdrawalAmount <= depositAmount); +// uint256[] memory sharesAmounts = new uint256[](1); +// sharesAmounts[0] = depositAmount; +// // sharesAmounts is single element so returns single strategy +// IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, sharesAmounts); +// _registerOperatorWithBaseDetails(defaultOperator); +// _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); +// ( +// IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, +// IDelegationManager.Withdrawal memory withdrawal, +// bytes32 withdrawalRoot +// ) = _setUpQueueWithdrawalsSingleStrat({ +// staker: staker, +// withdrawer: staker, +// strategy: strategies[0], +// withdrawalAmount: withdrawalAmount +// }); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker should be delegated to operator"); +// uint256 nonceBefore = delegationManager.cumulativeWithdrawalsQueued(staker); +// uint256 delegatedSharesBefore = delegationManager.operatorShares(defaultOperator, strategies[0]); + +// // queueWithdrawals +// cheats.prank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit WithdrawalQueued(withdrawalRoot, withdrawal); +// delegationManager.queueWithdrawals(queuedWithdrawalParams); + +// uint256 nonceAfter = delegationManager.cumulativeWithdrawalsQueued(staker); +// uint256 delegatedSharesAfter = delegationManager.operatorShares(defaultOperator, strategies[0]); +// assertEq(nonceBefore + 1, nonceAfter, "staker nonce should have incremented"); +// assertEq(delegatedSharesBefore - withdrawalAmount, delegatedSharesAfter, "delegated shares not decreased correctly"); +// } + +// /** +// * @notice Verifies that `DelegationManager.queueWithdrawals` properly queues a withdrawal for the `withdrawer` +// * with multiple strategies and sharesAmounts. Depending on length sharesAmounts, deploys corresponding number of strategies +// * and deposits sharesAmounts into each strategy for the staker and delegates to operator. +// * For each strategy, withdrawAmount <= depositAmount +// * - Asserts that staker is delegated to the operator +// * - Asserts that shares for delegatedTo operator are decreased by `sharesAmount` +// * - Asserts that staker cumulativeWithdrawalsQueued nonce is incremented +// * - Checks that event was emitted with correct withdrawalRoot and withdrawal +// */ +// function testFuzz_queueWithdrawal_MultipleStrats( +// address staker, +// uint256[] memory depositAmounts +// ) public filterFuzzedAddressInputs(staker){ +// cheats.assume(staker != defaultOperator); +// cheats.assume(depositAmounts.length > 0 && depositAmounts.length <= 32); +// uint256[] memory withdrawalAmounts = _fuzzWithdrawalAmounts(depositAmounts); + +// IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, depositAmounts); +// _registerOperatorWithBaseDetails(defaultOperator); +// _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); +// ( +// IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, +// IDelegationManager.Withdrawal memory withdrawal, +// bytes32 withdrawalRoot +// ) = _setUpQueueWithdrawals({ +// staker: staker, +// withdrawer: staker, +// strategies: strategies, +// withdrawalAmounts: withdrawalAmounts +// }); +// // Before queueWithdrawal state values +// uint256 nonceBefore = delegationManager.cumulativeWithdrawalsQueued(staker); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker should be delegated to operator"); +// uint256[] memory delegatedSharesBefore = new uint256[](strategies.length); +// for (uint256 i = 0; i < strategies.length; i++) { +// delegatedSharesBefore[i] = delegationManager.operatorShares(defaultOperator, strategies[i]); +// } + +// // queueWithdrawals +// cheats.prank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit WithdrawalQueued(withdrawalRoot, withdrawal); +// delegationManager.queueWithdrawals(queuedWithdrawalParams); + +// // Post queueWithdrawal state values +// for (uint256 i = 0; i < strategies.length; i++) { +// assertEq( +// delegatedSharesBefore[i] - withdrawalAmounts[i], // Shares before - withdrawal amount +// delegationManager.operatorShares(defaultOperator, strategies[i]), // Shares after +// "delegated shares not decreased correctly" +// ); +// } +// uint256 nonceAfter = delegationManager.cumulativeWithdrawalsQueued(staker); +// assertEq(nonceBefore + 1, nonceAfter, "staker nonce should have incremented"); +// } + +// /** +// * @notice Verifies that `DelegationManager.queueWithdrawals` properly queues a withdrawal for the `withdrawer` +// * with multiple strategies and sharesAmounts and with thirdPartyTransfersForbidden for one of the strategies. +// * Queuing a withdrawal should pass as the `withdrawer` address is the same as the staker. +// * +// * Depending on length sharesAmounts, deploys corresponding number of strategies +// * and deposits sharesAmounts into each strategy for the staker and delegates to operator. +// * For each strategy, withdrawAmount <= depositAmount +// * - Asserts that staker is delegated to the operator +// * - Asserts that shares for delegatedTo operator are decreased by `sharesAmount` +// * - Asserts that staker cumulativeWithdrawalsQueued nonce is incremented +// * - Checks that event was emitted with correct withdrawalRoot and withdrawal +// */ +// function testFuzz_queueWithdrawal_ThirdPartyTransfersForbidden( +// address staker, +// uint256[] memory depositAmounts, +// uint256 randSalt +// ) public filterFuzzedAddressInputs(staker){ +// cheats.assume(depositAmounts.length > 0 && depositAmounts.length <= 32); +// cheats.assume(staker != defaultOperator); +// uint256[] memory withdrawalAmounts = _fuzzWithdrawalAmounts(depositAmounts); + +// IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, depositAmounts); +// // Randomly set strategy true for thirdPartyTransfersForbidden +// uint256 randStrategyIndex = randSalt % strategies.length; +// strategyManagerMock.setThirdPartyTransfersForbidden(strategies[randStrategyIndex], true); + +// _registerOperatorWithBaseDetails(defaultOperator); +// _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); +// ( +// IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, +// IDelegationManager.Withdrawal memory withdrawal, +// bytes32 withdrawalRoot +// ) = _setUpQueueWithdrawals({ +// staker: staker, +// withdrawer: staker, +// strategies: strategies, +// withdrawalAmounts: withdrawalAmounts +// }); +// // Before queueWithdrawal state values +// uint256 nonceBefore = delegationManager.cumulativeWithdrawalsQueued(staker); +// assertEq(delegationManager.delegatedTo(staker), defaultOperator, "staker should be delegated to operator"); +// uint256[] memory delegatedSharesBefore = new uint256[](strategies.length); +// for (uint256 i = 0; i < strategies.length; i++) { +// delegatedSharesBefore[i] = delegationManager.operatorShares(defaultOperator, strategies[i]); +// } + +// // queueWithdrawals +// cheats.prank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit WithdrawalQueued(withdrawalRoot, withdrawal); +// delegationManager.queueWithdrawals(queuedWithdrawalParams); + +// // Post queueWithdrawal state values +// for (uint256 i = 0; i < strategies.length; i++) { +// assertEq( +// delegatedSharesBefore[i] - withdrawalAmounts[i], // Shares before - withdrawal amount +// delegationManager.operatorShares(defaultOperator, strategies[i]), // Shares after +// "delegated shares not decreased correctly" +// ); +// } +// uint256 nonceAfter = delegationManager.cumulativeWithdrawalsQueued(staker); +// assertEq(nonceBefore + 1, nonceAfter, "staker nonce should have incremented"); +// } + +// /** +// * @notice Randomly selects one of the strategies to set thirdPartyTransfersForbidden to true. +// * Verifies that `DelegationManager.queueWithdrawals` properly reverts a queuedWithdrawal since the `withdrawer` +// * is not the same as the `staker`. +// */ +// function testFuzz_queueWithdrawal_Revert_WhenThirdPartyTransfersForbidden( +// address staker, +// address withdrawer, +// uint256[] memory depositAmounts, +// uint256 randSalt +// ) public filterFuzzedAddressInputs(staker) { +// cheats.assume(staker != withdrawer && staker != defaultOperator); +// cheats.assume(depositAmounts.length > 0 && depositAmounts.length <= 32); +// uint256[] memory withdrawalAmounts = _fuzzWithdrawalAmounts(depositAmounts); + +// IStrategy[] memory strategies = _deployAndDepositIntoStrategies(staker, depositAmounts); +// // Randomly set strategy true for thirdPartyTransfersForbidden +// uint256 randStrategyIndex = randSalt % strategies.length; +// strategyManagerMock.setThirdPartyTransfersForbidden(strategies[randStrategyIndex], true); +// _registerOperatorWithBaseDetails(defaultOperator); +// _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); +// (IDelegationManager.QueuedWithdrawalParams[] memory queuedWithdrawalParams, , ) = _setUpQueueWithdrawals({ +// staker: staker, +// withdrawer: withdrawer, +// strategies: strategies, +// withdrawalAmounts: withdrawalAmounts +// }); + +// // queueWithdrawals +// // NOTE: Originally, you could queue a withdrawal to a different address, which would fail with a specific error +// // if third party transfers were forbidden. Now, withdrawing to a different address is forbidden regardless +// // of third party transfer status. +// cheats.expectRevert( +// "DelegationManager.queueWithdrawal: withdrawer must be staker" +// ); +// cheats.prank(staker); +// delegationManager.queueWithdrawals(queuedWithdrawalParams); +// } +// } + +// contract DelegationManagerUnitTests_completeQueuedWithdrawal is DelegationManagerUnitTests { +// function test_Revert_WhenExitWithdrawalQueuePaused() public { +// cheats.prank(pauser); +// delegationManager.pause(2 ** PAUSED_EXIT_WITHDRAWAL_QUEUE); +// _registerOperatorWithBaseDetails(defaultOperator); +// ( +// IDelegationManager.Withdrawal memory withdrawal, +// IERC20[] memory tokens, +// /* bytes32 withdrawalRoot */ +// ) = _setUpCompleteQueuedWithdrawalSingleStrat({ +// staker: defaultStaker, +// withdrawer: defaultStaker, +// depositAmount: 100, +// withdrawalAmount: 100 +// }); +// _delegateToOperatorWhoAcceptsAllStakers(defaultStaker, defaultOperator); + +// cheats.expectRevert("Pausable: index is paused"); +// delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); +// } + +// function test_Revert_WhenInvalidWithdrawalRoot() public { +// _registerOperatorWithBaseDetails(defaultOperator); +// ( +// IDelegationManager.Withdrawal memory withdrawal, +// IERC20[] memory tokens, +// bytes32 withdrawalRoot +// ) = _setUpCompleteQueuedWithdrawalSingleStrat({ +// staker: defaultStaker, +// withdrawer: defaultStaker, +// depositAmount: 100, +// withdrawalAmount: 100 +// }); +// _delegateToOperatorWhoAcceptsAllStakers(defaultStaker, defaultOperator); + +// assertTrue(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be pending"); +// cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); +// cheats.prank(defaultStaker); +// delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); +// assertFalse(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be completed and marked false now"); + +// cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); +// cheats.expectRevert("DelegationManager._completeQueuedWithdrawal: action is not in queue"); +// cheats.prank(defaultStaker); +// delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); +// } + +// /** +// * @notice should revert if minWithdrawalDelayBlocks has not passed, and if +// * delegationManager.getWithdrawalDelay returns a value greater than minWithdrawalDelayBlocks +// * then it should revert if the validBlockNumber has not passed either. +// */ +// function test_Revert_WhenWithdrawalDelayBlocksNotPassed( +// uint256[] memory depositAmounts, +// bool receiveAsTokens +// ) public { +// cheats.assume(depositAmounts.length > 0 && depositAmounts.length <= 32); +// uint256[] memory withdrawalAmounts = _fuzzWithdrawalAmounts(depositAmounts); - _registerOperatorWithBaseDetails(defaultOperator); - ( - IDelegationManager.Withdrawal memory withdrawal, - IERC20[] memory tokens, - /* bytes32 withdrawalRoot */ - ) = _setUpCompleteQueuedWithdrawal({ - staker: defaultStaker, - withdrawer: defaultStaker, - depositAmounts: depositAmounts, - withdrawalAmounts: withdrawalAmounts - }); - - // prank as withdrawer address - cheats.startPrank(defaultStaker); - - cheats.expectRevert( - "DelegationManager._completeQueuedWithdrawal: minWithdrawalDelayBlocks period has not yet passed" - ); - cheats.roll(block.number + minWithdrawalDelayBlocks - 1); - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, receiveAsTokens); - - uint256 validBlockNumber = delegationManager.getWithdrawalDelay(withdrawal.strategies); - if (validBlockNumber > minWithdrawalDelayBlocks) { - cheats.expectRevert( - "DelegationManager._completeQueuedWithdrawal: withdrawalDelayBlocks period has not yet passed for this strategy" - ); - cheats.roll(validBlockNumber - 1); - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, receiveAsTokens); - } - - cheats.stopPrank(); - } - - /** - * @notice should revert when the withdrawalDelayBlocks period has not yet passed for the - * beacon chain strategy - */ - function test_Revert_WhenWithdrawalDelayBlocksNotPassed_BeaconStrat( - uint256 depositAmount, - uint256 withdrawalAmount, - uint256 beaconWithdrawalDelay - ) public { - cheats.assume(depositAmount > 1 && withdrawalAmount <= depositAmount); - beaconWithdrawalDelay = bound(beaconWithdrawalDelay, minWithdrawalDelayBlocks, MAX_WITHDRAWAL_DELAY_BLOCKS); - _registerOperatorWithBaseDetails(defaultOperator); - ( - IDelegationManager.Withdrawal memory withdrawal, - IERC20[] memory tokens, - // bytes32 withdrawalRoot - ) = _setUpCompleteQueuedWithdrawalBeaconStrat({ - staker: defaultStaker, - withdrawer: defaultStaker, - depositAmount: depositAmount, - withdrawalAmount: withdrawalAmount - }); - - IStrategy[] memory strategies = new IStrategy[](1); - strategies[0] = beaconChainETHStrategy; - uint256[] memory withdrawalDelayBlocks = new uint256[](1); - delegationManager.setStrategyWithdrawalDelayBlocks(withdrawal.strategies, withdrawalDelayBlocks); - - // prank as withdrawer address - cheats.startPrank(defaultStaker); - - cheats.expectRevert( - "DelegationManager._completeQueuedWithdrawal: minWithdrawalDelayBlocks period has not yet passed" - ); - cheats.roll(block.number + minWithdrawalDelayBlocks - 1); - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); - - uint256 validBlockNumber = delegationManager.getWithdrawalDelay(withdrawal.strategies); - if (validBlockNumber > minWithdrawalDelayBlocks) { - cheats.expectRevert( - "DelegationManager._completeQueuedWithdrawal: withdrawalDelayBlocks period has not yet passed for this strategy" - ); - cheats.roll(validBlockNumber - 1); - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); - } - - cheats.stopPrank(); - } - - function test_Revert_WhenNotCalledByWithdrawer() public { - _registerOperatorWithBaseDetails(defaultOperator); - ( - IDelegationManager.Withdrawal memory withdrawal, - IERC20[] memory tokens, - /*bytes32 withdrawalRoot*/ - ) = _setUpCompleteQueuedWithdrawalSingleStrat({ - staker: defaultStaker, - withdrawer: defaultStaker, - depositAmount: 100, - withdrawalAmount: 100 - }); - _delegateToOperatorWhoAcceptsAllStakers(defaultStaker, defaultOperator); - - cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); - cheats.expectRevert("DelegationManager._completeQueuedWithdrawal: only withdrawer can complete action"); - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); - } - - function test_Revert_WhenTokensArrayLengthMismatch() public { - _registerOperatorWithBaseDetails(defaultOperator); - (IDelegationManager.Withdrawal memory withdrawal, , ) = _setUpCompleteQueuedWithdrawalSingleStrat({ - staker: defaultStaker, - withdrawer: defaultStaker, - depositAmount: 100, - withdrawalAmount: 100 - }); - _delegateToOperatorWhoAcceptsAllStakers(defaultStaker, defaultOperator); - - IERC20[] memory tokens = new IERC20[](0); - cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); - cheats.expectRevert("DelegationManager._completeQueuedWithdrawal: input length mismatch"); - cheats.prank(defaultStaker); - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, true); - } - - /** - * @notice Verifies that `DelegationManager.completeQueuedWithdrawal` properly completes a queued withdrawal for the `withdrawer` - * for a single strategy. Withdraws as tokens so there are no operator shares increase. - * - Asserts that the withdrawalRoot is True before `completeQueuedWithdrawal` and False after - * - Asserts operatorShares is unchanged after `completeQueuedWithdrawal` - * - Checks that event `WithdrawalCompleted` is emitted with withdrawalRoot - */ - function test_completeQueuedWithdrawal_SingleStratWithdrawAsTokens( - address staker, - uint256 depositAmount, - uint256 withdrawalAmount - ) public filterFuzzedAddressInputs(staker) { - cheats.assume(staker != defaultOperator); - cheats.assume(withdrawalAmount > 0 && withdrawalAmount <= depositAmount); - _registerOperatorWithBaseDetails(defaultOperator); - ( - IDelegationManager.Withdrawal memory withdrawal, - IERC20[] memory tokens, - bytes32 withdrawalRoot - ) = _setUpCompleteQueuedWithdrawalSingleStrat({ - staker: staker, - withdrawer: staker, - depositAmount: depositAmount, - withdrawalAmount: withdrawalAmount - }); - _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); - uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, withdrawal.strategies[0]); - assertTrue(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be pending"); - - // completeQueuedWithdrawal - cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); - cheats.prank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit WithdrawalCompleted(withdrawalRoot); - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, true); - - uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, withdrawal.strategies[0]); - assertEq(operatorSharesAfter, operatorSharesBefore, "operator shares should be unchanged"); - assertFalse(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be completed and marked false now"); - } - - /** - * @notice Verifies that `DelegationManager.completeQueuedWithdrawal` properly completes a queued withdrawal for the `withdrawer` - * for a single strategy. Withdraws as shares so if the withdrawer is delegated, operator shares increase. In the test case, this only - * happens if staker and withdrawer are fuzzed the same address (i.e. staker == withdrawer) - * - Asserts that the withdrawalRoot is True before `completeQueuedWithdrawal` and False after - * - Asserts if staker == withdrawer, operatorShares increase, otherwise operatorShares are unchanged - * - Checks that event `WithdrawalCompleted` is emitted with withdrawalRoot - */ - function test_completeQueuedWithdrawal_SingleStratWithdrawAsShares( - address staker, - uint256 depositAmount, - uint256 withdrawalAmount - ) public filterFuzzedAddressInputs(staker) { - cheats.assume(staker != defaultOperator); - cheats.assume(withdrawalAmount > 0 && withdrawalAmount <= depositAmount); - _registerOperatorWithBaseDetails(defaultOperator); - - ( - IDelegationManager.Withdrawal memory withdrawal, - IERC20[] memory tokens, - bytes32 withdrawalRoot - ) = _setUpCompleteQueuedWithdrawalSingleStrat({ - staker: staker, - withdrawer: staker, - depositAmount: depositAmount, - withdrawalAmount: withdrawalAmount - }); - _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); - uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, withdrawal.strategies[0]); - assertTrue(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be pending"); - - // completeQueuedWithdrawal - cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); - cheats.prank(staker); - cheats.expectEmit(true, true, true, true, address(delegationManager)); - emit WithdrawalCompleted(withdrawalRoot); - delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); - - uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, withdrawal.strategies[0]); - // Since staker is delegated, operatorShares get incremented - assertEq(operatorSharesAfter, operatorSharesBefore + withdrawalAmount, "operator shares not increased correctly"); - assertFalse(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be completed and marked false now"); - } -} +// _registerOperatorWithBaseDetails(defaultOperator); +// ( +// IDelegationManager.Withdrawal memory withdrawal, +// IERC20[] memory tokens, +// /* bytes32 withdrawalRoot */ +// ) = _setUpCompleteQueuedWithdrawal({ +// staker: defaultStaker, +// withdrawer: defaultStaker, +// depositAmounts: depositAmounts, +// withdrawalAmounts: withdrawalAmounts +// }); + +// // prank as withdrawer address +// cheats.startPrank(defaultStaker); + +// cheats.expectRevert( +// "DelegationManager._completeQueuedWithdrawal: minWithdrawalDelayBlocks period has not yet passed" +// ); +// cheats.roll(block.number + minWithdrawalDelayBlocks - 1); +// delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, receiveAsTokens); + +// uint256 validBlockNumber = delegationManager.getWithdrawalDelay(withdrawal.strategies); +// if (validBlockNumber > minWithdrawalDelayBlocks) { +// cheats.expectRevert( +// "DelegationManager._completeQueuedWithdrawal: withdrawalDelayBlocks period has not yet passed for this strategy" +// ); +// cheats.roll(validBlockNumber - 1); +// delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, receiveAsTokens); +// } + +// cheats.stopPrank(); +// } + +// /** +// * @notice should revert when the withdrawalDelayBlocks period has not yet passed for the +// * beacon chain strategy +// */ +// function test_Revert_WhenWithdrawalDelayBlocksNotPassed_BeaconStrat( +// uint256 depositAmount, +// uint256 withdrawalAmount, +// uint256 beaconWithdrawalDelay +// ) public { +// cheats.assume(depositAmount > 1 && withdrawalAmount <= depositAmount); +// beaconWithdrawalDelay = bound(beaconWithdrawalDelay, minWithdrawalDelayBlocks, MAX_WITHDRAWAL_DELAY_BLOCKS); +// _registerOperatorWithBaseDetails(defaultOperator); +// ( +// IDelegationManager.Withdrawal memory withdrawal, +// IERC20[] memory tokens, +// // bytes32 withdrawalRoot +// ) = _setUpCompleteQueuedWithdrawalBeaconStrat({ +// staker: defaultStaker, +// withdrawer: defaultStaker, +// depositAmount: depositAmount, +// withdrawalAmount: withdrawalAmount +// }); + +// IStrategy[] memory strategies = new IStrategy[](1); +// strategies[0] = beaconChainETHStrategy; +// uint256[] memory withdrawalDelayBlocks = new uint256[](1); +// delegationManager.setStrategyWithdrawalDelayBlocks(withdrawal.strategies, withdrawalDelayBlocks); + +// // prank as withdrawer address +// cheats.startPrank(defaultStaker); + +// cheats.expectRevert( +// "DelegationManager._completeQueuedWithdrawal: minWithdrawalDelayBlocks period has not yet passed" +// ); +// cheats.roll(block.number + minWithdrawalDelayBlocks - 1); +// delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); + +// uint256 validBlockNumber = delegationManager.getWithdrawalDelay(withdrawal.strategies); +// if (validBlockNumber > minWithdrawalDelayBlocks) { +// cheats.expectRevert( +// "DelegationManager._completeQueuedWithdrawal: withdrawalDelayBlocks period has not yet passed for this strategy" +// ); +// cheats.roll(validBlockNumber - 1); +// delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); +// } + +// cheats.stopPrank(); +// } + +// function test_Revert_WhenNotCalledByWithdrawer() public { +// _registerOperatorWithBaseDetails(defaultOperator); +// ( +// IDelegationManager.Withdrawal memory withdrawal, +// IERC20[] memory tokens, +// /*bytes32 withdrawalRoot*/ +// ) = _setUpCompleteQueuedWithdrawalSingleStrat({ +// staker: defaultStaker, +// withdrawer: defaultStaker, +// depositAmount: 100, +// withdrawalAmount: 100 +// }); +// _delegateToOperatorWhoAcceptsAllStakers(defaultStaker, defaultOperator); + +// cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); +// cheats.expectRevert("DelegationManager._completeQueuedWithdrawal: only withdrawer can complete action"); +// delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); +// } + +// function test_Revert_WhenTokensArrayLengthMismatch() public { +// _registerOperatorWithBaseDetails(defaultOperator); +// (IDelegationManager.Withdrawal memory withdrawal, , ) = _setUpCompleteQueuedWithdrawalSingleStrat({ +// staker: defaultStaker, +// withdrawer: defaultStaker, +// depositAmount: 100, +// withdrawalAmount: 100 +// }); +// _delegateToOperatorWhoAcceptsAllStakers(defaultStaker, defaultOperator); + +// IERC20[] memory tokens = new IERC20[](0); +// cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); +// cheats.expectRevert("DelegationManager._completeQueuedWithdrawal: input length mismatch"); +// cheats.prank(defaultStaker); +// delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, true); +// } + +// /** +// * @notice Verifies that `DelegationManager.completeQueuedWithdrawal` properly completes a queued withdrawal for the `withdrawer` +// * for a single strategy. Withdraws as tokens so there are no operator shares increase. +// * - Asserts that the withdrawalRoot is True before `completeQueuedWithdrawal` and False after +// * - Asserts operatorShares is unchanged after `completeQueuedWithdrawal` +// * - Checks that event `WithdrawalCompleted` is emitted with withdrawalRoot +// */ +// function test_completeQueuedWithdrawal_SingleStratWithdrawAsTokens( +// address staker, +// uint256 depositAmount, +// uint256 withdrawalAmount +// ) public filterFuzzedAddressInputs(staker) { +// cheats.assume(staker != defaultOperator); +// cheats.assume(withdrawalAmount > 0 && withdrawalAmount <= depositAmount); +// _registerOperatorWithBaseDetails(defaultOperator); +// ( +// IDelegationManager.Withdrawal memory withdrawal, +// IERC20[] memory tokens, +// bytes32 withdrawalRoot +// ) = _setUpCompleteQueuedWithdrawalSingleStrat({ +// staker: staker, +// withdrawer: staker, +// depositAmount: depositAmount, +// withdrawalAmount: withdrawalAmount +// }); +// _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); +// uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, withdrawal.strategies[0]); +// assertTrue(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be pending"); + +// // completeQueuedWithdrawal +// cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); +// cheats.prank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit WithdrawalCompleted(withdrawalRoot); +// delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, true); + +// uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, withdrawal.strategies[0]); +// assertEq(operatorSharesAfter, operatorSharesBefore, "operator shares should be unchanged"); +// assertFalse(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be completed and marked false now"); +// } + +// /** +// * @notice Verifies that `DelegationManager.completeQueuedWithdrawal` properly completes a queued withdrawal for the `withdrawer` +// * for a single strategy. Withdraws as shares so if the withdrawer is delegated, operator shares increase. In the test case, this only +// * happens if staker and withdrawer are fuzzed the same address (i.e. staker == withdrawer) +// * - Asserts that the withdrawalRoot is True before `completeQueuedWithdrawal` and False after +// * - Asserts if staker == withdrawer, operatorShares increase, otherwise operatorShares are unchanged +// * - Checks that event `WithdrawalCompleted` is emitted with withdrawalRoot +// */ +// function test_completeQueuedWithdrawal_SingleStratWithdrawAsShares( +// address staker, +// uint256 depositAmount, +// uint256 withdrawalAmount +// ) public filterFuzzedAddressInputs(staker) { +// cheats.assume(staker != defaultOperator); +// cheats.assume(withdrawalAmount > 0 && withdrawalAmount <= depositAmount); +// _registerOperatorWithBaseDetails(defaultOperator); + +// ( +// IDelegationManager.Withdrawal memory withdrawal, +// IERC20[] memory tokens, +// bytes32 withdrawalRoot +// ) = _setUpCompleteQueuedWithdrawalSingleStrat({ +// staker: staker, +// withdrawer: staker, +// depositAmount: depositAmount, +// withdrawalAmount: withdrawalAmount +// }); +// _delegateToOperatorWhoAcceptsAllStakers(staker, defaultOperator); +// uint256 operatorSharesBefore = delegationManager.operatorShares(defaultOperator, withdrawal.strategies[0]); +// assertTrue(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be pending"); + +// // completeQueuedWithdrawal +// cheats.roll(block.number + delegationManager.getWithdrawalDelay(withdrawal.strategies)); +// cheats.prank(staker); +// cheats.expectEmit(true, true, true, true, address(delegationManager)); +// emit WithdrawalCompleted(withdrawalRoot); +// delegationManager.completeQueuedWithdrawal(withdrawal, tokens, 0 /* middlewareTimesIndex */, false); + +// uint256 operatorSharesAfter = delegationManager.operatorShares(defaultOperator, withdrawal.strategies[0]); +// // Since staker is delegated, operatorShares get incremented +// assertEq(operatorSharesAfter, operatorSharesBefore + withdrawalAmount, "operator shares not increased correctly"); +// assertFalse(delegationManager.pendingWithdrawals(withdrawalRoot), "withdrawalRoot should be completed and marked false now"); +// } +// } diff --git a/src/test/unit/EigenPodManagerUnit.t.sol b/src/test/unit/EigenPodManagerUnit.t.sol index c953f7f5c..2317cf534 100644 --- a/src/test/unit/EigenPodManagerUnit.t.sol +++ b/src/test/unit/EigenPodManagerUnit.t.sol @@ -190,35 +190,35 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { Add Shares Tests *******************************************************************************/ - function testFuzz_addShares_revert_notDelegationManager(address notDelegationManager) public filterFuzzedAddressInputs(notDelegationManager){ + function testFuzz_addScaledShares_revert_notDelegationManager(address notDelegationManager) public filterFuzzedAddressInputs(notDelegationManager){ cheats.assume(notDelegationManager != address(delegationManagerMock)); cheats.prank(notDelegationManager); cheats.expectRevert("EigenPodManager.onlyDelegationManager: not the DelegationManager"); - eigenPodManager.addShares(defaultStaker, 0); + eigenPodManager.addScaledShares(defaultStaker, 0); } - function test_addShares_revert_podOwnerZeroAddress() public { + function test_addScaledShares_revert_podOwnerZeroAddress() public { cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.addShares: podOwner cannot be zero address"); - eigenPodManager.addShares(address(0), 0); + cheats.expectRevert("EigenPodManager.addScaledShares: podOwner cannot be zero address"); + eigenPodManager.addScaledShares(address(0), 0); } - function testFuzz_addShares_revert_sharesNegative(int256 shares) public { + function testFuzz_addScaledShares_revert_sharesNegative(int256 shares) public { cheats.assume(shares < 0); cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.addShares: shares cannot be negative"); - eigenPodManager.addShares(defaultStaker, uint256(shares)); + cheats.expectRevert("EigenPodManager.addScaledShares: shares cannot be negative"); + eigenPodManager.addScaledShares(defaultStaker, uint256(shares)); } - function testFuzz_addShares_revert_sharesNotWholeGwei(uint256 shares) public { + function testFuzz_addScaledShares_revert_sharesNotWholeGwei(uint256 shares) public { cheats.assume(int256(shares) >= 0); cheats.assume(shares % GWEI_TO_WEI != 0); cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.addShares: shares must be a whole Gwei amount"); - eigenPodManager.addShares(defaultStaker, shares); + cheats.expectRevert("EigenPodManager.addScaledShares: shares must be a whole Gwei amount"); + eigenPodManager.addScaledShares(defaultStaker, shares); } - function testFuzz_addShares(uint256 shares) public { + function testFuzz_addScaledShares(uint256 shares) public { // Fuzz inputs cheats.assume(defaultStaker != address(0)); shares = shares - (shares % GWEI_TO_WEI); // Round down to nearest Gwei @@ -226,7 +226,7 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { // Add shares cheats.prank(address(delegationManagerMock)); - eigenPodManager.addShares(defaultStaker, shares); + eigenPodManager.addScaledShares(defaultStaker, shares); // Check storage update assertEq(eigenPodManager.podOwnerShares(defaultStaker), int256(shares), "Incorrect number of shares added"); @@ -236,29 +236,29 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { Remove Shares Tests ******************************************************************************/ - function testFuzz_removeShares_revert_notDelegationManager(address notDelegationManager) public filterFuzzedAddressInputs(notDelegationManager) { + function testFuzz_removeScaledShares_revert_notDelegationManager(address notDelegationManager) public filterFuzzedAddressInputs(notDelegationManager) { cheats.assume(notDelegationManager != address(delegationManagerMock)); cheats.prank(notDelegationManager); cheats.expectRevert("EigenPodManager.onlyDelegationManager: not the DelegationManager"); - eigenPodManager.removeShares(defaultStaker, 0); + eigenPodManager.removeScaledShares(defaultStaker, 0); } - function testFuzz_removeShares_revert_sharesNegative(int256 shares) public { + function testFuzz_removeScaledShares_revert_sharesNegative(int256 shares) public { cheats.assume(shares < 0); cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.removeShares: shares cannot be negative"); - eigenPodManager.removeShares(defaultStaker, uint256(shares)); + cheats.expectRevert("EigenPodManager.removeScaledShares: shares cannot be negative"); + eigenPodManager.removeScaledShares(defaultStaker, uint256(shares)); } - function testFuzz_removeShares_revert_sharesNotWholeGwei(uint256 shares) public { + function testFuzz_removeScaledShares_revert_sharesNotWholeGwei(uint256 shares) public { cheats.assume(int256(shares) >= 0); cheats.assume(shares % GWEI_TO_WEI != 0); cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.removeShares: shares must be a whole Gwei amount"); - eigenPodManager.removeShares(defaultStaker, shares); + cheats.expectRevert("EigenPodManager.removeScaledShares: shares must be a whole Gwei amount"); + eigenPodManager.removeScaledShares(defaultStaker, shares); } - function testFuzz_removeShares_revert_tooManySharesRemoved(uint224 sharesToAdd, uint224 sharesToRemove) public { + function testFuzz_removeScaledShares_revert_tooManySharesRemoved(uint224 sharesToAdd, uint224 sharesToRemove) public { // Constrain inputs cheats.assume(sharesToRemove > sharesToAdd); uint256 sharesAdded = sharesToAdd * GWEI_TO_WEI; @@ -269,11 +269,11 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { // Remove shares cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.removeShares: cannot result in pod owner having negative shares"); - eigenPodManager.removeShares(defaultStaker, sharesRemoved); + cheats.expectRevert("EigenPodManager.removeScaledShares: cannot result in pod owner having negative shares"); + eigenPodManager.removeScaledShares(defaultStaker, sharesRemoved); } - function testFuzz_removeShares(uint224 sharesToAdd, uint224 sharesToRemove) public { + function testFuzz_removeScaledShares(uint224 sharesToAdd, uint224 sharesToRemove) public { // Constain inputs cheats.assume(sharesToRemove <= sharesToAdd); uint256 sharesAdded = sharesToAdd * GWEI_TO_WEI; @@ -284,13 +284,13 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { // Remove shares cheats.prank(address(delegationManagerMock)); - eigenPodManager.removeShares(defaultStaker, sharesRemoved); + eigenPodManager.removeScaledShares(defaultStaker, sharesRemoved); // Check storage assertEq(eigenPodManager.podOwnerShares(defaultStaker), int256(sharesAdded - sharesRemoved), "Incorrect number of shares removed"); } - function testFuzz_removeShares_zeroShares(address podOwner, uint256 shares) public filterFuzzedAddressInputs(podOwner) { + function testFuzz_removeScaledShares_zeroShares(address podOwner, uint256 shares) public filterFuzzedAddressInputs(podOwner) { // Constrain inputs cheats.assume(podOwner != address(0)); cheats.assume(shares < type(uint256).max / 2); @@ -302,7 +302,7 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { // Remove shares cheats.prank(address(delegationManagerMock)); - eigenPodManager.removeShares(podOwner, shares); + eigenPodManager.removeScaledShares(podOwner, shares); // Check storage update assertEq(eigenPodManager.podOwnerShares(podOwner), 0, "Shares not reset to zero"); @@ -342,7 +342,7 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { /** * @notice The `withdrawSharesAsTokens` is called in the `completeQueuedWithdrawal` function from the - * delegationManager. When a withdrawal is queued in the delegationManager, `removeShares is called` + * delegationManager. When a withdrawal is queued in the delegationManager, `removeScaledShares is called` */ function test_withdrawSharesAsTokens_reduceEntireDeficit() public { // Shares to initialize & withdraw @@ -417,9 +417,9 @@ contract EigenPodManagerUnitTests_BeaconChainETHBalanceUpdateTests is EigenPodMa eigenPodManager.recordBeaconChainETHBalanceUpdate(defaultStaker, sharesDelta); } - function testFuzz_recordBalanceUpdateX(int224 sharesBefore, int224 sharesDelta) public { + function testFuzz_recordBalanceUpdateX(int224 scaledSharesBefore, int224 sharesDelta) public { // Constrain inputs - int256 scaledSharesBefore = sharesBefore * int256(GWEI_TO_WEI); + int256 scaledSharesBefore = scaledSharesBefore * int256(GWEI_TO_WEI); int256 scaledSharesDelta = sharesDelta * int256(GWEI_TO_WEI); // Initialize shares @@ -439,7 +439,7 @@ contract EigenPodManagerUnitTests_BeaconChainETHBalanceUpdateTests is EigenPodMa } contract EigenPodManagerUnitTests_ShareAdjustmentCalculationTests is EigenPodManagerUnitTests { - // Wrapper contract that exposes the internal `_calculateChangeInDelegatableShares` function + // Wrapper contract that exposes the internal `_calculateChangeInDelegatableScaledShares` function EigenPodManagerWrapper public eigenPodManagerWrapper; function setUp() virtual override public { @@ -456,35 +456,35 @@ contract EigenPodManagerUnitTests_ShareAdjustmentCalculationTests is EigenPodMan eigenLayerProxyAdmin.upgrade(TransparentUpgradeableProxy(payable(address(eigenPodManager))), address(eigenPodManagerWrapper)); } - function testFuzz_shareAdjustment_negativeToNegative(int256 sharesBefore, int256 sharesAfter) public { - cheats.assume(sharesBefore <= 0); - cheats.assume(sharesAfter <= 0); + function testFuzz_shareAdjustment_negativeToNegative(int256 scaledSharesBefore, int256 scaledSharesAfter) public { + cheats.assume(scaledSharesBefore <= 0); + cheats.assume(scaledSharesAfter <= 0); - int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableShares(sharesBefore, sharesAfter); + int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableScaledShares(scaledSharesBefore, scaledSharesAfter); assertEq(sharesDelta, 0, "Shares delta must be 0"); } - function testFuzz_shareAdjustment_negativeToPositive(int256 sharesBefore, int256 sharesAfter) public { - cheats.assume(sharesBefore <= 0); - cheats.assume(sharesAfter > 0); + function testFuzz_shareAdjustment_negativeToPositive(int256 scaledSharesBefore, int256 scaledSharesAfter) public { + cheats.assume(scaledSharesBefore <= 0); + cheats.assume(scaledSharesAfter > 0); - int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableShares(sharesBefore, sharesAfter); - assertEq(sharesDelta, sharesAfter, "Shares delta must be equal to sharesAfter"); + int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableScaledShares(scaledSharesBefore, scaledSharesAfter); + assertEq(sharesDelta, scaledSharesAfter, "Shares delta must be equal to scaledSharesAfter"); } - function testFuzz_shareAdjustment_positiveToNegative(int256 sharesBefore, int256 sharesAfter) public { - cheats.assume(sharesBefore > 0); - cheats.assume(sharesAfter <= 0); + function testFuzz_shareAdjustment_positiveToNegative(int256 scaledSharesBefore, int256 scaledSharesAfter) public { + cheats.assume(scaledSharesBefore > 0); + cheats.assume(scaledSharesAfter <= 0); - int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableShares(sharesBefore, sharesAfter); - assertEq(sharesDelta, -sharesBefore, "Shares delta must be equal to the negative of sharesBefore"); + int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableScaledShares(scaledSharesBefore, scaledSharesAfter); + assertEq(sharesDelta, -scaledSharesBefore, "Shares delta must be equal to the negative of scaledSharesBefore"); } - function testFuzz_shareAdjustment_positiveToPositive(int256 sharesBefore, int256 sharesAfter) public { - cheats.assume(sharesBefore > 0); - cheats.assume(sharesAfter > 0); + function testFuzz_shareAdjustment_positiveToPositive(int256 scaledSharesBefore, int256 scaledSharesAfter) public { + cheats.assume(scaledSharesBefore > 0); + cheats.assume(scaledSharesAfter > 0); - int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableShares(sharesBefore, sharesAfter); - assertEq(sharesDelta, sharesAfter - sharesBefore, "Shares delta must be equal to the difference between sharesAfter and sharesBefore"); + int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableScaledShares(scaledSharesBefore, scaledSharesAfter); + assertEq(sharesDelta, scaledSharesAfter - scaledSharesBefore, "Shares delta must be equal to the difference between scaledSharesAfter and scaledSharesBefore"); } } diff --git a/src/test/unit/StrategyManagerUnit.t.sol b/src/test/unit/StrategyManagerUnit.t.sol index 7f6c7deb3..19ec870a5 100644 --- a/src/test/unit/StrategyManagerUnit.t.sol +++ b/src/test/unit/StrategyManagerUnit.t.sol @@ -37,7 +37,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv function setUp() public override { EigenLayerUnitTestSetup.setUp(); - strategyManagerImplementation = new StrategyManager(delegationManagerMock, eigenPodManagerMock, slasherMock); + strategyManagerImplementation = new StrategyManager(delegationManagerMock, eigenPodManagerMock, slasherMock, avsDirectoryMock); strategyManager = StrategyManager( address( new TransparentUpgradeableProxy( @@ -101,14 +101,14 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv ) internal filterFuzzedAddressInputs(staker) { IERC20 token = dummyToken; - // filter out zero case since it will revert with "StrategyManager._addShares: shares should not be zero!" + // filter out zero case since it will revert with "StrategyManager._addScaledShares: shares should not be zero!" cheats.assume(amount != 0); // filter out zero address because the mock ERC20 we are using will revert on using it cheats.assume(staker != address(0)); // sanity check / filter cheats.assume(amount <= token.balanceOf(address(this))); - uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); + uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); // needed for expecting an event with the right parameters @@ -119,7 +119,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv emit Deposit(staker, token, strategy, expectedShares); uint256 shares = strategyManager.depositIntoStrategy(strategy, token, amount); - uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); + uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); assertEq(sharesAfter, sharesBefore + shares, "sharesAfter != sharesBefore + shares"); @@ -144,7 +144,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv uint256 expiry, string memory expectedRevertMessage ) internal returns (bytes memory) { - // filter out zero case since it will revert with "StrategyManager._addShares: shares should not be zero!" + // filter out zero case since it will revert with "StrategyManager._addScaledShares: shares should not be zero!" cheats.assume(amount != 0); // sanity check / filter cheats.assume(amount <= dummyToken.balanceOf(address(this))); @@ -163,7 +163,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv signature = abi.encodePacked(r, s, v); } - uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, dummyStrat); + uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); bool expectedRevertMessageIsempty; { @@ -190,7 +190,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv signature ); - uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, dummyStrat); + uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); uint256 nonceAfter = strategyManager.nonces(staker); if (expiry >= block.timestamp && expectedRevertMessageIsempty) { @@ -271,7 +271,7 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest IERC20 token = dummyToken; IStrategy strategy = dummyStrat; - // filter out zero case since it will revert with "StrategyManager._addShares: shares should not be zero!" + // filter out zero case since it will revert with "StrategyManager._addScaledShares: shares should not be zero!" cheats.assume(amount != 0); // filter out zero address because the mock ERC20 we are using will revert on using it cheats.assume(staker != address(0)); @@ -281,7 +281,7 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest cheats.assume(amount <= token.balanceOf(address(this))); cheats.assume(amount >= 1); - uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); + uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); // needed for expecting an event with the right parameters @@ -292,7 +292,7 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest emit Deposit(staker, token, strategy, expectedShares); uint256 shares = strategyManager.depositIntoStrategy(strategy, token, amount); - uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); + uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); assertEq(sharesAfter, sharesBefore + shares, "sharesAfter != sharesBefore + shares"); @@ -472,7 +472,7 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest strategyManager.depositIntoStrategy(strategy, token, amount); } - function test_addShares_Revert_WhenSharesIsZero() external { + function test_addScaledShares_Revert_WhenSharesIsZero() external { // replace dummyStrat with Reenterer contract reenterer = new Reenterer(); dummyStrat = StrategyBase(address(reenterer)); @@ -494,7 +494,7 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest reenterer.prepareReturnData(abi.encode(uint256(0))); cheats.prank(staker); - cheats.expectRevert("StrategyManager._addShares: shares should not be zero!"); + cheats.expectRevert("StrategyManager._addScaledShares: shares should not be zero!"); strategyManager.depositIntoStrategy(strategy, token, amount); } } @@ -521,14 +521,14 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa signature = abi.encodePacked(r, s, v); } - uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); + uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: signature not from signer"); // call with `notStaker` as input instead of `staker` address address notStaker = address(3333); strategyManager.depositIntoStrategyWithSignature(strategy, token, amount, notStaker, expiry, signature); - uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); + uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); uint256 nonceAfter = strategyManager.nonces(staker); assertEq(sharesAfter, sharesBefore, "sharesAfter != sharesBefore"); @@ -572,7 +572,7 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa ERC1271WalletMock wallet = new ERC1271WalletMock(staker); staker = address(wallet); - // filter out zero case since it will revert with "StrategyManager._addShares: shares should not be zero!" + // filter out zero case since it will revert with "StrategyManager._addScaledShares: shares should not be zero!" cheats.assume(amount != 0); // sanity check / filter cheats.assume(amount <= token.balanceOf(address(this))); @@ -617,7 +617,7 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa ERC1271MaliciousMock wallet = new ERC1271MaliciousMock(); staker = address(wallet); - // filter out zero case since it will revert with "StrategyManager._addShares: shares should not be zero!" + // filter out zero case since it will revert with "StrategyManager._addScaledShares: shares should not be zero!" cheats.assume(amount != 0); // sanity check / filter cheats.assume(amount <= token.balanceOf(address(this))); @@ -763,12 +763,12 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa signature = abi.encodePacked(r, s, v); } - uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); + uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); cheats.expectRevert("StrategyManager.depositIntoStrategyWithSignature: signature expired"); strategyManager.depositIntoStrategyWithSignature(strategy, token, amount, staker, expiry, signature); - uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); + uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); uint256 nonceAfter = strategyManager.nonces(staker); assertEq(sharesAfter, sharesBefore, "sharesAfter != sharesBefore"); @@ -801,18 +801,18 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa } } -contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { +contract StrategyManagerUnitTests_removeScaledShares is StrategyManagerUnitTests { /** * @notice Should revert if not called by DelegationManager */ function test_Revert_DelegationManagerModifier() external { DelegationManagerMock invalidDelegationManager = new DelegationManagerMock(); cheats.expectRevert("StrategyManager.onlyDelegationManager: not the DelegationManager"); - invalidDelegationManager.removeShares(strategyManager, address(this), dummyStrat, 1); + invalidDelegationManager.removeScaledShares(strategyManager, address(this), dummyStrat, 1); } /** - * @notice deposits a single strategy and tests removeShares() function reverts when sharesAmount is 0 + * @notice deposits a single strategy and tests removeScaledShares() function reverts when sharesAmount is 0 */ function testFuzz_Revert_ZeroShares( address staker, @@ -822,48 +822,48 @@ contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { cheats.assume(depositAmount > 0 && depositAmount < dummyToken.totalSupply()); IStrategy strategy = dummyStrat; _depositIntoStrategySuccessfully(strategy, staker, depositAmount); - cheats.expectRevert("StrategyManager._removeShares: shareAmount should not be zero!"); - delegationManagerMock.removeShares(strategyManager, staker, strategy, 0); + cheats.expectRevert("StrategyManager._removeScaledShares: shareAmount should not be zero!"); + delegationManagerMock.removeScaledShares(strategyManager, staker, strategy, 0); } /** - * @notice deposits a single strategy and tests removeShares() function reverts when sharesAmount is + * @notice deposits a single strategy and tests removeScaledShares() function reverts when sharesAmount is * higher than depositAmount */ function testFuzz_Revert_ShareAmountTooHigh( address staker, uint256 depositAmount, - uint256 removeSharesAmount + uint256 removeScaledSharesAmount ) external filterFuzzedAddressInputs(staker) { cheats.assume(staker != address(0)); cheats.assume(depositAmount > 0 && depositAmount < dummyToken.totalSupply()); - cheats.assume(removeSharesAmount > depositAmount); + cheats.assume(removeScaledSharesAmount > depositAmount); IStrategy strategy = dummyStrat; _depositIntoStrategySuccessfully(strategy, staker, depositAmount); - cheats.expectRevert("StrategyManager._removeShares: shareAmount too high"); - delegationManagerMock.removeShares(strategyManager, staker, strategy, removeSharesAmount); + cheats.expectRevert("StrategyManager._removeScaledShares: shareAmount too high"); + delegationManagerMock.removeScaledShares(strategyManager, staker, strategy, removeScaledSharesAmount); } /** - * @notice deposit single strategy and removeShares() for less than the deposited amount + * @notice deposit single strategy and removeScaledShares() for less than the deposited amount * Shares should be updated correctly with stakerStrategyListLength unchanged */ - function testFuzz_RemoveSharesLessThanDeposit( + function testFuzz_RemoveScaledSharesLessThanDeposit( address staker, uint256 depositAmount, - uint256 removeSharesAmount + uint256 removeScaledSharesAmount ) external filterFuzzedAddressInputs(staker) { cheats.assume(staker != address(0)); cheats.assume(depositAmount > 0 && depositAmount < dummyToken.totalSupply()); - cheats.assume(removeSharesAmount > 0 && removeSharesAmount < depositAmount); + cheats.assume(removeScaledSharesAmount > 0 && removeScaledSharesAmount < depositAmount); IStrategy strategy = dummyStrat; _depositIntoStrategySuccessfully(strategy, staker, depositAmount); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); - uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); - delegationManagerMock.removeShares(strategyManager, staker, strategy, removeSharesAmount); + uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); + delegationManagerMock.removeScaledShares(strategyManager, staker, strategy, removeScaledSharesAmount); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); - uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); - assertEq(sharesBefore, sharesAfter + removeSharesAmount, "Remove incorrect amount of shares"); + uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); + assertEq(sharesBefore, sharesAfter + removeScaledSharesAmount, "Remove incorrect amount of shares"); assertEq( stakerStrategyListLengthBefore, stakerStrategyListLengthAfter, @@ -872,7 +872,7 @@ contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { } /** - * @notice testing removeShares() + * @notice testing removeScaledShares() * deposits 1 strategy and tests it is removed from staker strategy list after removing all shares */ function testFuzz_RemovesStakerStrategyListSingleStrat( @@ -885,12 +885,12 @@ contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { _depositIntoStrategySuccessfully(strategy, staker, sharesAmount); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); - uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); + uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); assertEq(sharesBefore, sharesAmount, "Staker has not deposited amount into strategy"); - delegationManagerMock.removeShares(strategyManager, staker, strategy, sharesAmount); + delegationManagerMock.removeScaledShares(strategyManager, staker, strategy, sharesAmount); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); - uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); + uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); assertEq( stakerStrategyListLengthAfter, stakerStrategyListLengthBefore - 1, @@ -901,7 +901,7 @@ contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { } /** - * @notice testing removeShares() function with 3 strategies deposited. + * @notice testing removeScaledShares() function with 3 strategies deposited. * Randomly selects one of the 3 strategies to be fully removed from staker strategy list. * Only callable by DelegationManager */ @@ -925,14 +925,14 @@ contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); uint256[] memory sharesBefore = new uint256[](3); for (uint256 i = 0; i < 3; ++i) { - sharesBefore[i] = strategyManager.stakerStrategyShares(staker, strategies[i]); + sharesBefore[i] = strategyManager.stakerStrategyScaledShares(staker, strategies[i]); assertEq(sharesBefore[i], amounts[i], "Staker has not deposited amount into strategy"); assertTrue(_isDepositedStrategy(staker, strategies[i]), "strategy should be deposited"); } - delegationManagerMock.removeShares(strategyManager, staker, removeStrategy, removeAmount); + delegationManagerMock.removeScaledShares(strategyManager, staker, removeStrategy, removeAmount); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); - uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, removeStrategy); + uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, removeStrategy); assertEq( stakerStrategyListLengthAfter, stakerStrategyListLengthBefore - 1, @@ -946,11 +946,11 @@ contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { } /** - * @notice testing removeShares() function with 3 strategies deposited. + * @notice testing removeScaledShares() function with 3 strategies deposited. * Removing Shares could result in removing from staker strategy list if depositAmounts[i] == sharesAmounts[i]. * Only callable by DelegationManager */ - function testFuzz_RemoveShares(uint256[3] memory depositAmounts, uint256[3] memory sharesAmounts) external { + function testFuzz_RemoveScaledShares(uint256[3] memory depositAmounts, uint256[3] memory sharesAmounts) external { address staker = address(this); IStrategy[] memory strategies = new IStrategy[](3); strategies[0] = dummyStrat; @@ -961,7 +961,7 @@ contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { depositAmounts[i] = bound(depositAmounts[i], 1, strategies[i].underlyingToken().totalSupply()); sharesAmounts[i] = bound(sharesAmounts[i], 1, depositAmounts[i]); _depositIntoStrategySuccessfully(strategies[i], staker, depositAmounts[i]); - sharesBefore[i] = strategyManager.stakerStrategyShares(staker, strategies[i]); + sharesBefore[i] = strategyManager.stakerStrategyScaledShares(staker, strategies[i]); assertEq(sharesBefore[i], depositAmounts[i], "Staker has not deposited amount into strategy"); assertTrue(_isDepositedStrategy(staker, strategies[i]), "strategy should be deposited"); } @@ -970,11 +970,11 @@ contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { uint256 numPoppedStrategies = 0; uint256[] memory sharesAfter = new uint256[](3); for (uint256 i = 0; i < 3; ++i) { - delegationManagerMock.removeShares(strategyManager, staker, strategies[i], sharesAmounts[i]); + delegationManagerMock.removeScaledShares(strategyManager, staker, strategies[i], sharesAmounts[i]); } for (uint256 i = 0; i < 3; ++i) { - sharesAfter[i] = strategyManager.stakerStrategyShares(staker, strategies[i]); + sharesAfter[i] = strategyManager.stakerStrategyScaledShares(staker, strategies[i]); if (sharesAmounts[i] == depositAmounts[i]) { ++numPoppedStrategies; assertFalse( @@ -1002,22 +1002,22 @@ contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { } } -contract StrategyManagerUnitTests_addShares is StrategyManagerUnitTests { +contract StrategyManagerUnitTests_addScaledShares is StrategyManagerUnitTests { function test_Revert_DelegationManagerModifier() external { DelegationManagerMock invalidDelegationManager = new DelegationManagerMock(); cheats.expectRevert("StrategyManager.onlyDelegationManager: not the DelegationManager"); - invalidDelegationManager.addShares(strategyManager, address(this), dummyToken, dummyStrat, 1); + invalidDelegationManager.addScaledShares(strategyManager, address(this), dummyToken, dummyStrat, 1); } function testFuzz_Revert_StakerZeroAddress(uint256 amount) external { - cheats.expectRevert("StrategyManager._addShares: staker cannot be zero address"); - delegationManagerMock.addShares(strategyManager, address(0), dummyToken, dummyStrat, amount); + cheats.expectRevert("StrategyManager._addScaledShares: staker cannot be zero address"); + delegationManagerMock.addScaledShares(strategyManager, address(0), dummyToken, dummyStrat, amount); } function testFuzz_Revert_ZeroShares(address staker) external filterFuzzedAddressInputs(staker) { cheats.assume(staker != address(0)); - cheats.expectRevert("StrategyManager._addShares: shares should not be zero!"); - delegationManagerMock.addShares(strategyManager, staker, dummyToken, dummyStrat, 0); + cheats.expectRevert("StrategyManager._addScaledShares: shares should not be zero!"); + delegationManagerMock.addScaledShares(strategyManager, staker, dummyToken, dummyStrat, 0); } function testFuzz_AppendsStakerStrategyList( @@ -1026,13 +1026,13 @@ contract StrategyManagerUnitTests_addShares is StrategyManagerUnitTests { ) external filterFuzzedAddressInputs(staker) { cheats.assume(staker != address(0) && amount != 0); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); - uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, dummyStrat); + uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); assertEq(sharesBefore, 0, "Staker has already deposited into this strategy"); assertFalse(_isDepositedStrategy(staker, dummyStrat), "strategy should not be deposited"); - delegationManagerMock.addShares(strategyManager, staker, dummyToken, dummyStrat, amount); + delegationManagerMock.addScaledShares(strategyManager, staker, dummyToken, dummyStrat, amount); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); - uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, dummyStrat); + uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); assertEq( stakerStrategyListLengthAfter, stakerStrategyListLengthBefore + 1, @@ -1042,7 +1042,7 @@ contract StrategyManagerUnitTests_addShares is StrategyManagerUnitTests { assertTrue(_isDepositedStrategy(staker, dummyStrat), "strategy should be deposited"); } - function testFuzz_AddSharesToExistingShares( + function testFuzz_AddScaledSharesToExistingShares( address staker, uint256 sharesAmount ) external filterFuzzedAddressInputs(staker) { @@ -1051,13 +1051,13 @@ contract StrategyManagerUnitTests_addShares is StrategyManagerUnitTests { IStrategy strategy = dummyStrat; _depositIntoStrategySuccessfully(strategy, staker, initialAmount); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); - uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, dummyStrat); + uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); assertEq(sharesBefore, initialAmount, "Staker has not deposited amount into strategy"); assertTrue(_isDepositedStrategy(staker, strategy), "strategy should be deposited"); - delegationManagerMock.addShares(strategyManager, staker, dummyToken, dummyStrat, sharesAmount); + delegationManagerMock.addScaledShares(strategyManager, staker, dummyToken, dummyStrat, sharesAmount); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); - uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, dummyStrat); + uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); assertEq( stakerStrategyListLengthAfter, stakerStrategyListLengthBefore, @@ -1068,7 +1068,7 @@ contract StrategyManagerUnitTests_addShares is StrategyManagerUnitTests { } /** - * @notice When _addShares() called either by depositIntoStrategy or addShares() results in appending to + * @notice When _addScaledShares() called either by depositIntoStrategy or addScaledShares() results in appending to * stakerStrategyListLength when the staker has MAX_STAKER_STRATEGY_LIST_LENGTH strategies, it should revert */ function test_Revert_WhenMaxStrategyListLength() external { @@ -1104,10 +1104,10 @@ contract StrategyManagerUnitTests_addShares is StrategyManagerUnitTests { ); cheats.prank(staker); - cheats.expectRevert("StrategyManager._addShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH"); - delegationManagerMock.addShares(strategyManager, staker, dummyToken, strategy, amount); + cheats.expectRevert("StrategyManager._addScaledShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH"); + delegationManagerMock.addScaledShares(strategyManager, staker, dummyToken, strategy, amount); - cheats.expectRevert("StrategyManager._addShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH"); + cheats.expectRevert("StrategyManager._addScaledShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH"); strategyManager.depositIntoStrategy(strategy, token, amount); } } @@ -1116,7 +1116,7 @@ contract StrategyManagerUnitTests_withdrawSharesAsTokens is StrategyManagerUnitT function test_Revert_DelegationManagerModifier() external { DelegationManagerMock invalidDelegationManager = new DelegationManagerMock(); cheats.expectRevert("StrategyManager.onlyDelegationManager: not the DelegationManager"); - invalidDelegationManager.removeShares(strategyManager, address(this), dummyStrat, 1); + invalidDelegationManager.removeScaledShares(strategyManager, address(this), dummyStrat, 1); } /** From f2cd18d074338d18ab9cb7eb38e5b089ec2febc0 Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Wed, 28 Aug 2024 15:50:27 -0400 Subject: [PATCH 09/47] fix: wrong uint16 value --- src/contracts/core/AVSDirectory.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index a43d7c9c3..1a67f354f 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -782,10 +782,10 @@ contract AVSDirectory is IStrategy strategy, uint16 numToComplete ) internal view returns (uint64 freeMagnitudeToAdd, uint256 nextIndex) { - uint256 nextIndex = _nextPendingFreeMagnitudeIndex[operator][strategy]; + nextIndex = _nextPendingFreeMagnitudeIndex[operator][strategy]; uint256 pendingFreeMagnitudeLength = _pendingFreeMagnitude[operator][strategy].length; - uint8 completed = 0; - uint64 freeMagnitudeToAdd = 0; + uint16 completed = 0; + freeMagnitudeToAdd = 0; while (nextIndex < pendingFreeMagnitudeLength && completed < numToComplete) { PendingFreeMagnitude memory pendingFreeMagnitude = _pendingFreeMagnitude[operator][strategy][nextIndex]; // pendingFreeMagnitude is ordered by completableTimestamp. If we reach one that is not completable yet, then break From 8fc51054bf85867aa50d73f7d6612f66594524a8 Mon Sep 17 00:00:00 2001 From: Yash Patil Date: Wed, 28 Aug 2024 19:36:12 -0400 Subject: [PATCH 10/47] feat: simplify deallocation now that only 1 max alloc/dealloc --- src/contracts/core/AVSDirectory.sol | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 1a67f354f..ae55b6847 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -690,13 +690,7 @@ contract AVSDirectory is // Newly configured magnitude is less than current value. // Therefore we handle this as a deallocation - // 1. update and decrement current and future queued amounts in case any pending allocations exist - _magnitudeUpdate[operator][allocation.strategy][operatorSetKey].decrementAtAndFutureCheckpoints({ - key: uint32(block.timestamp), - decrementValue: uint64(currentMagnitude) - allocation.magnitudes[i] - }); - - // 2. push PendingFreeMagnitude and respective array index into (op,opSet,Strategy) queued deallocations + // 1. push PendingFreeMagnitude and respective array index into (op,opSet,Strategy) queued deallocations uint256 index = _pendingFreeMagnitude[operator][allocation.strategy].length; _pendingFreeMagnitude[operator][allocation.strategy].push( PendingFreeMagnitude({ From 88d7ae60003f8240c6725c23453f6c2665f45b3b Mon Sep 17 00:00:00 2001 From: Yash Patil Date: Wed, 28 Aug 2024 19:37:11 -0400 Subject: [PATCH 11/47] docs: add clarifying comment on not updating pending allocs on dealloc --- src/contracts/core/AVSDirectory.sol | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index ae55b6847..58c46c394 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -690,6 +690,8 @@ contract AVSDirectory is // Newly configured magnitude is less than current value. // Therefore we handle this as a deallocation + // Note: MAX_PENDING_UPDATES == 1, so we do not have to decrement any allocations + // 1. push PendingFreeMagnitude and respective array index into (op,opSet,Strategy) queued deallocations uint256 index = _pendingFreeMagnitude[operator][allocation.strategy].length; _pendingFreeMagnitude[operator][allocation.strategy].push( @@ -699,6 +701,7 @@ contract AVSDirectory is }) ); _queuedDeallocationIndices[operator][allocation.strategy][operatorSetKey].push(index); + } else if (allocation.magnitudes[i] > uint64(currentMagnitude)) { // Newly configured magnitude is greater than current value. // Therefore we handle this as an allocation From c1c5356b7f90026040f71750651767e34416fd1a Mon Sep 17 00:00:00 2001 From: Yash Patil Date: Thu, 29 Aug 2024 10:59:28 -0400 Subject: [PATCH 12/47] fix: compile --- src/contracts/core/AVSDirectoryStorage.sol | 12 ++++-------- src/contracts/interfaces/IAVSDirectory.sol | 2 -- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index 1b63ee59f..cca773e92 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/AVSDirectoryStorage.sol @@ -58,6 +58,10 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { /// @dev Each item is formatted as such: bytes32(abi.encodePacked(avs, uint96(operatorSetId))) mapping(address => EnumerableSet.Bytes32Set) internal _operatorSetsMemberOf; + /// @notice Mapping: operatorSet => List of operators that are registered to the operatorSet + /// @dev Each key is formatted as such: bytes32(abi.encodePacked(avs, uint96(operatorSetId))) + mapping(bytes32 => EnumerableSet.AddressSet) internal _operatorSetMembers; + /// @notice Mapping: operator => avs => operatorSetId => operator registration status mapping(address => mapping(address => mapping(uint32 => OperatorSetRegistrationStatus))) public operatorSetStatus; @@ -81,14 +85,6 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { /// @notice Mapping: operator => strategy => operatorSet (encoded) => list of queuedDeallocation indices mapping(address => mapping(IStrategy => mapping(bytes32 => uint256[]))) internal _queuedDeallocationIndices; - /// @notice Mapping: operator => allocation delay (in seconds) for the operator. - /// This determines how long it takes for allocations to take in the future. Can only be set one time for each operator - mapping(address => AllocationDelayDetails) public allocationDelay; - - /// @notice Mapping: operatorSet => List of operators that are registered to the operatorSet - /// @dev Each key is formatted as such: bytes32(abi.encodePacked(avs, uint96(operatorSetId))) - mapping(bytes32 => EnumerableSet.AddressSet) internal _operatorSetMembers; - constructor(IDelegationManager _delegation) { delegation = _delegation; } diff --git a/src/contracts/interfaces/IAVSDirectory.sol b/src/contracts/interfaces/IAVSDirectory.sol index 71fbc1771..1fe4115f5 100644 --- a/src/contracts/interfaces/IAVSDirectory.sol +++ b/src/contracts/interfaces/IAVSDirectory.sol @@ -354,8 +354,6 @@ interface IAVSDirectory is ISignatureUtils { function isOperatorSet(address avs, uint32 operatorSetId) external view returns (bool); - function operatorSetMemberCount(address avs, uint32 operatorSetId) external view returns (uint256); - /** * @notice Returns operator set an operator is registered to in the order they were registered. * @param operator The operator address to query. From 95c19c0d2ffacba2e54ace357703771d200561de Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Fri, 30 Aug 2024 11:02:14 -0700 Subject: [PATCH 13/47] chore: some changes for making deployments (#716) * chore: some changes for making deployments * fix: addressed comments * fix: addressed comments --- .../deploy_from_scratch.anvil.config.json | 55 +++++++++++++++++++ .../deploy_from_scratch.holesky.config.json | 55 +++++++++++++++++++ .../holesky/M2_Deploy_From_Scratch.s.sol | 2 +- script/deploy/local/Deploy_From_Scratch.s.sol | 18 ++---- script/deploy/local/Upgrade.s.sol | 24 ++++++++ src/contracts/core/AVSDirectory.sol | 50 ++++++++++++++++- src/contracts/core/DelegationManager.sol | 5 +- .../core/DelegationManagerStorage.sol | 5 +- src/contracts/interfaces/IAVSDirectory.sol | 24 ++++++++ .../integration/IntegrationDeployer.t.sol | 6 +- src/test/mocks/AVSDirectoryMock.sol | 11 ++++ src/test/unit/AVSDirectoryUnit.t.sol | 2 +- 12 files changed, 235 insertions(+), 22 deletions(-) create mode 100644 script/configs/devnet/deploy_from_scratch.anvil.config.json create mode 100644 script/configs/devnet/deploy_from_scratch.holesky.config.json create mode 100644 script/deploy/local/Upgrade.s.sol diff --git a/script/configs/devnet/deploy_from_scratch.anvil.config.json b/script/configs/devnet/deploy_from_scratch.anvil.config.json new file mode 100644 index 000000000..96df127e1 --- /dev/null +++ b/script/configs/devnet/deploy_from_scratch.anvil.config.json @@ -0,0 +1,55 @@ +{ + "maintainer": "samlaf@eigenlabs.org", + "multisig_addresses": { + "operationsMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "communityMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "pauserMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "executorMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "timelock": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + }, + "strategies": [ + { + "token_address": "0x0000000000000000000000000000000000000000", + "token_symbol": "WETH", + "max_per_deposit": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "max_deposits": 115792089237316195423570985008687907853269984665640564039457584007913129639935 + } + ], + "strategyManager": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "eigenPod": { + "PARTIAL_WITHDRAWAL_FRAUD_PROOF_PERIOD_BLOCKS": 1, + "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR": "32000000000" + }, + "eigenPodManager": { + "init_paused_status": 30 + }, + "delayedWithdrawalRouter": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "slasher": { + "init_paused_status": 0 + }, + "delegation": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "rewardsCoordinator": { + "init_paused_status": 0, + "CALCULATION_INTERVAL_SECONDS": 604800, + "MAX_REWARDS_DURATION": 6048000, + "MAX_RETROACTIVE_LENGTH": 7776000, + "MAX_FUTURE_LENGTH": 2592000, + "GENESIS_REWARDS_TIMESTAMP": 1710979200, + "rewards_updater_address": "0x18a0f92Ad9645385E8A8f3db7d0f6CF7aBBb0aD4", + "activation_delay": 7200, + "calculation_interval_seconds": 604800, + "global_operator_commission_bips": 1000, + "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP": 1720656000, + "OPERATOR_SET_MAX_RETROACTIVE_LENGTH": 2592000 + }, + "ethPOSDepositAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa" +} \ No newline at end of file diff --git a/script/configs/devnet/deploy_from_scratch.holesky.config.json b/script/configs/devnet/deploy_from_scratch.holesky.config.json new file mode 100644 index 000000000..3dc1f204d --- /dev/null +++ b/script/configs/devnet/deploy_from_scratch.holesky.config.json @@ -0,0 +1,55 @@ +{ + "maintainer": "samlaf@eigenlabs.org", + "multisig_addresses": { + "operationsMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", + "communityMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", + "pauserMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", + "executorMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", + "timelock": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479" + }, + "strategies": [ + { + "token_address": "0x0000000000000000000000000000000000000000", + "token_symbol": "WETH", + "max_per_deposit": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "max_deposits": 115792089237316195423570985008687907853269984665640564039457584007913129639935 + } + ], + "strategyManager": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "eigenPod": { + "PARTIAL_WITHDRAWAL_FRAUD_PROOF_PERIOD_BLOCKS": 1, + "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR": "32000000000" + }, + "eigenPodManager": { + "init_paused_status": 30 + }, + "delayedWithdrawalRouter": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "slasher": { + "init_paused_status": 0 + }, + "delegation": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "rewardsCoordinator": { + "init_paused_status": 0, + "CALCULATION_INTERVAL_SECONDS": 604800, + "MAX_REWARDS_DURATION": 6048000, + "MAX_RETROACTIVE_LENGTH": 7776000, + "MAX_FUTURE_LENGTH": 2592000, + "GENESIS_REWARDS_TIMESTAMP": 1710979200, + "rewards_updater_address": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", + "activation_delay": 7200, + "calculation_interval_seconds": 604800, + "global_operator_commission_bips": 1000, + "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP": 1720656000, + "OPERATOR_SET_MAX_RETROACTIVE_LENGTH": 2592000 + }, + "ethPOSDepositAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa" +} \ No newline at end of file diff --git a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol index 5b7fdc931..0620d6877 100644 --- a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol +++ b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol @@ -76,7 +76,7 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); avsDirectoryImplementation = new AVSDirectory(delegationManager); - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( diff --git a/script/deploy/local/Deploy_From_Scratch.s.sol b/script/deploy/local/Deploy_From_Scratch.s.sol index cce88716b..c1e417262 100644 --- a/script/deploy/local/Deploy_From_Scratch.s.sol +++ b/script/deploy/local/Deploy_From_Scratch.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; +pragma solidity ^0.8.12; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; @@ -31,7 +31,7 @@ import "forge-std/Test.sol"; // source .env // # To deploy and verify our contract -// RUST_LOG=forge,foundry=trace forge script script/deploy/local/Deploy_From_Scratch.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast --sig "run(string memory configFile)" -- local/deploy_from_scratch.anvil.config.json +// forge script script/deploy/devnet/Deploy_From_Scratch.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast --sig "run(string memory configFile)" -- deploy_from_scratch.anvil.config.json contract DeployFromScratch is Script, Test { Vm cheats = Vm(HEVM_ADDRESS); @@ -108,7 +108,7 @@ contract DeployFromScratch is Script, Test { emit log_named_uint("You are deploying on ChainID", chainId); // READ JSON CONFIG DATA - deployConfigPath = string(bytes(string.concat("script/configs/", configFileName))); + deployConfigPath = string(bytes(string.concat("script/configs/devnet/", configFileName))); string memory config_data = vm.readFile(deployConfigPath); // bytes memory parsedData = vm.parseJson(config_data); @@ -215,7 +215,7 @@ contract DeployFromScratch is Script, Test { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); + delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory); strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher, avsDirectory); avsDirectoryImplementation = new AVSDirectory(delegation); slasherImplementation = new Slasher(strategyManager, delegation); @@ -436,13 +436,7 @@ contract DeployFromScratch is Script, Test { string memory finalJson = vm.serializeString(parent_object, parameters, parameters_output); // TODO: should output to different file depending on configFile passed to run() // so that we don't override mainnet output by deploying to goerli for eg. - vm.writeJson(finalJson, "script/output/devnet/local_from_scratch_deployment_data.json"); - - // generate + write eigenpods to file - address podAddress = eigenPodManager.createPod(); - string memory eigenpodStruct = "eigenpodStruct"; - string memory json = vm.serializeAddress(eigenpodStruct, "podAddress", podAddress); - vm.writeJson(json, "script/output/eigenpods.json"); + vm.writeJson(finalJson, "script/output/devnet/M2_from_scratch_deployment_data.json"); } function _verifyContractsPointAtOneAnother( @@ -645,4 +639,4 @@ contract DeployFromScratch is Script, Test { require(setMaxDeposits == maxDeposits, "setMaxDeposits not set correctly"); } } -} +} \ No newline at end of file diff --git a/script/deploy/local/Upgrade.s.sol b/script/deploy/local/Upgrade.s.sol new file mode 100644 index 000000000..22f038899 --- /dev/null +++ b/script/deploy/local/Upgrade.s.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; +import "../../utils/ExistingDeploymentParser.sol"; + +// # To load the variables in the .env file +// source .env + +// Generic upgrade script, DOES NOT UPDATE IMPLEMENTATION IN OUTPUT FILE +// forge script script/deploy/devnet/Upgrade.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY +contract Upgrade is ExistingDeploymentParser { + + function run() external { + // EDIT this for your script + _parseDeployedContracts("script/output/holesky/pre_preprod_slashing.holesky.json"); + + vm.startBroadcast(); + AVSDirectory newAVSDirectoryImplementation = new AVSDirectory(delegationManager); + eigenLayerProxyAdmin.upgrade(TransparentUpgradeableProxy(payable(address(avsDirectory))), address(newAVSDirectoryImplementation)); + vm.stopBroadcast(); + + } +} \ No newline at end of file diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 58c46c394..6adf00643 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -859,7 +859,7 @@ contract AVSDirectory is address operator, uint256 start, uint256 length - ) external view returns (OperatorSet[] memory operatorSets) { + ) public view returns (OperatorSet[] memory operatorSets) { uint256 maxLength = _operatorSetsMemberOf[operator].length() - start; if (length > maxLength) length = maxLength; operatorSets = new OperatorSet[](length); @@ -913,6 +913,54 @@ contract AVSDirectory is return _operatorSetsMemberOf[operator].contains(_encodeOperatorSet(operatorSet)); } + /** + * @param operator the operator to get the slashable magnitude for + * @param strategies the strategies to get the slashable magnitude for + * + * @return operatorSets the operator sets the operator is a member of and the current slashable magnitudes for each strategy + */ + function getCurrentSlashableMagnitudes( + address operator, + IStrategy[] calldata strategies + ) external view returns (OperatorSet[] memory, uint64[][] memory) { + OperatorSet[] memory operatorSets = getOperatorSetsOfOperator(operator, 0, _operatorSetsMemberOf[operator].length()); + uint64[][] memory slashableMagnitudes = new uint64[][](strategies.length); + for (uint256 i = 0; i < strategies.length; ++i) { + slashableMagnitudes[i] = new uint64[](operatorSets.length); + for (uint256 j = 0; j < operatorSets.length; ++j) { + slashableMagnitudes[i][j] = uint64( + _magnitudeUpdate[operator][strategies[i]][_encodeOperatorSet(operatorSets[j])].upperLookupLinear(uint32(block.timestamp)) + ); + } + } + return (operatorSets, slashableMagnitudes); + } + + /** + * @param operator the operator to get the slashable magnitude for + * @param strategies the strategies to get the slashable magnitude for + * @param timestamp the timestamp to get the slashable magnitude for + * + * @return operatorSets the operator sets the operator is a member of and the slashable magnitudes for each strategy + */ + function getSlashableMagnitudes( + address operator, + IStrategy[] calldata strategies, + uint32 timestamp + ) external view returns (OperatorSet[] memory, uint64[][] memory) { + OperatorSet[] memory operatorSets = getOperatorSetsOfOperator(operator, 0, _operatorSetsMemberOf[operator].length()); + uint64[][] memory slashableMagnitudes = new uint64[][](strategies.length); + for (uint256 i = 0; i < strategies.length; ++i) { + slashableMagnitudes[i] = new uint64[](operatorSets.length); + for (uint256 j = 0; j < operatorSets.length; ++j) { + slashableMagnitudes[i][j] = uint64( + _magnitudeUpdate[operator][strategies[i]][_encodeOperatorSet(operatorSets[j])].upperLookupRecent(timestamp) + ); + } + } + return (operatorSets, slashableMagnitudes); + } + /** * @param operator the operator to get the slashable ppm for * @param operatorSet the operatorSet to get the slashable ppm for diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 6a5cd103e..cbdc39023 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -68,8 +68,9 @@ contract DelegationManager is constructor( IStrategyManager _strategyManager, ISlasher _slasher, - IEigenPodManager _eigenPodManager - ) DelegationManagerStorage(_strategyManager, _slasher, _eigenPodManager) { + IEigenPodManager _eigenPodManager, + IAVSDirectory _avsDirectory + ) DelegationManagerStorage(_strategyManager, _slasher, _eigenPodManager, _avsDirectory) { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; } diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index c2b2eb6c2..42df9e3a5 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -35,7 +35,7 @@ abstract contract DelegationManagerStorage is IDelegationManager { bytes32 internal _DOMAIN_SEPARATOR; /// TODO @dev actually make this immutable and add to constructor - IAVSDirectory public constant avsDirectory = IAVSDirectory(address(0)); + IAVSDirectory public immutable avsDirectory; /// @notice The StrategyManager contract for EigenLayer IStrategyManager public immutable strategyManager; @@ -125,10 +125,11 @@ abstract contract DelegationManagerStorage is IDelegationManager { /// This determines how long it takes for allocations to take effect in the future. Can only be set one time for each operator mapping(address => AllocationDelayDetails) internal _operatorAllocationDelay; - constructor(IStrategyManager _strategyManager, ISlasher _slasher, IEigenPodManager _eigenPodManager) { + constructor(IStrategyManager _strategyManager, ISlasher _slasher, IEigenPodManager _eigenPodManager, IAVSDirectory _avsDirectory) { strategyManager = _strategyManager; eigenPodManager = _eigenPodManager; slasher = _slasher; + avsDirectory = _avsDirectory; } /** diff --git a/src/contracts/interfaces/IAVSDirectory.sol b/src/contracts/interfaces/IAVSDirectory.sol index 1fe4115f5..aadd2a5c2 100644 --- a/src/contracts/interfaces/IAVSDirectory.sol +++ b/src/contracts/interfaces/IAVSDirectory.sol @@ -316,6 +316,30 @@ interface IAVSDirectory is ISignatureUtils { */ function isOperatorSlashable(address operator, OperatorSet memory operatorSet) external view returns (bool); + /** + * @param operator the operator to get the slashable magnitude for + * @param strategies the strategies to get the slashable magnitude for + * + * @return operatorSets the operator sets the operator is a member of and the current slashable magnitudes for each strategy + */ + function getCurrentSlashableMagnitudes( + address operator, + IStrategy[] calldata strategies + ) external view returns (OperatorSet[] memory, uint64[][] memory); + + /** + * @param operator the operator to get the slashable magnitude for + * @param strategies the strategies to get the slashable magnitude for + * @param timestamp the timestamp to get the slashable magnitude for + * + * @return operatorSets the operator sets the operator is a member of and the slashable magnitudes for each strategy + */ + function getSlashableMagnitudes( + address operator, + IStrategy[] calldata strategies, + uint32 timestamp + ) external view returns (OperatorSet[] memory, uint64[][] memory); + /** * @param operator the operator to get the slashable ppm for * @param operatorSet the operatorSet to get the slashable ppm for diff --git a/src/test/integration/IntegrationDeployer.t.sol b/src/test/integration/IntegrationDeployer.t.sol index 2808a5c39..016202060 100644 --- a/src/test/integration/IntegrationDeployer.t.sol +++ b/src/test/integration/IntegrationDeployer.t.sol @@ -256,7 +256,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( @@ -399,7 +399,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { ); // First, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( @@ -493,7 +493,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { ); // First, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( diff --git a/src/test/mocks/AVSDirectoryMock.sol b/src/test/mocks/AVSDirectoryMock.sol index a1f058562..51b99367c 100644 --- a/src/test/mocks/AVSDirectoryMock.sol +++ b/src/test/mocks/AVSDirectoryMock.sol @@ -71,6 +71,17 @@ contract AVSDirectoryMock is IAVSDirectory, Test { function operatorSetMemberCount(address avs, uint32 operatorSetId) external view returns (uint256) {} + function getCurrentSlashableMagnitudes( + address operator, + IStrategy[] calldata strategies + ) external view returns (OperatorSet[] memory, uint64[][] memory) {} + + function getSlashableMagnitudes( + address operator, + IStrategy[] calldata strategies, + uint32 timestamp + ) external view returns (OperatorSet[] memory, uint64[][] memory) {} + function getSlashablePPM( address operator, OperatorSet calldata operatorSet, diff --git a/src/test/unit/AVSDirectoryUnit.t.sol b/src/test/unit/AVSDirectoryUnit.t.sol index b1d7b4562..27c3211bf 100644 --- a/src/test/unit/AVSDirectoryUnit.t.sol +++ b/src/test/unit/AVSDirectoryUnit.t.sol @@ -52,7 +52,7 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { // Deploy DelegationManager implmentation and proxy initializeStrategiesToSetDelayBlocks = new IStrategy[](0); initializeWithdrawalDelayBlocks = new uint256[](0); - delegationManagerImplementation = new DelegationManager(strategyManagerMock, slasherMock, eigenPodManagerMock); + delegationManagerImplementation = new DelegationManager(strategyManagerMock, slasherMock, eigenPodManagerMock, avsDirectory); // TODO: fix delegationManager = DelegationManager( address( new TransparentUpgradeableProxy( From f53ebc9743069d5b1366ca6ce4229d75b08240b8 Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Tue, 3 Sep 2024 22:33:53 -0400 Subject: [PATCH 14/47] fix: numPendingAllocations check --- src/contracts/core/AVSDirectory.sol | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 6adf00643..bc37241ee 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -676,7 +676,15 @@ contract AVSDirectory is // Check that there is at MOST `MAX_PENDING_UPDATES` combined allocations & deallocations for the operator, operatorSet, strategy { - uint256 numPendingAllocations = length - pos; + uint256 numPendingAllocations; + // if no lookup found (currentMagnitude == 0 && pos == 0), then we are at the beginning of the array + // the number of pending allocations is simply length + if (currentMagnitude == 0 && pos == 0) { + numPendingAllocations = length; + // if lookup found, then we take the difference between length-1 and pos + } else { + numPendingAllocations = length - pos - 1; + } uint256 numPendingDeallocations = _getNumQueuedDeallocations(operator, allocation.strategy, operatorSetKey); From 4d393c37c5daa93243c6b8023a2b0c9c4d73e11c Mon Sep 17 00:00:00 2001 From: "clandestine.eth" <96172957+0xClandestine@users.noreply.github.com> Date: Wed, 4 Sep 2024 12:02:39 -0400 Subject: [PATCH 15/47] fix(optimize): condense storage also avoids sload in a few cases --- src/contracts/core/AVSDirectory.sol | 116 ++++++++++++--------- src/contracts/core/AVSDirectoryStorage.sol | 12 +-- 2 files changed, 70 insertions(+), 58 deletions(-) diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index bc37241ee..f5187d559 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -83,7 +83,9 @@ contract AVSDirectory is * @dev msg.sender must be the AVS. * @dev The AVS may create operator sets before it becomes an operator set AVS. */ - function createOperatorSets(uint32[] calldata operatorSetIds) external { + function createOperatorSets( + uint32[] calldata operatorSetIds + ) external { for (uint256 i = 0; i < operatorSetIds.length; ++i) { require( !isOperatorSet[msg.sender][operatorSetIds[i]], @@ -438,7 +440,9 @@ contract AVSDirectory is * * @dev Note that the `metadataURI` is *never stored* and is only emitted in the `AVSMetadataURIUpdated` event. */ - function updateAVSMetadataURI(string calldata metadataURI) external override { + function updateAVSMetadataURI( + string calldata metadataURI + ) external override { emit AVSMetadataURIUpdated(msg.sender, metadataURI); } @@ -447,7 +451,9 @@ contract AVSDirectory is * * @param salt A unique and single use value associated with the approver signature. */ - function cancelSalt(bytes32 salt) external override { + function cancelSalt( + bytes32 salt + ) external override { // Mutate `operatorSaltIsSpent` to `true` to prevent future spending. operatorSaltIsSpent[msg.sender][salt] = true; } @@ -530,21 +536,16 @@ contract AVSDirectory is * * @dev Only used by legacy M2 AVSs that have not integrated with operator sets. */ - function deregisterOperatorFromAVS(address operator) - external - override - onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) - { + function deregisterOperatorFromAVS( + address operator + ) external override onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { require( avsOperatorStatus[msg.sender][operator] == OperatorAVSRegistrationStatus.REGISTERED, "AVSDirectory.deregisterOperatorFromAVS: operator not registered" ); // Assert that the AVS is not an operator set AVS. - require( - !isOperatorSetAVS[msg.sender], - "AVSDirectory.deregisterOperatorFromAVS: AVS is an operator set AVS" - ); + require(!isOperatorSetAVS[msg.sender], "AVSDirectory.deregisterOperatorFromAVS: AVS is an operator set AVS"); // Set the operator as deregistered avsOperatorStatus[msg.sender][operator] = OperatorAVSRegistrationStatus.UNREGISTERED; @@ -629,9 +630,11 @@ contract AVSDirectory is * In addition to updating freeMagnitude, updates next starting index to read from for pending free magnitudes after completing */ function _updateFreeMagnitude(address operator, IStrategy strategy, uint16 numToComplete) internal { - (uint64 freeMagnitudeToAdd, uint256 nextIndex) = _getPendingFreeMagnitude(operator, strategy, numToComplete); - freeMagnitude[operator][strategy] += freeMagnitudeToAdd; - _nextPendingFreeMagnitudeIndex[operator][strategy] = nextIndex; + OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][strategy]; + (uint64 freeMagnitudeToAdd, uint192 completed) = + _getPendingFreeMagnitude(operator, strategy, numToComplete, info.nextPendingFreeMagnitudeIndex); + info.freeMagnitude += freeMagnitudeToAdd; + info.nextPendingFreeMagnitudeIndex += completed; } /** @@ -654,7 +657,7 @@ contract AVSDirectory is allocation.operatorSets.length == allocation.magnitudes.length, "AVSDirectory._modifyAllocations: operatorSets and magnitudes length mismatch" ); - uint64 newFreeMagnitude = freeMagnitude[operator][allocation.strategy]; + // OperatorSet[] calldata opSets = allocation.operatorSets; bytes32 prevOperatorSet = bytes32(0); @@ -681,7 +684,7 @@ contract AVSDirectory is // the number of pending allocations is simply length if (currentMagnitude == 0 && pos == 0) { numPendingAllocations = length; - // if lookup found, then we take the difference between length-1 and pos + // if lookup found, then we take the difference between length-1 and pos } else { numPendingAllocations = length - pos - 1; } @@ -709,7 +712,6 @@ contract AVSDirectory is }) ); _queuedDeallocationIndices[operator][allocation.strategy][operatorSetKey].push(index); - } else if (allocation.magnitudes[i] > uint64(currentMagnitude)) { // Newly configured magnitude is greater than current value. // Therefore we handle this as an allocation @@ -721,17 +723,14 @@ contract AVSDirectory is }); // 2. decrement free magnitude by incremented amount + OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][allocation.strategy]; require( - newFreeMagnitude >= allocation.magnitudes[i] - uint64(currentMagnitude), + info.freeMagnitude >= allocation.magnitudes[i] - uint64(currentMagnitude), "AVSDirectory._modifyAllocations: insufficient available free magnitude to allocate" ); - newFreeMagnitude -= allocation.magnitudes[i] - uint64(currentMagnitude); + info.freeMagnitude -= allocation.magnitudes[i] - uint64(currentMagnitude); } } - - // update freeMagnitude after all allocations. - // if provided allocations only resulted in deallocating, then this value would be unchanged - freeMagnitude[operator][allocation.strategy] = newFreeMagnitude; } /** @@ -770,11 +769,8 @@ contract AVSDirectory is (bool exists,, uint224 totalMagnitude) = _totalMagnitudeUpdate[operator][strategy].latestCheckpoint(); if (!exists) { totalMagnitude = ShareScalingLib.INITIAL_TOTAL_MAGNITUDE; - _totalMagnitudeUpdate[operator][strategy].push({ - key: uint32(block.timestamp), - value: totalMagnitude - }); - freeMagnitude[operator][strategy] = ShareScalingLib.INITIAL_TOTAL_MAGNITUDE; + _totalMagnitudeUpdate[operator][strategy].push({key: uint32(block.timestamp), value: totalMagnitude}); + operatorMagnitudeInfo[operator][strategy].freeMagnitude = ShareScalingLib.INITIAL_TOTAL_MAGNITUDE; } return uint64(totalMagnitude); @@ -785,9 +781,9 @@ contract AVSDirectory is function _getPendingFreeMagnitude( address operator, IStrategy strategy, - uint16 numToComplete - ) internal view returns (uint64 freeMagnitudeToAdd, uint256 nextIndex) { - nextIndex = _nextPendingFreeMagnitudeIndex[operator][strategy]; + uint16 numToComplete, + uint192 nextIndex + ) internal view returns (uint64 freeMagnitudeToAdd, uint192 completed) { uint256 pendingFreeMagnitudeLength = _pendingFreeMagnitude[operator][strategy].length; uint16 completed = 0; freeMagnitudeToAdd = 0; @@ -900,7 +896,9 @@ contract AVSDirectory is * @notice Returns the number of operators registered to an operatorSet. * @param operatorSet The operatorSet to get the member count for */ - function getNumOperatorsInOperatorSet(OperatorSet memory operatorSet) external view returns (uint256) { + function getNumOperatorsInOperatorSet( + OperatorSet memory operatorSet + ) external view returns (uint256) { return _operatorSetMembers[_encodeOperatorSet(operatorSet)].length(); } @@ -908,7 +906,9 @@ contract AVSDirectory is * @notice Returns the total number of operator sets an operator is registered to. * @param operator The operator address to query. */ - function inTotalOperatorSets(address operator) external view returns (uint256) { + function inTotalOperatorSets( + address operator + ) external view returns (uint256) { return _operatorSetsMemberOf[operator].length(); } @@ -924,20 +924,23 @@ contract AVSDirectory is /** * @param operator the operator to get the slashable magnitude for * @param strategies the strategies to get the slashable magnitude for - * + * * @return operatorSets the operator sets the operator is a member of and the current slashable magnitudes for each strategy */ function getCurrentSlashableMagnitudes( address operator, IStrategy[] calldata strategies ) external view returns (OperatorSet[] memory, uint64[][] memory) { - OperatorSet[] memory operatorSets = getOperatorSetsOfOperator(operator, 0, _operatorSetsMemberOf[operator].length()); + OperatorSet[] memory operatorSets = + getOperatorSetsOfOperator(operator, 0, _operatorSetsMemberOf[operator].length()); uint64[][] memory slashableMagnitudes = new uint64[][](strategies.length); for (uint256 i = 0; i < strategies.length; ++i) { slashableMagnitudes[i] = new uint64[](operatorSets.length); for (uint256 j = 0; j < operatorSets.length; ++j) { slashableMagnitudes[i][j] = uint64( - _magnitudeUpdate[operator][strategies[i]][_encodeOperatorSet(operatorSets[j])].upperLookupLinear(uint32(block.timestamp)) + _magnitudeUpdate[operator][strategies[i]][_encodeOperatorSet(operatorSets[j])].upperLookupLinear( + uint32(block.timestamp) + ) ); } } @@ -948,7 +951,7 @@ contract AVSDirectory is * @param operator the operator to get the slashable magnitude for * @param strategies the strategies to get the slashable magnitude for * @param timestamp the timestamp to get the slashable magnitude for - * + * * @return operatorSets the operator sets the operator is a member of and the slashable magnitudes for each strategy */ function getSlashableMagnitudes( @@ -956,13 +959,16 @@ contract AVSDirectory is IStrategy[] calldata strategies, uint32 timestamp ) external view returns (OperatorSet[] memory, uint64[][] memory) { - OperatorSet[] memory operatorSets = getOperatorSetsOfOperator(operator, 0, _operatorSetsMemberOf[operator].length()); + OperatorSet[] memory operatorSets = + getOperatorSetsOfOperator(operator, 0, _operatorSetsMemberOf[operator].length()); uint64[][] memory slashableMagnitudes = new uint64[][](strategies.length); for (uint256 i = 0; i < strategies.length; ++i) { slashableMagnitudes[i] = new uint64[](operatorSets.length); for (uint256 j = 0; j < operatorSets.length; ++j) { slashableMagnitudes[i][j] = uint64( - _magnitudeUpdate[operator][strategies[i]][_encodeOperatorSet(operatorSets[j])].upperLookupRecent(timestamp) + _magnitudeUpdate[operator][strategies[i]][_encodeOperatorSet(operatorSets[j])].upperLookupRecent( + timestamp + ) ); } } @@ -1034,8 +1040,10 @@ contract AVSDirectory is IStrategy strategy, uint16 numToComplete ) external view returns (uint64) { - (uint64 freeMagnitudeToAdd,) = _getPendingFreeMagnitude(operator, strategy, numToComplete); - return freeMagnitude[operator][strategy] + freeMagnitudeToAdd; + OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][strategy]; + (, uint64 freeMagnitudeToAdd) = + _getPendingFreeMagnitude(operator, strategy, numToComplete, info.nextPendingFreeMagnitudeIndex); + return info.freeMagnitude + freeMagnitudeToAdd; } /// @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days @@ -1047,7 +1055,10 @@ contract AVSDirectory is } /// @notice Returns the total magnitude of an operator for a given set of strategies - function getTotalMagnitudes(address operator, IStrategy[] calldata strategies) external view returns (uint64[] memory) { + function getTotalMagnitudes( + address operator, + IStrategy[] calldata strategies + ) external view returns (uint64[] memory) { uint64[] memory totalMagnitudes = new uint64[](strategies.length); for (uint256 i = 0; i < strategies.length;) { (bool exists, uint32 key, uint224 value) = _totalMagnitudeUpdate[operator][strategies[i]].latestCheckpoint(); @@ -1072,11 +1083,8 @@ contract AVSDirectory is ) external view returns (uint64[] memory) { uint64[] memory totalMagnitudes = new uint64[](strategies.length); for (uint256 i = 0; i < strategies.length;) { - ( - uint224 value, - uint256 pos, - uint256 length - ) = _totalMagnitudeUpdate[operator][strategies[i]].upperLookupRecentWithPos(timestamp); + (uint224 value, uint256 pos, uint256 length) = + _totalMagnitudeUpdate[operator][strategies[i]].upperLookupRecentWithPos(timestamp); // if there is no existing total magnitude checkpoint if (value != 0 || pos != 0) { @@ -1202,20 +1210,26 @@ contract AVSDirectory is } /// @notice Returns an EIP-712 encoded hash struct. - function _calculateDigestHash(bytes32 structHash) internal view returns (bytes32) { + function _calculateDigestHash( + bytes32 structHash + ) internal view returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", _calculateDomainSeparator(), structHash)); } /// @dev Returns an `OperatorSet` encoded into a 32-byte value. /// @param operatorSet The `OperatorSet` to encode. - function _encodeOperatorSet(OperatorSet memory operatorSet) internal pure returns (bytes32) { + function _encodeOperatorSet( + OperatorSet memory operatorSet + ) internal pure returns (bytes32) { return bytes32(abi.encodePacked(operatorSet.avs, uint96(operatorSet.operatorSetId))); } /// @dev Returns an `OperatorSet` decoded from an encoded 32-byte value. /// @param encoded The encoded `OperatorSet` to decode. /// @dev Assumes `encoded` is encoded via `_encodeOperatorSet(operatorSet)`. - function _decodeOperatorSet(bytes32 encoded) internal pure returns (OperatorSet memory) { + function _decodeOperatorSet( + bytes32 encoded + ) internal pure returns (OperatorSet memory) { return OperatorSet({ avs: address(uint160(uint256(encoded) >> 96)), operatorSetId: uint32(uint256(encoded) & type(uint96).max) diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index cca773e92..e77bfc56f 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/AVSDirectoryStorage.sol @@ -72,20 +72,18 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { /// @notice Mapping: operator => strategy => operatorSet (encoded) => checkpointed magnitude mapping(address => mapping(IStrategy => mapping(bytes32 => Checkpoints.History))) internal _magnitudeUpdate; - /// @notice Mapping: operator => strategy => free available magnitude that can be allocated to operatorSets - /// Decrements whenever allocations take place and increments when deallocations are completed - mapping(address => mapping(IStrategy => uint64)) public freeMagnitude; + /// @notice Mapping: operator => strategy => OperatorMagnitudeInfo to keep track of info regarding pending magnitude allocations. + mapping(address => mapping(IStrategy => OperatorMagnitudeInfo)) public operatorMagnitudeInfo; /// @notice Mapping: operator => strategy => PendingFreeMagnitude[] to keep track of pending free magnitude from deallocations mapping(address => mapping(IStrategy => PendingFreeMagnitude[])) internal _pendingFreeMagnitude; - /// @notice Mapping: operator => strategy => index pointing to next pendingFreeMagnitude to complete and add to freeMagnitude - mapping(address => mapping(IStrategy => uint256)) internal _nextPendingFreeMagnitudeIndex; - /// @notice Mapping: operator => strategy => operatorSet (encoded) => list of queuedDeallocation indices mapping(address => mapping(IStrategy => mapping(bytes32 => uint256[]))) internal _queuedDeallocationIndices; - constructor(IDelegationManager _delegation) { + constructor( + IDelegationManager _delegation + ) { delegation = _delegation; } From 4b56eafd018d1aa561cd2e242d40a8e3f2a2f0f6 Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Wed, 4 Sep 2024 09:23:18 -0700 Subject: [PATCH 16/47] chore: add missing deploy script (#725) * chore: add missing deploy script * chore: delete src files --- .../operatorSets/DeployStrategies.s.sol | 80 +++++++++++++++++++ script/deploy/local/Deploy_From_Scratch.s.sol | 2 +- 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 script/deploy/devnet/operatorSets/DeployStrategies.s.sol diff --git a/script/deploy/devnet/operatorSets/DeployStrategies.s.sol b/script/deploy/devnet/operatorSets/DeployStrategies.s.sol new file mode 100644 index 000000000..da3222c33 --- /dev/null +++ b/script/deploy/devnet/operatorSets/DeployStrategies.s.sol @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; +import "../../../utils/ExistingDeploymentParser.sol"; + +// # To load the variables in the .env file +// source .env + +// # To deploy and verify our contract +contract DeployStrategies is ExistingDeploymentParser { + + function run() external { + _parseDeployedContracts("script/output/devnet/M2_from_scratch_deployment_data.json"); + + vm.startBroadcast(); + StrategyDeployer strategyDeployer = new StrategyDeployer( + executorMultisig, + address(baseStrategyImplementation) + ); + uint256 batches = 1; + uint256 batchSize = 100; + + IStrategy[] memory strategies = new IStrategy[](batchSize * batches); + bool[] memory falses = new bool[](batchSize); + + for (uint256 i = 0; i < batches; i++) { + IStrategy[] memory strategiesJustDeployed = strategyDeployer.createManyStrategies(batchSize); + for (uint256 j = 0; j < batchSize; j++) { + strategies[i * batchSize + j] = strategiesJustDeployed[j]; + } + strategyManager.addStrategiesToDepositWhitelist(strategiesJustDeployed, falses); + } + + vm.stopBroadcast(); + + address[] memory strategyAddresses; + assembly { + strategyAddresses := strategies + } + string memory deployed_strategies = vm.serializeAddress("", "strategies", strategyAddresses); + + vm.writeJson(deployed_strategies, "script/output/devnet/deployed_strategies.json"); + } +} + + +contract StrategyDeployer { + address immutable beneficiary; + address immutable baseStrategyImplementation; + + constructor(address _beneficiary, address _baseStrategyImplementation) { + beneficiary = _beneficiary; + baseStrategyImplementation = _baseStrategyImplementation; + } + + function createManyStrategies(uint256 numStrategies) external returns(IStrategy[] memory) { + IStrategy[] memory strategies = new IStrategy[](numStrategies); + for (uint256 i = 0; i < numStrategies; i++) { + // create a strategy + strategies[i] = + StrategyBaseTVLLimits( + address( + new TransparentUpgradeableProxy( + address(baseStrategyImplementation), + address(1), + abi.encodeWithSelector( + StrategyBaseTVLLimits.initialize.selector, + type(uint256).max, + type(uint256).max, + new ERC20PresetFixedSupply("Test", "TST", uint256(type(uint128).max), beneficiary), + address(1) + ) + ) + ) + ); + } + return strategies; + } +} \ No newline at end of file diff --git a/script/deploy/local/Deploy_From_Scratch.s.sol b/script/deploy/local/Deploy_From_Scratch.s.sol index c1e417262..e6ac94f83 100644 --- a/script/deploy/local/Deploy_From_Scratch.s.sol +++ b/script/deploy/local/Deploy_From_Scratch.s.sol @@ -639,4 +639,4 @@ contract DeployFromScratch is Script, Test { require(setMaxDeposits == maxDeposits, "setMaxDeposits not set correctly"); } } -} \ No newline at end of file +} From 8af9d89bab05ba97b60d7a6d94785c877c4ecd27 Mon Sep 17 00:00:00 2001 From: "clandestine.eth" <96172957+0xClandestine@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:43:06 -0400 Subject: [PATCH 17/47] fix: add missing struct defintion --- src/contracts/core/AVSDirectory.sol | 2 +- src/contracts/interfaces/IAVSDirectory.sol | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index f5187d559..7e765ab40 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -1041,7 +1041,7 @@ contract AVSDirectory is uint16 numToComplete ) external view returns (uint64) { OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][strategy]; - (, uint64 freeMagnitudeToAdd) = + (uint64 freeMagnitudeToAdd, ) = _getPendingFreeMagnitude(operator, strategy, numToComplete, info.nextPendingFreeMagnitudeIndex); return info.freeMagnitude + freeMagnitudeToAdd; } diff --git a/src/contracts/interfaces/IAVSDirectory.sol b/src/contracts/interfaces/IAVSDirectory.sol index aadd2a5c2..7aaa564c6 100644 --- a/src/contracts/interfaces/IAVSDirectory.sol +++ b/src/contracts/interfaces/IAVSDirectory.sol @@ -54,6 +54,16 @@ interface IAVSDirectory is ISignatureUtils { uint32 completableTimestamp; } + /** + * @notice Struct containing info regarding free allocatable magnitude. + * @param nextPendingFreeMagnitudeIndex The next available update index. + * @param freeMagnitude The total amount of free allocatable magnitude. + */ + struct OperatorMagnitudeInfo { + uint192 nextPendingFreeMagnitudeIndex; + uint64 freeMagnitude; + } + /// @notice Emitted when an operator set is created by an AVS. event OperatorSetCreated(OperatorSet operatorSet); From a2e26c6e3f3a3a16e0ceac5ad7e0c0c7a2ddd1c2 Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Sat, 7 Sep 2024 12:33:30 -0400 Subject: [PATCH 18/47] feat: refactor to staker scaling factors --- src/contracts/core/AVSDirectory.sol | 107 +++- src/contracts/core/DelegationManager.sol | 554 ++++++++++++------ .../core/DelegationManagerStorage.sol | 8 +- src/contracts/core/StrategyManager.sol | 144 ++--- src/contracts/core/StrategyManagerStorage.sol | 8 +- src/contracts/interfaces/IAVSDirectory.sol | 49 +- .../interfaces/IDelegationManager.sol | 76 +-- src/contracts/interfaces/IEigenPodManager.sol | 13 +- src/contracts/interfaces/IStrategyManager.sol | 20 +- src/contracts/libraries/ShareScalingLib.sol | 121 ---- src/contracts/libraries/SlashingConstants.sol | 18 + src/contracts/pods/EigenPodManager.sol | 137 ++--- src/contracts/pods/EigenPodManagerStorage.sol | 8 +- src/contracts/strategies/StrategyBase.sol | 2 +- src/test/EigenLayerTestHelper.t.sol | 2 +- src/test/harnesses/EigenPodManagerWrapper.sol | 4 +- src/test/integration/IntegrationBase.t.sol | 8 +- src/test/integration/users/User.t.sol | 2 +- src/test/mocks/AVSDirectoryMock.sol | 22 +- src/test/mocks/DelegationManagerMock.sol | 37 +- src/test/mocks/EigenPodManagerMock.sol | 6 +- src/test/mocks/StrategyManagerMock.sol | 7 +- src/test/unit/EigenPodManagerUnit.t.sol | 68 +-- src/test/unit/StrategyManagerUnit.t.sol | 126 ++-- 24 files changed, 833 insertions(+), 714 deletions(-) delete mode 100644 src/contracts/libraries/ShareScalingLib.sol create mode 100644 src/contracts/libraries/SlashingConstants.sol diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 7e765ab40..c4e88be43 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 "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; -import "../libraries/ShareScalingLib.sol"; +import "../libraries/SlashingConstants.sol"; import "./AVSDirectoryStorage.sol"; contract AVSDirectory is @@ -29,9 +29,6 @@ contract AVSDirectory is /// @dev BIPS factor for slashable bips uint256 internal constant BIPS_FACTOR = 10_000; - /// @dev Delay before deallocations are completable and can be added back into freeMagnitude - uint32 public constant DEALLOCATION_DELAY = 17.5 days; - /// @dev Maximum number of pending updates that can be queued for allocations/deallocations uint256 public constant MAX_PENDING_UPDATES = 1; @@ -295,7 +292,7 @@ contract AVSDirectory is // effect timestamp for allocations to take effect. This is configurable by operators uint32 effectTimestamp = uint32(block.timestamp) + details.allocationDelay; // completable timestamp for deallocations - uint32 completableTimestamp = uint32(block.timestamp) + DEALLOCATION_DELAY; + uint32 completableTimestamp = uint32(block.timestamp) + SlashingConstants.DEALLOCATION_DELAY; for (uint256 i = 0; i < allocations.length; ++i) { // 1. For the given (operator,strategy) clear all pending free magnitude for the strategy and update freeMagnitude @@ -382,18 +379,16 @@ contract AVSDirectory is uint64 currentMagnitude = uint64( _magnitudeUpdate[operator][strategies[i]][operatorSetKey].upperLookupRecent(uint32(block.timestamp)) ); - // TODO: if we don't continue here we get into weird "total/free magnitude" not initialized cases. Is this ok? - if (currentMagnitude == 0) { - continue; + // slash nonzero current magnitude + if (currentMagnitude != 0) { + /// TODO: add wrapping library for rounding up for slashing accounting + slashedMagnitude = uint64(uint256(bipsToSlash) * uint256(currentMagnitude) / BIPS_FACTOR); + + _magnitudeUpdate[operator][strategies[i]][operatorSetKey].decrementAtAndFutureCheckpoints({ + key: uint32(block.timestamp), + decrementValue: slashedMagnitude + }); } - - /// TODO: add wrapping library for rounding up for slashing accounting - slashedMagnitude = uint64(uint256(bipsToSlash) * uint256(currentMagnitude) / BIPS_FACTOR); - - _magnitudeUpdate[operator][strategies[i]][operatorSetKey].decrementAtAndFutureCheckpoints({ - key: uint32(block.timestamp), - decrementValue: slashedMagnitude - }); } // 2. if there are any pending deallocations then need to update and decrement if they fall within slashable window @@ -768,9 +763,9 @@ contract AVSDirectory is function _getLatestTotalMagnitude(address operator, IStrategy strategy) internal returns (uint64) { (bool exists,, uint224 totalMagnitude) = _totalMagnitudeUpdate[operator][strategy].latestCheckpoint(); if (!exists) { - totalMagnitude = ShareScalingLib.INITIAL_TOTAL_MAGNITUDE; + totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; _totalMagnitudeUpdate[operator][strategy].push({key: uint32(block.timestamp), value: totalMagnitude}); - operatorMagnitudeInfo[operator][strategy].freeMagnitude = ShareScalingLib.INITIAL_TOTAL_MAGNITUDE; + operatorMagnitudeInfo[operator][strategy].freeMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; } return uint64(totalMagnitude); @@ -1051,19 +1046,24 @@ contract AVSDirectory is OperatorSetRegistrationStatus memory registrationStatus = operatorSetStatus[operatorSet.avs][operator][operatorSet.operatorSetId]; return isMember(operator, operatorSet) - || registrationStatus.lastDeregisteredTimestamp + DEALLOCATION_DELAY >= block.timestamp; + || registrationStatus.lastDeregisteredTimestamp + SlashingConstants.DEALLOCATION_DELAY >= block.timestamp; } - /// @notice Returns the total magnitude of an operator for a given set of strategies + /** + * @notice Returns the current total magnitudes of an operator for a given set of strategies + * @param operator the operator to get the total magnitude for + * @param strategies the strategies to get the total magnitudes for + * @return totalMagnitudes the total magnitudes for each strategy + */ function getTotalMagnitudes( address operator, IStrategy[] calldata strategies ) external view returns (uint64[] memory) { uint64[] memory totalMagnitudes = new uint64[](strategies.length); for (uint256 i = 0; i < strategies.length;) { - (bool exists, uint32 key, uint224 value) = _totalMagnitudeUpdate[operator][strategies[i]].latestCheckpoint(); + (bool exists, , uint224 value) = _totalMagnitudeUpdate[operator][strategies[i]].latestCheckpoint(); if (!exists) { - totalMagnitudes[i] = ShareScalingLib.INITIAL_TOTAL_MAGNITUDE; + totalMagnitudes[i] = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; } else { totalMagnitudes[i] = uint64(value); } @@ -1075,7 +1075,13 @@ contract AVSDirectory is return totalMagnitudes; } - /// @notice Returns the total magnitude of an operator for a given set of strategies at a given timestamp + /** + * @notice Returns the total magnitudes of an operator for a given set of strategies at a given timestamp + * @param operator the operator to get the total magnitude for + * @param strategies the strategies to get the total magnitudes for + * @param timestamp the timestamp to get the total magnitudes at + * @return totalMagnitudes the total magnitudes for each strategy + */ function getTotalMagnitudesAtTimestamp( address operator, IStrategy[] calldata strategies, @@ -1083,12 +1089,12 @@ contract AVSDirectory is ) external view returns (uint64[] memory) { uint64[] memory totalMagnitudes = new uint64[](strategies.length); for (uint256 i = 0; i < strategies.length;) { - (uint224 value, uint256 pos, uint256 length) = + (uint224 value, uint256 pos, ) = _totalMagnitudeUpdate[operator][strategies[i]].upperLookupRecentWithPos(timestamp); // if there is no existing total magnitude checkpoint - if (value != 0 || pos != 0) { - totalMagnitudes[i] = ShareScalingLib.INITIAL_TOTAL_MAGNITUDE; + if (value == 0 && pos == 0) { + totalMagnitudes[i] = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; } else { totalMagnitudes[i] = uint64(value); } @@ -1100,6 +1106,55 @@ contract AVSDirectory is return totalMagnitudes; } + /** + * @notice Returns the current total magnitude of an operator for a given strategy + * @param operator the operator to get the total magnitude for + * @param strategy the strategy to get the total magnitude for + * @return totalMagnitude the total magnitude for the strategy + */ + function getTotalMagnitude( + address operator, + IStrategy strategy + ) external view returns (uint64) { + uint64 totalMagnitude; + (bool exists, , uint224 value) = _totalMagnitudeUpdate[operator][strategy].latestCheckpoint(); + if (!exists) { + totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + } else { + totalMagnitude = uint64(value); + } + + return totalMagnitude; + } + + /** + * @notice Returns the total magnitude of an operator for a given strategy at a given timestamp + * @param operator the operator to get the total magnitude for + * @param strategy the strategy to get the total magnitude for + * @param timestamp the timestamp to get the total magnitude at + * @return totalMagnitude the total magnitude for the strategy + */ + function getTotalMagnitudeAtTimestamp( + address operator, + IStrategy strategy, + uint32 timestamp + ) external view returns (uint64) { + uint64 totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + ( + uint224 value, + uint256 pos, + ) = _totalMagnitudeUpdate[operator][strategy].upperLookupRecentWithPos(timestamp); + + // if there is no existing total magnitude checkpoint + if (value == 0 && pos == 0) { + totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + } else { + totalMagnitude = uint64(value); + } + + return totalMagnitude; + } + // /** // * @notice fetches the minimum slashable shares for a certain operator and operatorSet for a list of strategies // * from the current timestamp until the given timestamp diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index cbdc39023..9e45bd650 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -6,7 +6,7 @@ import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol"; import "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; -import "../libraries/ShareScalingLib.sol"; +import "../libraries/SlashingConstants.sol"; import "./DelegationManagerStorage.sol"; /** @@ -246,9 +246,9 @@ contract DelegationManager is UnauthorizedCaller() ); - // Gather strategies and scaled shares to remove from staker/operator during undelegation + // Gather strategies and shares from the staker. Caluclate scaled shares to remove from operator during undelegation // Undelegation removes ALL currently-active strategies and shares - (IStrategy[] memory strategies, uint256[] memory scaledShares) = getDelegatableScaledShares(staker); + (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableShares(staker); // emit an event if this action was not initiated by the staker themselves if (msg.sender != staker) { @@ -264,18 +264,23 @@ contract DelegationManager is withdrawalRoots = new bytes32[](0); } else { withdrawalRoots = new bytes32[](strategies.length); + uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); + for (uint256 i = 0; i < strategies.length; i++) { IStrategy[] memory singleStrategy = new IStrategy[](1); - uint256[] memory singleScaledShare = new uint256[](1); + uint256[] memory singleShare = new uint256[](1); + uint64[] memory singleTotalMagnitude = new uint64[](1); singleStrategy[0] = strategies[i]; - singleScaledShare[0] = scaledShares[i]; + singleShare[0] = shares[i]; + singleTotalMagnitude[0] = totalMagnitudes[i]; withdrawalRoots[i] = _removeSharesAndQueueWithdrawal({ staker: staker, operator: operator, withdrawer: staker, strategies: singleStrategy, - scaledShares: singleScaledShare + sharesToWithdraw: singleShare, + totalMagnitudes: singleTotalMagnitude }); } } @@ -303,13 +308,9 @@ contract DelegationManager is ); require(queuedWithdrawalParams[i].withdrawer == msg.sender, WithdrawerNotStaker()); - // Withdrawer inputs the number of real Strategy shares they expect to withdraw, - // convert accordingly to scaledShares in storage - uint256[] memory scaledShares = ShareScalingLib.scaleShares( - avsDirectory, + uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes( operator, - queuedWithdrawalParams[i].strategies, - queuedWithdrawalParams[i].shares + queuedWithdrawalParams[i].strategies ); // Remove shares from staker's strategies and place strategies/shares in queue. @@ -320,7 +321,8 @@ contract DelegationManager is operator: operator, withdrawer: queuedWithdrawalParams[i].withdrawer, strategies: queuedWithdrawalParams[i].strategies, - scaledShares: scaledShares + sharesToWithdraw: queuedWithdrawalParams[i].shares, + totalMagnitudes: totalMagnitudes }); } return withdrawalRoots; @@ -364,53 +366,82 @@ contract DelegationManager is } /** - * @notice Increases a staker's delegated share balance in a strategy. - * @param staker The address to increase the delegated scaled shares for their operator. - * @param strategy The strategy in which to increase the delegated scaled shares. - * @param scaledShares The number of scaled shares to increase. + * @notice Increases a staker's delegated share balance in a strategy. Note that before adding to operator shares, + * the delegated shares are scaled according to the operator's total magnitude as part of slashing accounting. + * The staker's scaling factor is updated here. + * @param staker The address to increase the delegated shares for their operator. + * @param strategy The strategy in which to increase the delegated shares. + * @param existingShares The number of shares the staker already has in the strategy. This is the shares amount stored in the + * StrategyManager/EigenPodManager for the staker's shares. + * @param addedShares The number of shares to added to the staker's shares in the strategy. This amount will be scaled prior to adding + * to the operator's scaled shares. * - * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated shares in `strategy` by `scaledShares`. Otherwise does nothing. + * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated scaled shares in `strategy` after scaling `shares`. + * Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ - function increaseDelegatedScaledShares( + function increaseDelegatedShares( address staker, IStrategy strategy, - uint256 scaledShares + uint256 existingShares, + uint256 addedShares ) external onlyStrategyManagerOrEigenPodManager { // if the staker is delegated to an operator if (isDelegated(staker)) { address operator = delegatedTo[staker]; + uint64 totalMagnitude = avsDirectory.getTotalMagnitude(operator, strategy); + + // update stakers scaling deposit scaling factor + uint256 newStakerScalingFactor = _calculateStakerScalingFactor({ + staker: staker, + strategy: strategy, + totalMagnitude: totalMagnitude, + existingShares: existingShares, + addedShares: addedShares + }); + stakerScalingFactors[staker][strategy] = newStakerScalingFactor; // add strategy shares to delegate's shares - _increaseOperatorScaledShares({operator: operator, staker: staker, strategy: strategy, scaledShares: scaledShares}); + _increaseOperatorScaledShares({ + operator: operator, + staker: staker, + strategy: strategy, + shares: addedShares, + totalMagnitude: totalMagnitude + }); } } /** - * @notice Decreases a staker's delegated share balance in a strategy. + * @notice Decreases a staker's delegated share balance in a strategy. Note that before removing from operator shares, + * the delegated shares are scaled according to the operator's total magnitude as part of slashing accounting. Unlike + * `increaseDelegatedShares`, the staker's scaling factor is not updated here. * @param staker The address to increase the delegated scaled shares for their operator. * @param strategy The strategy in which to decrease the delegated scaled shares. - * @param scaledShares The number of scaled shares to decrease. + * @param removedShares The number of shares to decremented for the strategy in the + * StrategyManager/EigenPodManager * * @dev *If the staker is actively delegated*, then decreases the `staker`'s delegated scaled shares in `strategy` by `scaledShares`. Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ - function decreaseDelegatedScaledShares( + function decreaseDelegatedShares( address staker, IStrategy strategy, - uint256 scaledShares + uint256 removedShares ) external onlyStrategyManagerOrEigenPodManager { // if the staker is delegated to an operator if (isDelegated(staker)) { address operator = delegatedTo[staker]; - // forgefmt: disable-next-item + uint64 totalMagnitude = avsDirectory.getTotalMagnitude(operator, strategy); + // subtract strategy shares from delegated scaled shares _decreaseOperatorScaledShares({ - operator: operator, - staker: staker, - strategy: strategy, - scaledShares: scaledShares + operator: operator, + staker: staker, + strategy: strategy, + shares: removedShares, + totalMagnitude: totalMagnitude }); } } @@ -553,41 +584,31 @@ contract DelegationManager is delegatedTo[staker] = operator; emit StakerDelegated(staker, operator); - (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableScaledShares(staker); - - // NOTE: technically the function above returns scaled shares, so it needs to be descaled before scaling to the - // the new operator according to their totalMagnitude. However, since the staker is not delegated, - // scaledShares = shares so we can skip descaling and read these as descaled shares. - uint256[] memory scaledShares = ShareScalingLib.scaleShares(avsDirectory, operator, strategies, shares); + // read staker's delegatable shares and strategies to add to operator's scaled shares + // and also update the staker scaling factor for each strategy + (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableShares(staker); + uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); for (uint256 i = 0; i < strategies.length;) { + // update stakers scaling deposit scaling factor + uint256 newStakerScalingFactor = _calculateStakerScalingFactor({ + staker: staker, + strategy: strategies[i], + totalMagnitude: totalMagnitudes[i], + existingShares: 0, + addedShares: shares[i] + }); + stakerScalingFactors[staker][strategies[i]] = newStakerScalingFactor; + // forgefmt: disable-next-item _increaseOperatorScaledShares({ operator: operator, staker: staker, strategy: strategies[i], - scaledShares: scaledShares[i] + shares: shares[i], + totalMagnitude: totalMagnitudes[i] }); - // stakerStrategyScaledShares(staker, strategies[i]) needs to be updated to be equal to newly scaled shares. - // we take the difference between the shares and the scaledShares to update the staker's scaledShares. The key property - // here is that scaledShares should be >= shares and can never be less than shares due to totalMagnitude being - // a monotonically decreasing value (see ShareScalingLib.scaleShares for more info). - // The exact same property applies to the EigenPodManager and podOwnerScaledShares where real ETH shares are scaled based on - // the delegated operator (if any) prior to being stored as scaledShares in the EigenPodManager. - if (shares[i] < scaledShares[i]) { - if (strategies[i] == beaconChainETHStrategy) { - eigenPodManager.addScaledShares(staker, scaledShares[i] - shares[i]); - } else { - strategyManager.addScaledShares( - staker, - strategies[i].underlyingToken(), //TODO possibly remove this from the interface - strategies[i], - scaledShares[i] - shares[i] - ); - } - } - unchecked { ++i; } @@ -595,10 +616,12 @@ contract DelegationManager is } /** - * @dev This function "descales" the scaledShares according to the totalMagnitude at the time of withdrawal completion. - * This will apply any slashing that has occurred since the scaledShares were initially set in storage. - * If receiveAsTokens is true, then these descaled shares will be withdrawn as tokens. - * If receiveAsTokens is false, then they will be rescaled according to the current operator the staker is delegated to, and added back to the operator's scaledShares. + * @dev This function completes a queued withdrawal for a staker. + * This will apply any slashing that has occurred since the scaledShares were initially set in the Withdrawal struct up + * until the totalMagnitude at completion time. + * If receiveAsTokens is true, then these shares will be withdrawn as tokens. + * If receiveAsTokens is false, then they will be redeposited according to the current operator the staker is delegated to, + * and added back to the operator's scaledShares. */ function _completeQueuedWithdrawal( Withdrawal calldata withdrawal, @@ -623,30 +646,27 @@ contract DelegationManager is "DelegationManager._completeQueuedWithdrawal: input length mismatch" ); - // read delegated operator for scaling and adding shares back if needed - address currentOperator = delegatedTo[msg.sender]; - // descale shares to get the "real" strategy share values of the withdrawal - uint256[] memory descaledShares = ShareScalingLib.descaleSharesAtTimestamp( - avsDirectory, - withdrawal.delegatedTo, - withdrawal.strategies, - withdrawal.scaledShares, - withdrawal.startTimestamp + avsDirectory.DEALLOCATION_DELAY() - ); + // read delegated operator's totalMagnitudes at time of withdrawal to scale shares again if any slashing has occurred + // during withdrawal delay period + uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudesAtTimestamp({ + operator: withdrawal.delegatedTo, + strategies: withdrawal.strategies, + timestamp: withdrawal.startTimestamp + SlashingConstants.DEALLOCATION_DELAY + }); if (receiveAsTokens) { - // complete the withdrawal by converting descaled shares to tokens + // complete the withdrawal by converting shares to tokens _completeReceiveAsTokens( withdrawal, tokens, - descaledShares + totalMagnitudes ); } else { // Award shares back in StrategyManager/EigenPodManager. _completeReceiveAsShares( withdrawal, tokens, - descaledShares + totalMagnitudes ); } @@ -655,11 +675,15 @@ contract DelegationManager is emit WithdrawalCompleted(withdrawalRoot); } - /// TODO: natspec + /** + * @dev This function completes a queued withdrawal for a staker by converting shares to tokens and transferring to the withdrawer. + * This will apply any slashing that has occurred since the scaledShares were initially set in the Withdrawal struct + * by reading the original delegated operator's totalMagnitude at the time of withdrawal completion. + */ function _completeReceiveAsTokens( Withdrawal calldata withdrawal, IERC20[] calldata tokens, - uint256[] memory descaledShares + uint64[] memory totalMagnitudes ) internal { // Finalize action by converting scaled shares to tokens for each strategy, or // by re-awarding shares in each strategy. @@ -669,11 +693,16 @@ contract DelegationManager is "DelegationManager._completeReceiveAsTokens: withdrawalDelay period has not yet passed for this strategy" ); + // Take already scaled staker shares and scale again according to current operator totalMagnitude + // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares + // are still susceptible to slashing + uint256 sharesToWithdraw = _calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); + _withdrawSharesAsTokens({ staker: withdrawal.staker, withdrawer: msg.sender, strategy: withdrawal.strategies[i], - shares: descaledShares[i], + shares: sharesToWithdraw, token: tokens[i] }); unchecked { @@ -682,21 +711,20 @@ contract DelegationManager is } } - /// TODO: natspec + /** + * @dev This function completes a queued withdrawal for a staker by receiving them back as shares + * in the StrategyManager/EigenPodManager. If the withdrawer is delegated to an operator, this will also + * increase the operator's scaled shares. + * This will apply any slashing that has occurred since the scaledShares were initially set in the Withdrawal struct + * by reading the original delegated operator's totalMagnitude at the time of withdrawal completion. + */ function _completeReceiveAsShares( Withdrawal calldata withdrawal, IERC20[] calldata tokens, - uint256[] memory descaledShares + uint64[] memory totalMagnitudes ) internal { // read delegated operator for scaling and adding shares back if needed address currentOperator = delegatedTo[msg.sender]; - // We scale shares again to the new totalMagnitude of the currentOperator. - uint256[] memory scaledShares = ShareScalingLib.scaleShares( - avsDirectory, - currentOperator, - withdrawal.strategies, - descaledShares - ); for (uint256 i = 0; i < withdrawal.strategies.length;) { require( @@ -704,6 +732,14 @@ contract DelegationManager is "DelegationManager._completeReceiveAsShares: withdrawalDelay period has not yet passed for this strategy" ); + // Take already scaled staker shares and scale again according to current operator totalMagnitude + // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares + // are still susceptible to slashing + uint256 shares = _calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); + + // store existing shares to calculate new staker scaling factor later + uint256 existingShares; + /** * When awarding podOwnerShares in EigenPodManager, we need to be sure to only give them back to the original podOwner. * Other strategy shares can + will be awarded to the withdrawer. @@ -714,8 +750,10 @@ contract DelegationManager is * Update shares amount depending upon the returned value. * The return value will be lower than the input value in the case where the staker has an existing share deficit */ - uint256 increaseInDelegateableScaledShares = - eigenPodManager.addScaledShares({podOwner: staker, scaledShares: scaledShares[i]}); + ( + shares, + existingShares + ) = eigenPodManager.addShares({podOwner: staker, shares: shares}); address podOwnerOperator = delegatedTo[staker]; // Similar to `isDelegated` logic if (podOwnerOperator != address(0)) { @@ -724,11 +762,12 @@ contract DelegationManager is // the 'staker' here is the address receiving new shares staker: staker, strategy: withdrawal.strategies[i], - scaledShares: increaseInDelegateableScaledShares + shares: shares, + totalMagnitude: totalMagnitudes[i] }); } } else { - strategyManager.addScaledShares(msg.sender, tokens[i], withdrawal.strategies[i], scaledShares[i]); + existingShares = strategyManager.addShares(msg.sender, tokens[i], withdrawal.strategies[i], shares); // Similar to `isDelegated` logic if (currentOperator != address(0)) { _increaseOperatorScaledShares({ @@ -736,26 +775,68 @@ contract DelegationManager is // the 'staker' here is the address receiving new shares staker: msg.sender, strategy: withdrawal.strategies[i], - scaledShares: scaledShares[i] + shares: shares, + totalMagnitude: totalMagnitudes[i] }); } } + + // update stakers scaling deposit scaling factor + uint256 newStakerScalingFactor = _calculateStakerScalingFactor({ + staker: withdrawal.staker, + strategy: withdrawal.strategies[i], + totalMagnitude: totalMagnitudes[i], + existingShares: existingShares, + addedShares: shares + }); + stakerScalingFactors[withdrawal.staker][withdrawal.strategies[i]] = newStakerScalingFactor; + unchecked { ++i; } } } - // @notice Increases `operator`s delegated scaled shares in `strategy` by `scaledShares` and emits an `OperatorSharesIncreased` event - function _increaseOperatorScaledShares(address operator, address staker, IStrategy strategy, uint256 scaledShares) internal { + /** + * @notice Increases `operator`s delegated scaled shares in `strategy` based on staker's added shares and operator's totalMagnitude + * @param operator The operator to increase the delegated scaled shares for + * @param staker The staker to increase the delegated scaled shares for + * @param strategy The strategy to increase the delegated scaled shares for + * @param shares The shares added to the staker in the StrategyManager/EigenPodManager + * @param totalMagnitude The current total magnitude of the operator for the strategy + */ + function _increaseOperatorScaledShares( + address operator, + address staker, + IStrategy strategy, + uint256 shares, + uint64 totalMagnitude + ) internal { + // based on total magnitude, update operators scaled shares + uint256 scaledShares = _scaleShares(shares, totalMagnitude); operatorScaledShares[operator][strategy] += scaledShares; + // TODO: What to do about event wrt scaling? emit OperatorSharesIncreased(operator, staker, strategy, scaledShares); } - // @notice Decreases `operator`s delegated scaled shares in `strategy` by `scaledShares` and emits an `OperatorSharesDecreased` event - function _decreaseOperatorScaledShares(address operator, address staker, IStrategy strategy, uint256 scaledShares) internal { - // This will revert on underflow, so no check needed + /** + * @notice Decreases `operator`s delegated scaled shares in `strategy` based on staker's removed shares and operator's totalMagnitude + * @param operator The operator to decrease the delegated scaled shares for + * @param staker The staker to decrease the delegated scaled shares for + * @param strategy The strategy to decrease the delegated scaled shares for + * @param shares The shares removed from the staker in the StrategyManager/EigenPodManager + * @param totalMagnitude The current total magnitude of the operator for the strategy + */ + function _decreaseOperatorScaledShares( + address operator, + address staker, + IStrategy strategy, + uint256 shares, + uint64 totalMagnitude + ) internal { + // based on total magnitude, decrement operator's scaled shares + uint256 scaledShares = _scaleShares(shares, totalMagnitude); operatorScaledShares[operator][strategy] -= scaledShares; // TODO: What to do about event wrt scaling? emit OperatorSharesDecreased(operator, staker, strategy, scaledShares); @@ -771,14 +852,42 @@ contract DelegationManager is address operator, address withdrawer, IStrategy[] memory strategies, - uint256[] memory scaledShares + uint256[] memory sharesToWithdraw, + uint64[] memory totalMagnitudes ) internal returns (bytes32) { require(staker != address(0), InputAddressZero()); require(strategies.length != 0, InputArrayLengthZero()); + uint256[] memory scaledStakerShares = new uint256[](strategies.length); + // Remove shares from staker and operator // Each of these operations fail if we attempt to remove more shares than exist for (uint256 i = 0; i < strategies.length;) { + + // check sharesToWithdraw is valid + // TODO maybe have a getter to get totalShares for all strategies, like getDelegatableShares + // but for inputted strategies + uint256 totalShares; + if (strategies[i] == beaconChainETHStrategy) { + int256 podShares = eigenPodManager.podOwnerShares(staker); + totalShares = podShares <= 0 ? 0 : uint256(podShares); + } else { + totalShares = strategyManager.stakerStrategyShares(staker, strategies[i]); + } + require( + sharesToWithdraw[i] <= _getWithdrawableShares(staker, strategies[i], totalShares, totalMagnitudes[i]), + "DelegationManager._removeSharesAndQueueWithdrawal: shares to withdraw exceeds withdrawable shares" + ); + // calculate scaledShares to place into queue withdrawal and shares to decrement from SM/EPM + uint256 stakerScalingFactor = _getStakerScalingFactor(staker, strategies[i]); + ( + // shares to decrement from StrategyManager/EigenPodManager + uint256 sharesToDecrement, + // scaledShares for staker to place into queueWithdrawal + uint256 scaledShares + ) = _calculateSharesToQueueWithdraw(sharesToWithdraw[i], stakerScalingFactor, totalMagnitudes[i]); + scaledStakerShares[i] = scaledShares; + // Similar to `isDelegated` logic if (operator != address(0)) { // forgefmt: disable-next-item @@ -786,7 +895,8 @@ contract DelegationManager is operator: operator, staker: staker, strategy: strategies[i], - scaledShares: scaledShares[i] + shares: sharesToWithdraw[i], + totalMagnitude: totalMagnitudes[i] }); } @@ -798,7 +908,7 @@ contract DelegationManager is * shares from the operator to whom the staker is delegated. * It will also revert if the share amount being withdrawn is not a whole Gwei amount. */ - eigenPodManager.removeScaledShares(staker, scaledShares[i]); + eigenPodManager.removeShares(staker, sharesToDecrement); } else { // If thirdPartyTransfersForbidden is set, withdrawer and staker must be the same address require( @@ -806,7 +916,7 @@ contract DelegationManager is WithdrawerNotStaker() ); // this call will revert if `scaledShares[i]` exceeds the Staker's current shares in `strategies[i]` - strategyManager.removeScaledShares(staker, strategies[i], scaledShares[i]); + strategyManager.removeShares(staker, strategies[i], sharesToDecrement); } unchecked { @@ -825,7 +935,7 @@ contract DelegationManager is nonce: nonce, startTimestamp: uint32(block.timestamp), strategies: strategies, - scaledShares: scaledShares + scaledShares: scaledStakerShares }); bytes32 withdrawalRoot = calculateWithdrawalRoot(withdrawal); @@ -848,11 +958,15 @@ contract DelegationManager is uint256 shares, IERC20 token ) internal { - // TODO: rename params if (strategy == beaconChainETHStrategy) { eigenPodManager.withdrawSharesAsTokens({podOwner: staker, destination: withdrawer, shares: shares}); } else { - strategyManager.withdrawSharesAsTokens(withdrawer, strategy, shares, token); + strategyManager.withdrawSharesAsTokens({ + recipient: withdrawer, + strategy: strategy, + shares: shares, + token: token + }); } } @@ -918,6 +1032,118 @@ contract DelegationManager is } } + /** + * + * SLASHING AND SHARES HELPER FUNCTIONS + * + */ + + /** + * @notice helper pure to calculate the scaledShares to store in queue withdrawal + * and the shares to decrement from StrategyManager/EigenPodManager + */ + function _calculateSharesToQueueWithdraw( + uint256 sharesToWithdraw, + uint256 stakerScalingFactor, + uint64 totalMagnitude + ) internal pure returns (uint256 sharesToDecrement, uint256 scaledStakerShares) { + // TODO: DOUBLE CHECK THIS BEHAVIOR + // NOTE that to prevent numerator overflow, the max sharesToWithdraw is + // x*1e36 <= 2^256-1 + // => x <= 1.1579e41 + sharesToDecrement = (sharesToWithdraw * SlashingConstants.PRECISION_FACTOR_SQUARED) / (stakerScalingFactor * totalMagnitude); + scaledStakerShares = sharesToWithdraw * stakerScalingFactor / SlashingConstants.PRECISION_FACTOR; + return (sharesToDecrement, scaledStakerShares); + } + + /** + * @notice helper pure to calculate the shares to complete a withdrawal after slashing + * We use the totalMagnitude of the delegated operator at the time of withdrawal completion to scale the shares + * back to real StrategyManager/EigenPodManager shares + */ + function _calculateSharesToCompleteWithdraw( + uint256 scaledStakerShares, + uint64 totalMagnitudeAtCompletion + ) internal pure returns (uint256 shares) { + shares = scaledStakerShares * totalMagnitudeAtCompletion / SlashingConstants.PRECISION_FACTOR; + } + + /** + * @notice helper pure to return scaledShares given shares and current totalMagnitude. Used for + * adding/removing staker shares from operatorScaledShares + */ + function _scaleShares(uint256 shares, uint64 totalMagnitude) internal pure returns (uint256) { + return shares * SlashingConstants.PRECISION_FACTOR / totalMagnitude; + } + + /** + * @notice helper pure to return real strategy shares given operator scaledShares and current totalMagnitude. + * Used for returning the total delegated shares for an operator and strategy + */ + function _descaleShares(uint256 scaledShares, uint64 totalMagnitude) internal pure returns (uint256) { + return scaledShares * totalMagnitude / SlashingConstants.PRECISION_FACTOR; + } + + /** + * @notice staker scaling factor should be initialized and lower bounded to 1e18 + */ + function _getStakerScalingFactor(address staker, IStrategy strategy) internal view returns (uint256) { + uint256 currStakerScalingFactor = stakerScalingFactors[staker][strategy]; + if (currStakerScalingFactor == 0) { + currStakerScalingFactor = SlashingConstants.PRECISION_FACTOR; + } + return currStakerScalingFactor; + } + + /** + * @notice helper to calculate the new staker scaling factor after adding shares. This is only used + * when a staker is depositing through the StrategyManager or EigenPodManager. A stakers scaling factor + * is only updated when they have new deposits and their shares are being increased. + */ + function _calculateStakerScalingFactor( + address staker, + IStrategy strategy, + uint64 totalMagnitude, + uint256 existingShares, + uint256 addedShares + ) internal view returns (uint256) { + uint256 newStakerScalingFactor; + + if (existingShares == 0) { + // existing shares are 0, meaning no existing delegated shares. In this case, the new staker scaling factor + // is re-initialized to + newStakerScalingFactor = SlashingConstants.PRECISION_FACTOR / (totalMagnitude); + } else { + uint256 currStakerScalingFactor = _getStakerScalingFactor(staker, strategy); + + // TODO: DOUBLE CHECK THIS BEHAVIOR AND OVERFLOWS + // staker scaling factor is initialized to PRECISION_FACTOR(1e18) and totalMagnitude is initialized to INITIAL_TOTAL_MAGNITUDE(1e18) + // and is monotonically decreasing. You can deduce that the newStakerScalingFactor will never decrease to less than the PRECISION_FACTOR + // so this won't round to 0. + newStakerScalingFactor = + (currStakerScalingFactor * existingShares * totalMagnitude / SlashingConstants.PRECISION_FACTOR + + addedShares * SlashingConstants.PRECISION_FACTOR) + / + ((existingShares + addedShares) * totalMagnitude); + } + + return newStakerScalingFactor; + } + + /** + * @notice helper to calculate the withdrawable shares for a staker given their shares and the + * current totalMagnitude. `shares` should be the staker's shares in storage in the StrategyManager/EigenPodManager. + */ + function _getWithdrawableShares( + address staker, + IStrategy strategy, + uint256 shares, + uint64 currTotalMagnitude + ) internal view returns (uint256) { + uint256 stakerScalingFactor = _getStakerScalingFactor(staker, strategy); + return stakerScalingFactor * shares * currTotalMagnitude / SlashingConstants.PRECISION_FACTOR; + } + /** * * VIEW FUNCTIONS @@ -992,64 +1218,10 @@ contract DelegationManager is return _operatorDetails[operator].stakerOptOutWindowBlocks; } - /// @notice a legacy function that returns the operatorShares for an operator and strategy + /// @notice a legacy function that returns the total delegated shares for an operator and strategy function operatorShares(address operator, IStrategy strategy) public view returns (uint256) { - return ShareScalingLib.descaleShares({ - avsDirectory: avsDirectory, - operator: operator, - strategy: strategy, - scaledShares: operatorScaledShares[operator][strategy] - }); - } - - /// @notice Given array of strategies, returns array of scaled shares for the operator - function getOperatorScaledShares( - address operator, - IStrategy[] memory strategies - ) public view returns (uint256[] memory) { - uint256[] memory scaledShares = new uint256[](strategies.length); - for (uint256 i = 0; i < strategies.length; ++i) { - scaledShares[i] = operatorScaledShares[operator][strategies[i]]; - } - return scaledShares; - } - - /// @notice Given array of strategies, returns array of shares for the operator - function getOperatorShares( - address operator, - IStrategy[] memory strategies - ) public view returns (uint256[] memory) { - return ShareScalingLib.descaleShares({ - avsDirectory: avsDirectory, - operator: operator, - strategies: strategies, - scaledShares: getOperatorScaledShares(operator, strategies) - }); - } - - /** - * @notice Given a staker and shares amounts of deposits, return the scaled shares calculated if - * the staker were to deposit. Depends on which operator the staker is delegated to. - */ - function getStakerScaledShares( - address staker, - IStrategy strategy, - uint256 shares - ) public view returns (uint256 scaledShares) { - address operator = delegatedTo[staker]; - if (operator == address(0)) { - // if the staker is not delegated to an operator, return the shares as is - // as no slashing and scaling applied - scaledShares = shares; - } else { - // if the staker is delegated to an operator, scale the shares accordingly - scaledShares = ShareScalingLib.scaleShares({ - avsDirectory: avsDirectory, - operator: operator, - strategy: strategy, - shares: shares - }); - } + uint64 totalMagnitude = avsDirectory.getTotalMagnitude(operator, strategy); + return _descaleShares(operatorScaledShares[operator][strategy], totalMagnitude); } /** @@ -1058,62 +1230,68 @@ contract DelegationManager is * The shares amount returned is the actual amount of Strategy shares the staker would receive (subject * to each strategy's underlying shares to token ratio). */ - function getStakerShares( + function getWithdrawableStakerShares( address staker, - IStrategy strategy, - uint256 scaledShares - ) public view returns (uint256 shares) { + IStrategy[] calldata strategies + ) external view returns (uint256[] memory shares) { address operator = delegatedTo[staker]; - if (operator == address(0)) { - // if the staker is not delegated to an operator, return the shares as is - // as no slashing and scaling applied - shares = scaledShares; - } else { - // if the staker is delegated to an operator, descale the shares accordingly - shares = ShareScalingLib.descaleShares({ - avsDirectory: avsDirectory, - operator: operator, - strategy: strategy, - scaledShares: scaledShares - }); + for (uint256 i = 0; i < strategies.length; ++i) { + // 1. read strategy shares + if (strategies[i] == beaconChainETHStrategy) { + int256 podShares = eigenPodManager.podOwnerShares(staker); + shares[i] = podShares <= 0 ? 0 : uint256(podShares); + } else { + shares[i] = strategyManager.stakerStrategyShares(staker, strategies[i]); + } + + // 2. if the staker is delegated, actual withdrawable shares can be different from what is stored + // in the StrategyManager/EigenPodManager because they could have been slashed + if (operator != address(0)) { + uint64 totalMagnitude = avsDirectory.getTotalMagnitude(operator, strategies[i]); + shares[i] = _getWithdrawableShares(staker, strategies[i], shares[i], totalMagnitude); + } } + return shares; } /** - * @notice Returns the number of actively-delegatable scaled shares a staker has across all strategies. + * @notice Returns the number of actively-delegatable shares a staker has across all strategies. + * NOTE: If you are delegated to an operator and have been slashed, these values won't be your real actual + * delegatable shares! * @dev Returns two empty arrays in the case that the Staker has no actively-delegateable shares. */ - function getDelegatableScaledShares(address staker) public view returns (IStrategy[] memory, uint256[] memory) { - // Get currently active scaled shares and strategies for `staker` - int256 scaledPodShares = eigenPodManager.podOwnerScaledShares(staker); + function getDelegatableShares(address staker) public view returns (IStrategy[] memory, uint256[] memory) { + // Get current StrategyManager/EigenPodManager shares and strategies for `staker` + // If `staker` is already delegated, these may not be the full withdrawable amounts due to slashing + int256 podShares = eigenPodManager.podOwnerShares(staker); (IStrategy[] memory strategyManagerStrats, uint256[] memory strategyManagerShares) = strategyManager.getDeposits(staker); // Has no shares in EigenPodManager, but potentially some in StrategyManager - if (scaledPodShares <= 0) { + if (podShares <= 0) { return (strategyManagerStrats, strategyManagerShares); } IStrategy[] memory strategies; - uint256[] memory scaledShares; + uint256[] memory shares; if (strategyManagerStrats.length == 0) { // Has shares in EigenPodManager, but not in StrategyManager strategies = new IStrategy[](1); - scaledShares = new uint256[](1); + shares = new uint256[](1); strategies[0] = beaconChainETHStrategy; - scaledShares[0] = uint256(scaledPodShares); + shares[0] = uint256(podShares); } else { // Has shares in both -// TODO: make more efficient by resizing array + // TODO: make more efficient by resizing array // 1. Allocate return arrays strategies = new IStrategy[](strategyManagerStrats.length + 1); - scaledShares = new uint256[](strategies.length); + shares = new uint256[](strategies.length); // 2. Place StrategyManager strats/shares in return arrays for (uint256 i = 0; i < strategyManagerStrats.length;) { strategies[i] = strategyManagerStrats[i]; - scaledShares[i] = strategyManagerShares[i]; + shares[i] = strategyManagerShares[i]; unchecked { ++i; @@ -1122,10 +1300,10 @@ contract DelegationManager is // 3. Place EigenPodManager strat/shares in return arrays strategies[strategies.length - 1] = beaconChainETHStrategy; - scaledShares[strategies.length - 1] = uint256(scaledPodShares); + shares[strategies.length - 1] = uint256(podShares); } - return (strategies, scaledShares); + return (strategies, shares); } /** diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index 42df9e3a5..2dbc13ecf 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -34,7 +34,7 @@ abstract contract DelegationManagerStorage is IDelegationManager { */ bytes32 internal _DOMAIN_SEPARATOR; - /// TODO @dev actually make this immutable and add to constructor + /// @notice The AVSDirectory contract for EigenLayer IAVSDirectory public immutable avsDirectory; /// @notice The StrategyManager contract for EigenLayer @@ -121,6 +121,10 @@ abstract contract DelegationManagerStorage is IDelegationManager { */ mapping(IStrategy => uint256) public strategyWithdrawalDelays; + /// @notice Mapping: staker => strategy => scaling factor used to calculate the staker's withdrawable shares in the strategy. + /// This is updated upon each deposit based on the staker's currently delegated operator's totalMagnitude. + mapping(address => mapping(IStrategy => uint256)) public stakerScalingFactors; + /// @notice Mapping: operator => allocation delay (in seconds) for the operator. /// This determines how long it takes for allocations to take effect in the future. Can only be set one time for each operator mapping(address => AllocationDelayDetails) internal _operatorAllocationDelay; @@ -137,5 +141,5 @@ abstract contract DelegationManagerStorage is IDelegationManager { * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ - uint256[38] private __gap; + uint256[37] private __gap; } diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index 88cebefc2..6679cfcab 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -93,7 +93,7 @@ contract StrategyManager is * @param strategy is the specified strategy where deposit is to be made, * @param token is the denomination in which the deposit is to be made, * @param amount is the amount of token to be deposited in the strategy by the staker - * @return scaledShares The amount of new scaled shares in the `strategy` created as part of the action. + * @return shares The amount of new shares in the `strategy` created as part of the action. * @dev The `msg.sender` must have previously approved this contract to transfer at least `amount` of `token` on their behalf. * * WARNING: Depositing tokens that allow reentrancy (eg. ERC-777) into a strategy is not recommended. This can lead to attack vectors @@ -103,8 +103,8 @@ contract StrategyManager is IStrategy strategy, IERC20 token, uint256 amount - ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 scaledShares) { - scaledShares = _depositIntoStrategy(msg.sender, strategy, token, amount); + ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 shares) { + shares = _depositIntoStrategy(msg.sender, strategy, token, amount); } /** @@ -119,7 +119,7 @@ contract StrategyManager is * @param expiry the timestamp at which the signature expires * @param signature is a valid signature from the `staker`. either an ECDSA signature if the `staker` is an EOA, or data to forward * following EIP-1271 if the `staker` is a contract - * @return scaledShares The amount of new scaled shares in the `strategy` created as part of the action. + * @return shares The amount of new shares in the `strategy` created as part of the action. * @dev The `msg.sender` must have previously approved this contract to transfer at least `amount` of `token` on their behalf. * @dev A signature is required for this function to eliminate the possibility of griefing attacks, specifically those * targeting stakers who may be attempting to undelegate. @@ -135,7 +135,7 @@ contract StrategyManager is address staker, uint256 expiry, bytes memory signature - ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 scaledShares) { + ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 shares) { require( !thirdPartyTransfersForbidden[strategy], "StrategyManager.depositIntoStrategyWithSignature: third transfers disabled" @@ -160,34 +160,35 @@ contract StrategyManager is EIP1271SignatureUtils.checkSignature_EIP1271(staker, digestHash, signature); // deposit the tokens (from the `msg.sender`) and credit the new shares to the `staker` - scaledShares = _depositIntoStrategy(staker, strategy, token, amount); + shares = _depositIntoStrategy(staker, strategy, token, amount); } - /// @notice Used by the DelegationManager to remove a Staker's scaled shares from a particular strategy when entering the withdrawal queue - function removeScaledShares(address staker, IStrategy strategy, uint256 scaledShares) external onlyDelegationManager { - _removeScaledShares(staker, strategy, scaledShares); + /// @notice Used by the DelegationManager to remove a Staker's shares from a particular strategy when entering the withdrawal queue + function removeShares(address staker, IStrategy strategy, uint256 shares) external onlyDelegationManager { + _removeShares(staker, strategy, shares); } - /// @notice Used by the DelegationManager to award a Staker some scaled shares that have passed through the withdrawal queue - function addScaledShares( + /// @notice Used by the DelegationManager to award a Staker some shares that have passed through the withdrawal queue + function addShares( address staker, IERC20 token, IStrategy strategy, - uint256 scaledShares - ) external onlyDelegationManager { - _addScaledShares(staker, token, strategy, scaledShares); + uint256 shares + ) external onlyDelegationManager returns (uint256 existingShares) { + uint256 existingShares = _addShares(staker, token, strategy, shares); + return existingShares; } /// @notice Used by the DelegationManager to convert withdrawn shares to tokens and send them to a recipient - /// Assumes that shares being passed in have already been descaled accordingly to account for any slashing + /// Assumes that shares being passed in have already been accounted for any slashing /// and are the `real` shares in the strategy to withdraw function withdrawSharesAsTokens( address recipient, IStrategy strategy, - uint256 strategyShares, + uint256 shares, IERC20 token ) external onlyDelegationManager { - strategy.withdraw(recipient, token, strategyShares); + strategy.withdraw(recipient, token, shares); } /** @@ -260,93 +261,102 @@ contract StrategyManager is // INTERNAL FUNCTIONS /** - * @notice This function adds `scaledShares` for a given `strategy` to the `staker` and runs through the necessary update logic. - * @param staker The address to add scaledShares to + * @notice This function adds `shares` for a given `strategy` to the `staker` and runs through the necessary update logic. + * @param staker The address to add shares to * @param token The token that is being deposited (used for indexing) - * @param strategy The Strategy in which the `staker` is receiving scaledShares - * @param scaledShares The amount of scaled shares to grant to the `staker` - * @dev In particular, this function calls `delegation.increaseDelegatedScaledShares(staker, strategy, scaledShares)` to ensure that all - * delegated scaledShares are tracked, increases the stored share amount in `stakerStrategyScaledShares[staker][strategy]`, and adds `strategy` + * @param strategy The Strategy in which the `staker` is receiving shares + * @param shares The amount of shares to grant to the `staker` + * @dev In particular, this function calls `delegation.increaseDelegatedShares(staker, strategy, shares)` to ensure that all + * delegated shares are tracked, increases the stored share amount in `stakerStrategyShares[staker][strategy]`, and adds `strategy` * to the `staker`'s list of strategies, if it is not in the list already. */ - function _addScaledShares(address staker, IERC20 token, IStrategy strategy, uint256 scaledShares) internal { + function _addShares( + address staker, + IERC20 token, + IStrategy strategy, + uint256 shares + ) internal returns (uint256 existingShares) { // sanity checks on inputs - require(staker != address(0), "StrategyManager._addScaledShares: staker cannot be zero address"); - require(scaledShares != 0, "StrategyManager._addScaledShares: shares should not be zero!"); + require(staker != address(0), "StrategyManager._addShares: staker cannot be zero address"); + require(shares != 0, "StrategyManager._addShares: shares should not be zero!"); - // if they dont have existing scaled shares of this strategy, add it to their strats - if (stakerStrategyScaledShares[staker][strategy] == 0) { + // if they dont have existing shares of this strategy, add it to their strats + if (stakerStrategyShares[staker][strategy] == 0) { require( stakerStrategyList[staker].length < MAX_STAKER_STRATEGY_LIST_LENGTH, - "StrategyManager._addScaledShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH" + "StrategyManager._addShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH" ); stakerStrategyList[staker].push(strategy); } - // add the returned scaled shares to their existing scaled shares for this strategy - stakerStrategyScaledShares[staker][strategy] += scaledShares; + // add the returned shares to their existing shares for this strategy + uint256 existingShares = stakerStrategyShares[staker][strategy]; + stakerStrategyShares[staker][strategy] += shares; - emit Deposit(staker, token, strategy, scaledShares); + emit Deposit(staker, token, strategy, shares); + return existingShares; } /** * @notice Internal function in which `amount` of ERC20 `token` is transferred from `msg.sender` to the Strategy-type contract - * `strategy`, with the resulting scaledShares credited to `staker`. - * @param staker The address that will be credited with the new scaledShares. + * `strategy`, with the resulting shares credited to `staker`. + * @param staker The address that will be credited with the new shares. * @param strategy The Strategy contract to deposit into. * @param token The ERC20 token to deposit. * @param amount The amount of `token` to deposit. - * @return scaledShares The amount of *new* scaled shares in `strategy` that have been credited to the `staker`. + * @return shares The amount of *new* shares in `strategy` that have been credited to the `staker`. */ function _depositIntoStrategy( address staker, IStrategy strategy, IERC20 token, uint256 amount - ) internal onlyStrategiesWhitelistedForDeposit(strategy) returns (uint256 scaledShares) { + ) internal onlyStrategiesWhitelistedForDeposit(strategy) returns (uint256 shares) { // transfer tokens from the sender to the strategy token.safeTransferFrom(msg.sender, address(strategy), amount); // deposit the assets into the specified strategy and get the equivalent amount of shares in that strategy uint256 shares = strategy.deposit(token, amount); - // scale strategy shares before storing - scaledShares = delegation.getStakerScaledShares(staker, strategy, shares); - - // add the returned scaled shares to the staker's existing scaled shares for this strategy - _addScaledShares(staker, token, strategy, scaledShares); + // add the returned shares to the staker's existing shares for this strategy + uint256 existingShares = _addShares(staker, token, strategy, shares); - // Increase scaled shares delegated to operator, if needed - delegation.increaseDelegatedScaledShares(staker, strategy, scaledShares); + // Increase shares delegated to operator, if needed + delegation.increaseDelegatedShares({ + staker: staker, + strategy: strategy, + existingShares: existingShares, + addedShares: shares + }); - return scaledShares; + return shares; } /** - * @notice Decreases the scaled shares that `staker` holds in `strategy` by `scaledSharesAmount`. - * @param staker The address to decrement scaled shares from - * @param strategy The strategy for which the `staker`'s scaled shares are being decremented - * @param scaledSharesAmount The amount of scaled shares to decrement - * @dev If the amount of scaled shares represents all of the staker`s shares in said strategy, + * @notice Decreases the shares that `staker` holds in `strategy` by `sharesAmount`. + * @param staker The address to decrement shares from + * @param strategy The strategy for which the `staker`'s shares are being decremented + * @param sharesAmount The amount of shares to decrement + * @dev If the amount of shares represents all of the staker`s shares in said strategy, * then the strategy is removed from stakerStrategyList[staker] and 'true' is returned. Otherwise 'false' is returned. */ - function _removeScaledShares(address staker, IStrategy strategy, uint256 scaledSharesAmount) internal returns (bool) { + function _removeShares(address staker, IStrategy strategy, uint256 sharesAmount) internal returns (bool) { // sanity checks on inputs - require(scaledSharesAmount != 0, "StrategyManager._removeScaledShares: scaledSharesAmount should not be zero!"); + require(sharesAmount != 0, "StrategyManager._removeShares: sharesAmount should not be zero!"); - //check that the user has sufficient scaled shares - uint256 userShares = stakerStrategyScaledShares[staker][strategy]; + //check that the user has sufficient shares + uint256 userShares = stakerStrategyShares[staker][strategy]; - require(scaledSharesAmount <= userShares, "StrategyManager._removeScaledShares: scaledSharesAmount too high"); + require(sharesAmount <= userShares, "StrategyManager._removeShares: sharesAmount too high"); //unchecked arithmetic since we just checked this above unchecked { - userShares = userShares - scaledSharesAmount; + userShares = userShares - sharesAmount; } // subtract the shares from the staker's existing shares for this strategy - stakerStrategyScaledShares[staker][strategy] = userShares; + stakerStrategyShares[staker][strategy] = userShares; - // if no existing scaled shares, remove the strategy from the staker's dynamic array of strategies + // if no existing shares, remove the strategy from the staker's dynamic array of strategies if (userShares == 0) { _removeStrategyFromStakerStrategyList(staker, strategy); @@ -405,33 +415,25 @@ contract StrategyManager is } // VIEW FUNCTIONS + /** - * @notice Get all details on the staker's deposits and corresponding scaled shares + * @notice Get all details on the staker's deposits and corresponding shares * @param staker The staker of interest, whose deposits this function will fetch - * @return (staker's strategies, scaled shares in these strategies) + * @return (staker's strategies, shares in these strategies) */ function getDeposits( address staker ) external view returns (IStrategy[] memory, uint256[] memory) { uint256 strategiesLength = stakerStrategyList[staker].length; - uint256[] memory scaledShares = new uint256[](strategiesLength); + uint256[] memory shares = new uint256[](strategiesLength); for (uint256 i = 0; i < strategiesLength;) { - scaledShares[i] = stakerStrategyScaledShares[staker][stakerStrategyList[staker][i]]; + shares[i] = stakerStrategyShares[staker][stakerStrategyList[staker][i]]; unchecked { ++i; } } - return (stakerStrategyList[staker], scaledShares); - } - - /// @notice Returns the current shares of `user` in `strategy` - function stakerStrategyShares( - address user, - IStrategy strategy - ) public view returns (uint256 shares) { - uint256 scaledShares = stakerStrategyScaledShares[user][strategy]; - return delegation.getStakerShares(user, strategy, scaledShares); + return (stakerStrategyList[staker], shares); } /// @notice Simple getter function that returns `stakerStrategyList[staker].length`. diff --git a/src/contracts/core/StrategyManagerStorage.sol b/src/contracts/core/StrategyManagerStorage.sol index d5747f5f3..9c50d44e2 100644 --- a/src/contracts/core/StrategyManagerStorage.sol +++ b/src/contracts/core/StrategyManagerStorage.sol @@ -45,9 +45,9 @@ abstract contract StrategyManagerStorage is IStrategyManager { * This variable was migrated to the DelegationManager instead. */ uint256 private __deprecated_withdrawalDelayBlocks; - /// @notice Mapping: staker => Strategy => number of scaled shares which they currently hold - mapping(address => mapping(IStrategy => uint256)) public stakerStrategyScaledShares; - /// @notice Mapping: staker => array of strategies in which they have nonzero scaled shares + /// @notice Mapping: staker => Strategy => number of shares which they currently hold + mapping(address => mapping(IStrategy => uint256)) public stakerStrategyShares; + /// @notice Mapping: staker => array of strategies in which they have nonzero shares mapping(address => IStrategy[]) public stakerStrategyList; /// @notice *Deprecated* mapping: hash of withdrawal inputs, aka 'withdrawalRoot' => whether the withdrawal is pending /// @dev This mapping is preserved to allow the migration of withdrawals to the DelegationManager contract. @@ -68,7 +68,7 @@ abstract contract StrategyManagerStorage is IStrategyManager { mapping(address => uint256) internal beaconChainETHSharesToDecrementOnWithdrawal; /** - * @notice Mapping: strategy => whether or not stakers are allowed to transfer strategy scaled shares to another address + * @notice Mapping: strategy => whether or not stakers are allowed to transfer strategy shares to another address * if true for a strategy, a user cannot depositIntoStrategyWithSignature into that strategy for another staker * and also when performing queueWithdrawals, a staker can only withdraw to themselves */ diff --git a/src/contracts/interfaces/IAVSDirectory.sol b/src/contracts/interfaces/IAVSDirectory.sol index 7aaa564c6..4df5edd4b 100644 --- a/src/contracts/interfaces/IAVSDirectory.sol +++ b/src/contracts/interfaces/IAVSDirectory.sol @@ -315,9 +315,6 @@ interface IAVSDirectory is ISignatureUtils { uint16 numToComplete ) external view returns (uint64); - /// @dev Delay before deallocations take effect and are added back into freeMagnitude - function DEALLOCATION_DELAY() external view returns (uint32); - /** * @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days * @param operator the operator to check slashability for @@ -368,18 +365,54 @@ interface IAVSDirectory is ISignatureUtils { bool linear ) external view returns (uint24[] memory); - /// @notice Returns the total magnitude of an operator for a given set of strategies - /// TODO: finish natspec - function getTotalMagnitudes(address operator, IStrategy[] calldata strategies) external view returns (uint64[] memory); + /** + * @notice Returns the current total magnitudes of an operator for a given set of strategies + * @param operator the operator to get the total magnitude for + * @param strategies the strategies to get the total magnitudes for + * @return totalMagnitudes the total magnitudes for each strategy + */ + function getTotalMagnitudes( + address operator, + IStrategy[] calldata strategies + ) external view returns (uint64[] memory); - /// @notice Returns the total magnitude of an operator for a given set of strategies at a given timestamp - /// TODO: finish natspec + /** + * @notice Returns the total magnitudes of an operator for a given set of strategies at a given timestamp + * @param operator the operator to get the total magnitude for + * @param strategies the strategies to get the total magnitudes for + * @param timestamp the timestamp to get the total magnitudes at + * @return totalMagnitudes the total magnitudes for each strategy + */ function getTotalMagnitudesAtTimestamp( address operator, IStrategy[] calldata strategies, uint32 timestamp ) external view returns (uint64[] memory); + /** + * @notice Returns the current total magnitude of an operator for a given strategy + * @param operator the operator to get the total magnitude for + * @param strategy the strategy to get the total magnitude for + * @return totalMagnitude the total magnitude for the strategy + */ + function getTotalMagnitude( + address operator, + IStrategy strategy + ) external view returns (uint64); + + /** + * @notice Returns the total magnitude of an operator for a given strategy at a given timestamp + * @param operator the operator to get the total magnitude for + * @param strategy the strategy to get the total magnitude for + * @param timestamp the timestamp to get the total magnitude at + * @return totalMagnitude the total magnitude for the strategy + */ + function getTotalMagnitudeAtTimestamp( + address operator, + IStrategy strategy, + uint32 timestamp + ) external view returns (uint64); + function operatorSaltIsSpent(address operator, bytes32 salt) external view returns (bool); function isMember(address operator, OperatorSet memory operatorSet) external view returns (bool); diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index 8e08d4211..3155072ae 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -142,7 +142,9 @@ interface IDelegationManager is ISignatureUtils { uint32 startTimestamp; // Array of strategies that the Withdrawal contains IStrategy[] strategies; - // Array containing the amount of scaled shares for withdrawal in each Strategy in the `strategies` array + // Array containing the amount of staker scaled shares for withdrawal in each Strategy in the `strategies` array + // Note that these shares need to be rescaled again at completion based on the operator's totalMagnitude in case + // of slashing occurring during the queue withdrawal period uint256[] scaledShares; } @@ -343,30 +345,44 @@ interface IDelegationManager is ISignatureUtils { ) external; /** - * @notice Increases a staker's delegated share balance in a strategy. - * @param staker The address to increase the delegated scaled shares for their operator. - * @param strategy The strategy in which to increase the delegated scaled shares. - * @param scaledShares The number of scaled shares to increase. + * @notice Increases a staker's delegated share balance in a strategy. Note that before adding to operator shares, + * the delegated shares are scaled according to the operator's total magnitude as part of slashing accounting. + * The staker's scaling factor is updated here. + * @param staker The address to increase the delegated shares for their operator. + * @param strategy The strategy in which to increase the delegated shares. + * @param existingShares The number of shares the staker already has in the strategy. This is the shares amount stored in the + * StrategyManager/EigenPodManager for the staker's shares. + * @param addedShares The number of shares to added to the staker's shares in the strategy. This amount will be scaled prior to adding + * to the operator's scaled shares. * - * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated shares in `strategy` by `scaledShares`. Otherwise does nothing. + * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated scaled shares in `strategy` after scaling `shares`. + * Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ - function increaseDelegatedScaledShares( + function increaseDelegatedShares( address staker, IStrategy strategy, - uint256 scaledShares + uint256 existingShares, + uint256 addedShares ) external; /** - * @notice Decreases a staker's delegated share balance in a strategy. + * @notice Decreases a staker's delegated share balance in a strategy. Note that before removing from operator shares, + * the delegated shares are scaled according to the operator's total magnitude as part of slashing accounting. Unlike + * `increaseDelegatedShares`, the staker's scaling factor is not updated here. * @param staker The address to increase the delegated scaled shares for their operator. * @param strategy The strategy in which to decrease the delegated scaled shares. - * @param scaledShares The number of scaled shares to decrease. + * @param removedShares The number of shares to decremented for the strategy in the + * StrategyManager/EigenPodManager * * @dev *If the staker is actively delegated*, then decreases the `staker`'s delegated scaled shares in `strategy` by `scaledShares`. Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ - function decreaseDelegatedScaledShares(address staker, IStrategy strategy, uint256 scaledShares) external; + function decreaseDelegatedShares( + address staker, + IStrategy strategy, + uint256 removedShares + ) external; /** * @notice returns the address of the operator that `staker` is delegated to. @@ -404,44 +420,6 @@ interface IDelegationManager is ISignatureUtils { address operator ) external view returns (uint256); - /** - * @notice Given array of strategies, returns array of shares for the operator - */ - function getOperatorShares( - address operator, - IStrategy[] memory strategies - ) external view returns (uint256[] memory); - - /** - * @notice Given array of strategies, returns array of scaled shares for the operator - */ - function getOperatorScaledShares( - address operator, - IStrategy[] memory strategies - ) external view returns (uint256[] memory); - - /** - * @notice Given a staker and shares amounts of deposits, return the scaled shares calculated if - * the staker were to deposit. Depends on who the operator the staker is delegated to. - */ - function getStakerScaledShares( - address staker, - IStrategy strategy, - uint256 shares - ) external view returns (uint256 scaledShares); - - /** - * @notice Given a staker and scaled shares amounts of deposits, return the shares calculated if - * the staker were to withdraw. This value depends on which operator the staker is delegated to. - * The shares amount returned is the actual amount of Strategy shares the staker would receive (subject - * to each strategy's underlying shares to token ratio). - */ - function getStakerShares( - address staker, - IStrategy strategy, - uint256 scaledShares - ) external view returns (uint256 shares); - /** * @notice Given a list of strategies, return the minimum number of blocks that must pass to withdraw * from all the inputted strategies. Return value is >= minWithdrawalDelayBlocks as this is the global min withdrawal delay. diff --git a/src/contracts/interfaces/IEigenPodManager.sol b/src/contracts/interfaces/IEigenPodManager.sol index b28cc0da9..0f6ea80ca 100644 --- a/src/contracts/interfaces/IEigenPodManager.sol +++ b/src/contracts/interfaces/IEigenPodManager.sol @@ -116,9 +116,6 @@ interface IEigenPodManager is IPausable { address podOwner ) external view returns (int256); - /// TODO: natspec - function podOwnerScaledShares(address podOwner) external view returns (int256); - /// @notice returns canonical, virtual beaconChainETH strategy function beaconChainETHStrategy() external view returns (IStrategy); @@ -130,16 +127,20 @@ interface IEigenPodManager is IPausable { * shares from the operator to whom the staker is delegated. * @dev Reverts if `shares` is not a whole Gwei amount */ - function removeScaledShares(address podOwner, uint256 scaledShares) external; + function removeShares(address podOwner, uint256 shares) external; /** * @notice Increases the `podOwner`'s shares by `shares`, paying off deficit if possible. * Used by the DelegationManager to award a pod owner shares on exiting the withdrawal queue * @dev Returns the number of shares added to `podOwnerShares[podOwner]` above zero, which will be less than the `shares` input - * in the event that the podOwner has an existing shares deficit (i.e. `podOwnerShares[podOwner]` starts below zero) + * in the event that the podOwner has an existing shares deficit (i.e. `podOwnerShares[podOwner]` starts below zero). + * Also returns existingPodShares prior to adding shares, this is returned as 0 if the existing podOwnerShares is negative * @dev Reverts if `shares` is not a whole Gwei amount */ - function addScaledShares(address podOwner, uint256 scaledShares) external returns (uint256); + function addShares( + address podOwner, + uint256 shares + ) external returns (uint256 increaseInDelegateableShares, uint256 existingPodShares); /** * @notice Used by the DelegationManager to complete a withdrawal, sending tokens to some destination address diff --git a/src/contracts/interfaces/IStrategyManager.sol b/src/contracts/interfaces/IStrategyManager.sol index 377f32a1b..e99c6981d 100644 --- a/src/contracts/interfaces/IStrategyManager.sol +++ b/src/contracts/interfaces/IStrategyManager.sol @@ -62,14 +62,14 @@ interface IStrategyManager { * @param strategy is the specified strategy where deposit is to be made, * @param token is the denomination in which the deposit is to be made, * @param amount is the amount of token to be deposited in the strategy by the staker - * @return scaledShares The amount of new scaled shares in the `strategy` created as part of the action. + * @return shares The amount of new shares in the `strategy` created as part of the action. * @dev The `msg.sender` must have previously approved this contract to transfer at least `amount` of `token` on their behalf. * @dev Cannot be called by an address that is 'frozen' (this function will revert if the `msg.sender` is frozen). * * WARNING: Depositing tokens that allow reentrancy (eg. ERC-777) into a strategy is not recommended. This can lead to attack vectors * where the token balance and corresponding strategy shares are not in sync upon reentrancy. */ - function depositIntoStrategy(IStrategy strategy, IERC20 token, uint256 amount) external returns (uint256 scaledShares); + function depositIntoStrategy(IStrategy strategy, IERC20 token, uint256 amount) external returns (uint256 shares); /** * @notice Used for depositing an asset into the specified strategy with the resultant shares credited to `staker`, @@ -83,7 +83,7 @@ interface IStrategyManager { * @param expiry the timestamp at which the signature expires * @param signature is a valid signature from the `staker`. either an ECDSA signature if the `staker` is an EOA, or data to forward * following EIP-1271 if the `staker` is a contract - * @return scaledShares The amount of new scaled shares in the `strategy` created as part of the action. + * @return shares The amount of new shares in the `strategy` created as part of the action. * @dev The `msg.sender` must have previously approved this contract to transfer at least `amount` of `token` on their behalf. * @dev A signature is required for this function to eliminate the possibility of griefing attacks, specifically those * targeting stakers who may be attempting to undelegate. @@ -99,23 +99,17 @@ interface IStrategyManager { address staker, uint256 expiry, bytes memory signature - ) external returns (uint256 scaledShares); + ) external returns (uint256 shares); /// @notice Used by the DelegationManager to remove a Staker's shares from a particular strategy when entering the withdrawal queue - function removeScaledShares(address staker, IStrategy strategy, uint256 shares) external; + function removeShares(address staker, IStrategy strategy, uint256 shares) external; - /// @notice Used by the DelegationManager to award a Staker some scaled shares that have passed through the withdrawal queue - function addScaledShares(address staker, IERC20 token, IStrategy strategy, uint256 scaledShares) external; + /// @notice Used by the DelegationManager to award a Staker some shares that have passed through the withdrawal queue + function addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external returns (uint256 existingShares); /// @notice Used by the DelegationManager to convert withdrawn descaled shares to tokens and send them to a recipient function withdrawSharesAsTokens(address recipient, IStrategy strategy, uint256 shares, IERC20 token) external; - /// @notice Returns the current scaled shares of `user` in `strategy` - function stakerStrategyScaledShares( - address user, - IStrategy strategy - ) external view returns (uint256 scaledShares); - /// @notice Returns the current shares of `user` in `strategy` function stakerStrategyShares( address user, diff --git a/src/contracts/libraries/ShareScalingLib.sol b/src/contracts/libraries/ShareScalingLib.sol deleted file mode 100644 index e53440721..000000000 --- a/src/contracts/libraries/ShareScalingLib.sol +++ /dev/null @@ -1,121 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; - -import "../interfaces/IAVSDirectory.sol"; - -library ShareScalingLib { - /// @dev The initial total magnitude for an operator - uint64 public constant INITIAL_TOTAL_MAGNITUDE = 1e18; - - /** - * @notice Returns the scaled shares of for an operator for a particular set of strategies and shares delegated to an operator - * @param avsDirectory The AVS directory - * @param operator The operator to scale shares for - * @param strategies The strategies of which shares are - * @param shares The shares to scale - */ - function scaleShares( - IAVSDirectory avsDirectory, - address operator, - IStrategy[] memory strategies, - uint256[] memory shares - ) internal view returns (uint256[] memory) { - uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); - uint256[] memory scaledShares = new uint256[](shares.length); - for (uint256 i = 0; i < shares.length; i++) { - scaledShares[i] = _scaleShares(shares[i], totalMagnitudes[i]); - } - return scaledShares; - } - - /** - * @notice Returns the shares of for an operator for a particular set of strategies and scaled shares delegated to an operator - * @param avsDirectory The AVS directory - * @param operator The operator to scale shares for - * @param strategies The strategies of which scaled shares are - * @param scaledShares The scaled shares to descale - */ - function descaleShares( - IAVSDirectory avsDirectory, - address operator, - IStrategy[] memory strategies, - uint256[] memory scaledShares - ) internal view returns (uint256[] memory) { - uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); - uint256[] memory descaledShares = new uint256[](scaledShares.length); - for (uint256 i = 0; i < scaledShares.length; i++) { - descaledShares[i] = _descaleShares(scaledShares[i], totalMagnitudes[i]); - } - return descaledShares; - } - - /** - * @notice Returns the shares of for an operator for a particular set of strategies and scaled shares delegated to an operator - * @param avsDirectory The AVS directory - * @param operator The operator to scale shares for - * @param strategies The strategies of which scaled shares are - * @param scaledShares The scaled shares to descale - */ - function descaleSharesAtTimestamp( - IAVSDirectory avsDirectory, - address operator, - IStrategy[] memory strategies, - uint256[] memory scaledShares, - uint32 timestamp - ) internal view returns (uint256[] memory) { - uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudesAtTimestamp(operator, strategies, timestamp); - uint256[] memory descaledShares = new uint256[](scaledShares.length); - for (uint256 i = 0; i < scaledShares.length; i++) { - descaledShares[i] = _descaleShares(scaledShares[i], totalMagnitudes[i]); - } - return descaledShares; - } - - /** - * @notice Returns the scaled shares of for an operator for a particular strategy and shares delegated to an operator - * @param avsDirectory The AVS directory - * @param operator The operator to scale shares for - * @param strategy The strategy of which shares are - * @param shares The shares to scale - */ - function scaleShares( - IAVSDirectory avsDirectory, - address operator, - IStrategy strategy, - uint256 shares - ) internal view returns (uint256) { - IStrategy[] memory strategies = new IStrategy[](1); - strategies[0] = strategy; - uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); - return _scaleShares(shares, totalMagnitudes[0]); - } - - /** - * @notice Returns the shares of for an operator for a particular strategy and scaled shares delegated to an operator - * @param avsDirectory The AVS directory - * @param operator The operator to scale shares for - * @param strategy The strategy of which scaled shares are - * @param scaledShares The scaled shares to descale - */ - function descaleShares( - IAVSDirectory avsDirectory, - address operator, - IStrategy strategy, - uint256 scaledShares - ) internal view returns (uint256) { - IStrategy[] memory strategies = new IStrategy[](1); - strategies[0] = strategy; - uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); - return _descaleShares(scaledShares, totalMagnitudes[0]); - } - - /// @notice helper pure to return scaledShares given shares and totalMagnitude - function _scaleShares(uint256 shares, uint64 totalMagnitude) internal pure returns (uint256) { - return shares * INITIAL_TOTAL_MAGNITUDE / totalMagnitude; - } - - /// @notice helper pure to return shares(descaledShares) given scaledShares and totalMagnitude - function _descaleShares(uint256 scaledShares, uint64 totalMagnitude) internal pure returns (uint256) { - return scaledShares * totalMagnitude / INITIAL_TOTAL_MAGNITUDE; - } -} diff --git a/src/contracts/libraries/SlashingConstants.sol b/src/contracts/libraries/SlashingConstants.sol new file mode 100644 index 000000000..3d501d409 --- /dev/null +++ b/src/contracts/libraries/SlashingConstants.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "../interfaces/IAVSDirectory.sol"; + +library SlashingConstants { + /// @dev The initial total magnitude for an operator + uint64 public constant INITIAL_TOTAL_MAGNITUDE = 1e18; + + /// @notice that stakerScalingFactor and totalMagnitude have initial default values to 1e18 as "1" + /// to preserve precision with uint256 math. We use `PRECISION_FACTOR` where these variables are used + /// and divide to represent as 1 + uint256 public constant PRECISION_FACTOR = 1e18; + uint256 public constant PRECISION_FACTOR_SQUARED = 1e36; + + /// @dev Delay before deallocations are completable and can be added back into freeMagnitude + uint32 public constant DEALLOCATION_DELAY = 17.5 days; +} diff --git a/src/contracts/pods/EigenPodManager.sol b/src/contracts/pods/EigenPodManager.sol index 9d7eb3fb7..f55d6642f 100644 --- a/src/contracts/pods/EigenPodManager.sol +++ b/src/contracts/pods/EigenPodManager.sol @@ -111,61 +111,57 @@ contract EigenPodManager is sharesDelta % int256(GWEI_TO_WEI) == 0, "EigenPodManager.recordBeaconChainETHBalanceUpdate: sharesDelta must be a whole Gwei amount" ); - int256 currentPodOwnerScaledShares = podOwnerScaledShares[podOwner]; - int256 updatedPodOwnerScaledShares; - // scale the sharesDelta and add to the podOwnerShares - if (sharesDelta < 0) { - updatedPodOwnerScaledShares = currentPodOwnerScaledShares - - int256(delegationManager.getStakerScaledShares(podOwner, beaconChainETHStrategy, uint256(-sharesDelta))); - } else { - updatedPodOwnerScaledShares = currentPodOwnerScaledShares - + int256(delegationManager.getStakerScaledShares(podOwner, beaconChainETHStrategy, uint256(sharesDelta))); - } - podOwnerScaledShares[podOwner] = updatedPodOwnerScaledShares; + int256 currentPodOwnerShares = podOwnerShares[podOwner]; + int256 updatedPodOwnerShares = currentPodOwnerShares + sharesDelta; + podOwnerShares[podOwner] = updatedPodOwnerShares; // inform the DelegationManager of the change in delegateable shares - int256 changeInDelegatableScaledShares = _calculateChangeInDelegatableScaledShares({ - scaledSharesBefore: currentPodOwnerScaledShares, - scaledSharesAfter: updatedPodOwnerScaledShares + int256 changeInDelegatableShares = _calculateChangeInDelegatableShares({ + sharesBefore: currentPodOwnerShares, + sharesAfter: updatedPodOwnerShares }); // skip making a call to the DelegationManager if there is no change in delegateable shares - if (changeInDelegatableScaledShares != 0) { - if (changeInDelegatableScaledShares < 0) { - delegationManager.decreaseDelegatedScaledShares({ + // or if the currentPodShares < 0 and updatedPodShares is still < 0. Means no update required + // in delegated shares + if (changeInDelegatableShares != 0) { + if (changeInDelegatableShares < 0) { + delegationManager.decreaseDelegatedShares({ staker: podOwner, strategy: beaconChainETHStrategy, - scaledShares: uint256(-changeInDelegatableScaledShares) + removedShares: uint256(-changeInDelegatableShares) }); } else { - delegationManager.increaseDelegatedScaledShares({ + delegationManager.increaseDelegatedShares({ staker: podOwner, strategy: beaconChainETHStrategy, - scaledShares: uint256(changeInDelegatableScaledShares) + // existing shares from standpoint of the DelegationManager + existingShares: currentPodOwnerShares < 0 ? 0 : uint256(currentPodOwnerShares), + addedShares: uint256(changeInDelegatableShares) }); } } emit PodSharesUpdated(podOwner, sharesDelta); - emit NewTotalShares(podOwner, updatedPodOwnerScaledShares); + emit NewTotalShares(podOwner, updatedPodOwnerShares); } /** * @notice Used by the DelegationManager to remove a pod owner's shares while they're in the withdrawal queue. * Simply decreases the `podOwner`'s shares by `shares`, down to a minimum of zero. - * @dev This function reverts if it would result in `podOwnerScaledShares[podOwner]` being less than zero, i.e. it is forbidden for this function to + * @dev This function reverts if it would result in `podOwnerShares[podOwner]` being less than zero, i.e. it is forbidden for this function to * result in the `podOwner` incurring a "share deficit". This behavior prevents a Staker from queuing a withdrawal which improperly removes excessive * shares from the operator to whom the staker is delegated. * @dev Reverts if `shares` is not a whole Gwei amount * @dev The delegation manager validates that the podOwner is not address(0) */ - function removeScaledShares(address podOwner, uint256 scaledShares) external onlyDelegationManager { - require(int256(scaledShares) >= 0, "EigenPodManager.removeShares: shares cannot be negative"); - require(scaledShares % GWEI_TO_WEI == 0, "EigenPodManager.removeShares: shares must be a whole Gwei amount"); - int256 updatedPodOwnerShares = podOwnerScaledShares[podOwner] - int256(scaledShares); + function removeShares(address podOwner, uint256 shares) external onlyDelegationManager { + require(int256(shares) >= 0, "EigenPodManager.removeShares: shares cannot be negative"); + require(shares % GWEI_TO_WEI == 0, "EigenPodManager.removeShares: shares must be a whole Gwei amount"); + int256 updatedPodOwnerShares = podOwnerShares[podOwner] - int256(shares); require( updatedPodOwnerShares >= 0, "EigenPodManager.removeShares: cannot result in pod owner having negative shares" ); - podOwnerScaledShares[podOwner] = updatedPodOwnerShares; + podOwnerShares[podOwner] = updatedPodOwnerShares; emit NewTotalShares(podOwner, updatedPodOwnerShares); } @@ -173,27 +169,34 @@ contract EigenPodManager is /** * @notice Increases the `podOwner`'s shares by `shares`, paying off deficit if possible. * Used by the DelegationManager to award a pod owner shares on exiting the withdrawal queue - * @dev Returns the number of shares added to `podOwnerScaledShares[podOwner]` above zero, which will be less than the `shares` input - * in the event that the podOwner has an existing shares deficit (i.e. `podOwnerScaledShares[podOwner]` starts below zero) + * @dev Returns the number of shares added to `podOwnerShares[podOwner]` above zero, which will be less than the `shares` input + * in the event that the podOwner has an existing shares deficit (i.e. `podOwnerShares[podOwner]` starts below zero). + * Also returns existingPodShares prior to adding shares, this is returned as 0 if the existing podOwnerShares is negative * @dev Reverts if `shares` is not a whole Gwei amount */ - function addScaledShares(address podOwner, uint256 scaledShares) external onlyDelegationManager returns (uint256) { + function addShares( + address podOwner, + uint256 shares + ) external onlyDelegationManager returns (uint256 increaseInDelegateableShares, uint256 existingPodShares) { require(podOwner != address(0), "EigenPodManager.addShares: podOwner cannot be zero address"); - require(int256(scaledShares) >= 0, "EigenPodManager.addShares: shares cannot be negative"); - require(scaledShares % GWEI_TO_WEI == 0, "EigenPodManager.addShares: shares must be a whole Gwei amount"); - int256 currentPodOwnerScaledShares = podOwnerScaledShares[podOwner]; - int256 updatedPodOwnerScaledShares = currentPodOwnerScaledShares + int256(scaledShares); - podOwnerScaledShares[podOwner] = updatedPodOwnerScaledShares; + require(int256(shares) >= 0, "EigenPodManager.addShares: shares cannot be negative"); + require(shares % GWEI_TO_WEI == 0, "EigenPodManager.addShares: shares must be a whole Gwei amount"); + int256 currentPodOwnerShares = podOwnerShares[podOwner]; + int256 updatedPodOwnerShares = currentPodOwnerShares + int256(shares); + podOwnerShares[podOwner] = updatedPodOwnerShares; - emit PodSharesUpdated(podOwner, int256(scaledShares)); - emit NewTotalShares(podOwner, updatedPodOwnerScaledShares); + emit PodSharesUpdated(podOwner, int256(shares)); + emit NewTotalShares(podOwner, updatedPodOwnerShares); - return uint256( - _calculateChangeInDelegatableScaledShares({ - scaledSharesBefore: currentPodOwnerScaledShares, - scaledSharesAfter: updatedPodOwnerScaledShares + increaseInDelegateableShares = uint256( + _calculateChangeInDelegatableShares({ + sharesBefore: currentPodOwnerShares, + sharesAfter: updatedPodOwnerShares }) ); + existingPodShares = currentPodOwnerShares < 0 ? 0 : uint256(currentPodOwnerShares); + + return (increaseInDelegateableShares, existingPodShares); } /** @@ -212,22 +215,22 @@ contract EigenPodManager is require(destination != address(0), "EigenPodManager.withdrawSharesAsTokens: destination cannot be zero address"); require(int256(shares) >= 0, "EigenPodManager.withdrawSharesAsTokens: shares cannot be negative"); require(shares % GWEI_TO_WEI == 0, "EigenPodManager.withdrawSharesAsTokens: shares must be a whole Gwei amount"); - int256 currentPodOwnerScaledShares = podOwnerScaledShares[podOwner]; + int256 currentPodOwnerShares = podOwnerShares[podOwner]; // if there is an existing shares deficit, prioritize decreasing the deficit first - if (currentPodOwnerScaledShares < 0) { - uint256 currentShareDeficit = uint256(-currentPodOwnerScaledShares); + if (currentPodOwnerShares < 0) { + uint256 currentShareDeficit = uint256(-currentPodOwnerShares); if (shares > currentShareDeficit) { // get rid of the whole deficit if possible, and pass any remaining shares onto destination - podOwnerScaledShares[podOwner] = 0; + podOwnerShares[podOwner] = 0; shares -= currentShareDeficit; emit PodSharesUpdated(podOwner, int256(currentShareDeficit)); emit NewTotalShares(podOwner, 0); } else { // otherwise get rid of as much deficit as possible, and return early, since there is nothing left over to forward on - int256 updatedPodOwnerShares = podOwnerScaledShares[podOwner] + int256(shares); - podOwnerScaledShares[podOwner] = updatedPodOwnerShares; + int256 updatedPodOwnerShares = podOwnerShares[podOwner] + int256(shares); + podOwnerShares[podOwner] = updatedPodOwnerShares; emit PodSharesUpdated(podOwner, int256(shares)); emit NewTotalShares(podOwner, updatedPodOwnerShares); return; @@ -259,53 +262,33 @@ contract EigenPodManager is /** * @notice Calculates the change in a pod owner's delegateable shares as a result of their beacon chain ETH shares changing - * from `scaledSharesBefore` to `scaledSharesAfter`. The key concept here is that negative/"deficit" scaledShares are not delegateable. + * from `sharesBefore` to `sharesAfter`. The key concept here is that negative/"deficit" shares are not delegateable. */ - function _calculateChangeInDelegatableScaledShares( - int256 scaledSharesBefore, - int256 scaledSharesAfter + function _calculateChangeInDelegatableShares( + int256 sharesBefore, + int256 sharesAfter ) internal pure returns (int256) { - if (scaledSharesBefore <= 0) { - if (scaledSharesAfter <= 0) { + if (sharesBefore <= 0) { + if (sharesAfter <= 0) { // if the shares started negative and stayed negative, then there cannot have been an increase in delegateable shares return 0; - // if the shares started negative and became positive, then the increase in delegateable shares is the ending share amount } else { // if the shares started negative and became positive, then the increase in delegateable shares is the ending share amount - return scaledSharesAfter; + return sharesAfter; } } else { - if (scaledSharesAfter <= 0) { + if (sharesAfter <= 0) { // if the shares started positive and became negative, then the decrease in delegateable shares is the starting share amount - return (-scaledSharesBefore); + return (-sharesBefore); } else { // if the shares started positive and stayed positive, then the change in delegateable shares // is the difference between starting and ending amounts - return (scaledSharesAfter - scaledSharesBefore); + return (sharesAfter - sharesBefore); } } } // VIEW FUNCTIONS - /// @notice Return the real number of ETH shares that the `podOwner` has - function podOwnerShares(address podOwner) public view returns (int256) { - int256 podOwnerShares; - if (podOwnerScaledShares[podOwner] < 0) { - podOwnerShares = -int256( - delegationManager.getStakerShares( - podOwner, beaconChainETHStrategy, uint256(-podOwnerScaledShares[podOwner]) - ) - ); - } else { - podOwnerShares = int256( - delegationManager.getStakerShares( - podOwner, beaconChainETHStrategy, uint256(podOwnerScaledShares[podOwner]) - ) - ); - } - return podOwnerShares; - } - /// @notice Returns the address of the `podOwner`'s EigenPod (whether it is deployed yet or not). function getPod( address podOwner diff --git a/src/contracts/pods/EigenPodManagerStorage.sol b/src/contracts/pods/EigenPodManagerStorage.sol index 7dd04ab4d..fd2ee8536 100644 --- a/src/contracts/pods/EigenPodManagerStorage.sol +++ b/src/contracts/pods/EigenPodManagerStorage.sol @@ -68,17 +68,17 @@ abstract contract EigenPodManagerStorage is IEigenPodManager { // BEGIN STORAGE VARIABLES ADDED AFTER MAINNET DEPLOYMENT -- DO NOT SUGGEST REORDERING TO CONVENTIONAL ORDER /** - * @notice Mapping from Pod owner owner to the number of scaled shares they have in the virtual beacon chain ETH strategy. - * NOTE: This mapping was previously named `podOwnerShares` but will now store scaled shares based on the currently delegated operator + * @notice Mapping from Pod owner owner to the number of shares they have in the virtual beacon chain ETH strategy. + * NOTE: This mapping was previously named `podOwnerShares` but will now store shares based on the currently delegated operator * for the podOwner to account for Slashing in EigenLayer. There is a backwards compatible view function `podOwnerShares` that will convert - * scaled shares to its actual ETH shares. + * shares to its actual ETH shares. * @dev The share amount can become negative. This is necessary to accommodate the fact that a pod owner's virtual beacon chain ETH shares can * decrease between the pod owner queuing and completing a withdrawal. * When the pod owner's shares would otherwise increase, this "deficit" is decreased first _instead_. * Likewise, when a withdrawal is completed, this "deficit" is decreased and the withdrawal amount is decreased; We can think of this * as the withdrawal "paying off the deficit". */ - mapping(address => int256) public podOwnerScaledShares; + mapping(address => int256) public podOwnerShares; uint64 internal __deprecated_denebForkTimestamp; diff --git a/src/contracts/strategies/StrategyBase.sol b/src/contracts/strategies/StrategyBase.sol index 314c6e1f8..3e72d1848 100644 --- a/src/contracts/strategies/StrategyBase.sol +++ b/src/contracts/strategies/StrategyBase.sol @@ -302,7 +302,7 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * querying the `strategyManager` contract */ function shares(address user) public view virtual returns (uint256) { - return strategyManager.stakerStrategyScaledShares(user, IStrategy(address(this))); + return strategyManager.stakerStrategyShares(user, IStrategy(address(this))); } /// @notice Internal function used to fetch this contract's current balance of `underlyingToken`. diff --git a/src/test/EigenLayerTestHelper.t.sol b/src/test/EigenLayerTestHelper.t.sol index 9690c8371..56d37a675 100644 --- a/src/test/EigenLayerTestHelper.t.sol +++ b/src/test/EigenLayerTestHelper.t.sol @@ -299,7 +299,7 @@ pragma solidity ^0.8.27; // uint256 amountDeposited = _testDepositWeth(staker, amountToDeposit); // // We can't withdraw more than we deposit // if (shareAmounts[0] > amountDeposited) { -// cheats.expectRevert("StrategyManager._removeScaledShares: shareAmount too high"); +// cheats.expectRevert("StrategyManager._removeShares: shareAmount too high"); // } // } diff --git a/src/test/harnesses/EigenPodManagerWrapper.sol b/src/test/harnesses/EigenPodManagerWrapper.sol index 0a65a1373..7bce6e9bc 100644 --- a/src/test/harnesses/EigenPodManagerWrapper.sol +++ b/src/test/harnesses/EigenPodManagerWrapper.sol @@ -14,8 +14,8 @@ contract EigenPodManagerWrapper is EigenPodManager { IDelegationManager _delegationManager ) EigenPodManager(_ethPOS, _eigenPodBeacon, _strategyManager, _slasher, _delegationManager) {} - function calculateChangeInDelegatableScaledShares(int256 sharesBefore, int256 sharesAfter) external pure returns (int256) { - return _calculateChangeInDelegatableScaledShares(sharesBefore, sharesAfter); + function calculateChangeInDelegatableShares(int256 sharesBefore, int256 sharesAfter) external pure returns (int256) { + return _calculateChangeInDelegatableShares(sharesBefore, sharesAfter); } function setPodAddress(address owner, IEigenPod pod) external { diff --git a/src/test/integration/IntegrationBase.t.sol b/src/test/integration/IntegrationBase.t.sol index 774c7b388..872a547f2 100644 --- a/src/test/integration/IntegrationBase.t.sol +++ b/src/test/integration/IntegrationBase.t.sol @@ -185,7 +185,7 @@ abstract contract IntegrationBase is IntegrationDeployer { function assert_HasNoDelegatableShares(User user, string memory err) internal { (IStrategy[] memory strategies, uint[] memory shares) = - delegationManager.getDelegatableScaledShares(address(user)); + delegationManager.getDelegatableShares(address(user)); assertEq(strategies.length, 0, err); assertEq(strategies.length, shares.length, "assert_HasNoDelegatableShares: return length mismatch"); @@ -238,7 +238,7 @@ abstract contract IntegrationBase is IntegrationDeployer { actualShares = uint(shares); } else { - actualShares = strategyManager.stakerStrategyScaledShares(address(user), strat); + actualShares = strategyManager.stakerStrategyShares(address(user), strat); } assertApproxEqAbs(expectedShares[i], actualShares, 1, err); @@ -1051,7 +1051,7 @@ abstract contract IntegrationBase is IntegrationDeployer { curShares[i] = uint(shares); } else { - curShares[i] = strategyManager.stakerStrategyScaledShares(address(staker), strat); + curShares[i] = strategyManager.stakerStrategyShares(address(staker), strat); } } @@ -1076,7 +1076,7 @@ abstract contract IntegrationBase is IntegrationDeployer { if (strat == BEACONCHAIN_ETH_STRAT) { curShares[i] = eigenPodManager.podOwnerShares(address(staker)); } else { - curShares[i] = int(strategyManager.stakerStrategyScaledShares(address(staker), strat)); + curShares[i] = int(strategyManager.stakerStrategyShares(address(staker), strat)); } } diff --git a/src/test/integration/users/User.t.sol b/src/test/integration/users/User.t.sol index 7203db39d..dacfad209 100644 --- a/src/test/integration/users/User.t.sol +++ b/src/test/integration/users/User.t.sol @@ -468,7 +468,7 @@ contract User is PrintUtils { /// @notice Assumes staker and withdrawer are the same and that all strategies and shares are withdrawn function _getExpectedWithdrawalStructsForStaker(address staker) internal view returns (IDelegationManager.Withdrawal[] memory) { (IStrategy[] memory strategies, uint256[] memory scaledShares) - = delegationManager.getDelegatableScaledShares(staker); + = delegationManager.getDelegatableShares(staker); IDelegationManager.Withdrawal[] memory expectedWithdrawals = new IDelegationManager.Withdrawal[](strategies.length); address delegatedTo = delegationManager.delegatedTo(staker); diff --git a/src/test/mocks/AVSDirectoryMock.sol b/src/test/mocks/AVSDirectoryMock.sol index 51b99367c..a7219ef46 100644 --- a/src/test/mocks/AVSDirectoryMock.sol +++ b/src/test/mocks/AVSDirectoryMock.sol @@ -98,9 +98,27 @@ contract AVSDirectoryMock is IAVSDirectory, Test { function DEALLOCATION_DELAY() external view returns (uint32) {} - function getTotalMagnitudes(address operator, IStrategy[] calldata strategies) external view returns (uint64[] memory) {} + function getTotalMagnitudes( + address operator, + IStrategy[] calldata strategies + ) external view returns (uint64[] memory) {} - function getTotalMagnitudesAtTimestamp(address operator, IStrategy[] calldata strategies, uint32 timestamp) external view returns (uint64[] memory) {} + function getTotalMagnitudesAtTimestamp( + address operator, + IStrategy[] calldata strategies, + uint32 timestamp + ) external view returns (uint64[] memory) {} + + function getTotalMagnitude( + address operator, + IStrategy strategy + ) external view returns (uint64) {} + + function getTotalMagnitudeAtTimestamp( + address operator, + IStrategy strategy, + uint32 timestamp + ) external view returns (uint64) {} function calculateOperatorAVSRegistrationDigestHash( address operator, diff --git a/src/test/mocks/DelegationManagerMock.sol b/src/test/mocks/DelegationManagerMock.sol index a396083f1..7cf65f706 100644 --- a/src/test/mocks/DelegationManagerMock.sol +++ b/src/test/mocks/DelegationManagerMock.sol @@ -52,13 +52,14 @@ contract DelegationManagerMock is IDelegationManager, Test { return withdrawalRoot; } - function increaseDelegatedScaledShares( + function increaseDelegatedShares( address staker, IStrategy strategy, - uint256 scaledShares + uint256 existingShares, + uint256 addedShares ) external {} - function decreaseDelegatedScaledShares(address staker, IStrategy strategy, uint256 shares) external {} + function decreaseDelegatedShares(address staker, IStrategy strategy, uint256 shares) external {} function operatorDetails(address operator) external pure returns (OperatorDetails memory) { OperatorDetails memory returnValue = OperatorDetails({ @@ -94,28 +95,6 @@ contract DelegationManagerMock is IDelegationManager, Test { return 0; } - function getOperatorScaledShares( - address operator, - IStrategy[] memory strategies - ) external view returns (uint256[] memory) {} - - function getOperatorShares( - address operator, - IStrategy[] memory strategies - ) external view returns (uint256[] memory) {} - - function getStakerScaledShares( - address staker, - IStrategy strategy, - uint256 shares - ) external view returns (uint256 scaledShares) {} - - function getStakerShares( - address staker, - IStrategy strategy, - uint256 scaledShares - ) public view returns (uint256 shares) {} - function getWithdrawalDelay(IStrategy[] calldata /*strategies*/) public pure returns (uint256) { return 0; } @@ -192,23 +171,23 @@ contract DelegationManagerMock is IDelegationManager, Test { ) external {} // onlyDelegationManager functions in StrategyManager - function addScaledShares( + function addShares( IStrategyManager strategyManager, address staker, IERC20 token, IStrategy strategy, uint256 shares ) external { - strategyManager.addScaledShares(staker, token, strategy, shares); + strategyManager.addShares(staker, token, strategy, shares); } - function removeScaledShares( + function removeShares( IStrategyManager strategyManager, address staker, IStrategy strategy, uint256 shares ) external { - strategyManager.removeScaledShares(staker, strategy, shares); + strategyManager.removeShares(staker, strategy, shares); } function withdrawSharesAsTokens( diff --git a/src/test/mocks/EigenPodManagerMock.sol b/src/test/mocks/EigenPodManagerMock.sol index ad48c0a06..855fc54e6 100644 --- a/src/test/mocks/EigenPodManagerMock.sol +++ b/src/test/mocks/EigenPodManagerMock.sol @@ -53,14 +53,14 @@ contract EigenPodManagerMock is IEigenPodManager, Test, Pausable { podShares[podOwner] = shares; } - function addScaledShares(address /*podOwner*/, uint256 scaledShares) external pure returns (uint256) { + function addShares(address /*podOwner*/, uint256 shares) external pure returns (uint256, uint256) { // this is the "increase in delegateable tokens" - return (scaledShares); + // return (shares); } function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) external {} - function removeScaledShares(address podOwner, uint256 scaledShares) external {} + function removeShares(address podOwner, uint256 shares) external {} function numPods() external view returns (uint256) {} diff --git a/src/test/mocks/StrategyManagerMock.sol b/src/test/mocks/StrategyManagerMock.sol index f75ffbfaa..65ac7927c 100644 --- a/src/test/mocks/StrategyManagerMock.sol +++ b/src/test/mocks/StrategyManagerMock.sol @@ -66,9 +66,6 @@ contract StrategyManagerMock is external returns (uint256 shares) {} - /// @notice Returns the current shares of `user` in `strategy` - function stakerStrategyScaledShares(address user, IStrategy strategy) external view returns (uint256 shares) {} - /** * @notice mocks the return value of getDeposits * @param staker staker whose deposits are being mocked @@ -118,9 +115,9 @@ contract StrategyManagerMock is strategyIsWhitelistedForDeposit[strategy] = value; } - function removeScaledShares(address staker, IStrategy strategy, uint256 shares) external {} + function removeShares(address staker, IStrategy strategy, uint256 shares) external {} - function addScaledShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external {} + function addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external returns (uint256 existingShares) {} function withdrawSharesAsTokens(address recipient, IStrategy strategy, uint256 shares, IERC20 token) external {} diff --git a/src/test/unit/EigenPodManagerUnit.t.sol b/src/test/unit/EigenPodManagerUnit.t.sol index 2317cf534..4ab147339 100644 --- a/src/test/unit/EigenPodManagerUnit.t.sol +++ b/src/test/unit/EigenPodManagerUnit.t.sol @@ -190,35 +190,35 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { Add Shares Tests *******************************************************************************/ - function testFuzz_addScaledShares_revert_notDelegationManager(address notDelegationManager) public filterFuzzedAddressInputs(notDelegationManager){ + function testFuzz_addShares_revert_notDelegationManager(address notDelegationManager) public filterFuzzedAddressInputs(notDelegationManager){ cheats.assume(notDelegationManager != address(delegationManagerMock)); cheats.prank(notDelegationManager); cheats.expectRevert("EigenPodManager.onlyDelegationManager: not the DelegationManager"); - eigenPodManager.addScaledShares(defaultStaker, 0); + eigenPodManager.addShares(defaultStaker, 0); } - function test_addScaledShares_revert_podOwnerZeroAddress() public { + function test_addShares_revert_podOwnerZeroAddress() public { cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.addScaledShares: podOwner cannot be zero address"); - eigenPodManager.addScaledShares(address(0), 0); + cheats.expectRevert("EigenPodManager.addShares: podOwner cannot be zero address"); + eigenPodManager.addShares(address(0), 0); } - function testFuzz_addScaledShares_revert_sharesNegative(int256 shares) public { + function testFuzz_addShares_revert_sharesNegative(int256 shares) public { cheats.assume(shares < 0); cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.addScaledShares: shares cannot be negative"); - eigenPodManager.addScaledShares(defaultStaker, uint256(shares)); + cheats.expectRevert("EigenPodManager.addShares: shares cannot be negative"); + eigenPodManager.addShares(defaultStaker, uint256(shares)); } - function testFuzz_addScaledShares_revert_sharesNotWholeGwei(uint256 shares) public { + function testFuzz_addShares_revert_sharesNotWholeGwei(uint256 shares) public { cheats.assume(int256(shares) >= 0); cheats.assume(shares % GWEI_TO_WEI != 0); cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.addScaledShares: shares must be a whole Gwei amount"); - eigenPodManager.addScaledShares(defaultStaker, shares); + cheats.expectRevert("EigenPodManager.addShares: shares must be a whole Gwei amount"); + eigenPodManager.addShares(defaultStaker, shares); } - function testFuzz_addScaledShares(uint256 shares) public { + function testFuzz_addShares(uint256 shares) public { // Fuzz inputs cheats.assume(defaultStaker != address(0)); shares = shares - (shares % GWEI_TO_WEI); // Round down to nearest Gwei @@ -226,7 +226,7 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { // Add shares cheats.prank(address(delegationManagerMock)); - eigenPodManager.addScaledShares(defaultStaker, shares); + eigenPodManager.addShares(defaultStaker, shares); // Check storage update assertEq(eigenPodManager.podOwnerShares(defaultStaker), int256(shares), "Incorrect number of shares added"); @@ -236,29 +236,29 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { Remove Shares Tests ******************************************************************************/ - function testFuzz_removeScaledShares_revert_notDelegationManager(address notDelegationManager) public filterFuzzedAddressInputs(notDelegationManager) { + function testFuzz_removeShares_revert_notDelegationManager(address notDelegationManager) public filterFuzzedAddressInputs(notDelegationManager) { cheats.assume(notDelegationManager != address(delegationManagerMock)); cheats.prank(notDelegationManager); cheats.expectRevert("EigenPodManager.onlyDelegationManager: not the DelegationManager"); - eigenPodManager.removeScaledShares(defaultStaker, 0); + eigenPodManager.removeShares(defaultStaker, 0); } - function testFuzz_removeScaledShares_revert_sharesNegative(int256 shares) public { + function testFuzz_removeShares_revert_sharesNegative(int256 shares) public { cheats.assume(shares < 0); cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.removeScaledShares: shares cannot be negative"); - eigenPodManager.removeScaledShares(defaultStaker, uint256(shares)); + cheats.expectRevert("EigenPodManager.removeShares: shares cannot be negative"); + eigenPodManager.removeShares(defaultStaker, uint256(shares)); } - function testFuzz_removeScaledShares_revert_sharesNotWholeGwei(uint256 shares) public { + function testFuzz_removeShares_revert_sharesNotWholeGwei(uint256 shares) public { cheats.assume(int256(shares) >= 0); cheats.assume(shares % GWEI_TO_WEI != 0); cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.removeScaledShares: shares must be a whole Gwei amount"); - eigenPodManager.removeScaledShares(defaultStaker, shares); + cheats.expectRevert("EigenPodManager.removeShares: shares must be a whole Gwei amount"); + eigenPodManager.removeShares(defaultStaker, shares); } - function testFuzz_removeScaledShares_revert_tooManySharesRemoved(uint224 sharesToAdd, uint224 sharesToRemove) public { + function testFuzz_removeShares_revert_tooManySharesRemoved(uint224 sharesToAdd, uint224 sharesToRemove) public { // Constrain inputs cheats.assume(sharesToRemove > sharesToAdd); uint256 sharesAdded = sharesToAdd * GWEI_TO_WEI; @@ -269,11 +269,11 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { // Remove shares cheats.prank(address(delegationManagerMock)); - cheats.expectRevert("EigenPodManager.removeScaledShares: cannot result in pod owner having negative shares"); - eigenPodManager.removeScaledShares(defaultStaker, sharesRemoved); + cheats.expectRevert("EigenPodManager.removeShares: cannot result in pod owner having negative shares"); + eigenPodManager.removeShares(defaultStaker, sharesRemoved); } - function testFuzz_removeScaledShares(uint224 sharesToAdd, uint224 sharesToRemove) public { + function testFuzz_removeShares(uint224 sharesToAdd, uint224 sharesToRemove) public { // Constain inputs cheats.assume(sharesToRemove <= sharesToAdd); uint256 sharesAdded = sharesToAdd * GWEI_TO_WEI; @@ -284,13 +284,13 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { // Remove shares cheats.prank(address(delegationManagerMock)); - eigenPodManager.removeScaledShares(defaultStaker, sharesRemoved); + eigenPodManager.removeShares(defaultStaker, sharesRemoved); // Check storage assertEq(eigenPodManager.podOwnerShares(defaultStaker), int256(sharesAdded - sharesRemoved), "Incorrect number of shares removed"); } - function testFuzz_removeScaledShares_zeroShares(address podOwner, uint256 shares) public filterFuzzedAddressInputs(podOwner) { + function testFuzz_removeShares_zeroShares(address podOwner, uint256 shares) public filterFuzzedAddressInputs(podOwner) { // Constrain inputs cheats.assume(podOwner != address(0)); cheats.assume(shares < type(uint256).max / 2); @@ -302,7 +302,7 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { // Remove shares cheats.prank(address(delegationManagerMock)); - eigenPodManager.removeScaledShares(podOwner, shares); + eigenPodManager.removeShares(podOwner, shares); // Check storage update assertEq(eigenPodManager.podOwnerShares(podOwner), 0, "Shares not reset to zero"); @@ -342,7 +342,7 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { /** * @notice The `withdrawSharesAsTokens` is called in the `completeQueuedWithdrawal` function from the - * delegationManager. When a withdrawal is queued in the delegationManager, `removeScaledShares is called` + * delegationManager. When a withdrawal is queued in the delegationManager, `removeShares is called` */ function test_withdrawSharesAsTokens_reduceEntireDeficit() public { // Shares to initialize & withdraw @@ -439,7 +439,7 @@ contract EigenPodManagerUnitTests_BeaconChainETHBalanceUpdateTests is EigenPodMa } contract EigenPodManagerUnitTests_ShareAdjustmentCalculationTests is EigenPodManagerUnitTests { - // Wrapper contract that exposes the internal `_calculateChangeInDelegatableScaledShares` function + // Wrapper contract that exposes the internal `_calculateChangeInDelegatableShares` function EigenPodManagerWrapper public eigenPodManagerWrapper; function setUp() virtual override public { @@ -460,7 +460,7 @@ contract EigenPodManagerUnitTests_ShareAdjustmentCalculationTests is EigenPodMan cheats.assume(scaledSharesBefore <= 0); cheats.assume(scaledSharesAfter <= 0); - int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableScaledShares(scaledSharesBefore, scaledSharesAfter); + int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableShares(scaledSharesBefore, scaledSharesAfter); assertEq(sharesDelta, 0, "Shares delta must be 0"); } @@ -468,7 +468,7 @@ contract EigenPodManagerUnitTests_ShareAdjustmentCalculationTests is EigenPodMan cheats.assume(scaledSharesBefore <= 0); cheats.assume(scaledSharesAfter > 0); - int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableScaledShares(scaledSharesBefore, scaledSharesAfter); + int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableShares(scaledSharesBefore, scaledSharesAfter); assertEq(sharesDelta, scaledSharesAfter, "Shares delta must be equal to scaledSharesAfter"); } @@ -476,7 +476,7 @@ contract EigenPodManagerUnitTests_ShareAdjustmentCalculationTests is EigenPodMan cheats.assume(scaledSharesBefore > 0); cheats.assume(scaledSharesAfter <= 0); - int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableScaledShares(scaledSharesBefore, scaledSharesAfter); + int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableShares(scaledSharesBefore, scaledSharesAfter); assertEq(sharesDelta, -scaledSharesBefore, "Shares delta must be equal to the negative of scaledSharesBefore"); } @@ -484,7 +484,7 @@ contract EigenPodManagerUnitTests_ShareAdjustmentCalculationTests is EigenPodMan cheats.assume(scaledSharesBefore > 0); cheats.assume(scaledSharesAfter > 0); - int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableScaledShares(scaledSharesBefore, scaledSharesAfter); + int256 sharesDelta = eigenPodManagerWrapper.calculateChangeInDelegatableShares(scaledSharesBefore, scaledSharesAfter); assertEq(sharesDelta, scaledSharesAfter - scaledSharesBefore, "Shares delta must be equal to the difference between scaledSharesAfter and scaledSharesBefore"); } } diff --git a/src/test/unit/StrategyManagerUnit.t.sol b/src/test/unit/StrategyManagerUnit.t.sol index 19ec870a5..e2cac9ab2 100644 --- a/src/test/unit/StrategyManagerUnit.t.sol +++ b/src/test/unit/StrategyManagerUnit.t.sol @@ -101,14 +101,14 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv ) internal filterFuzzedAddressInputs(staker) { IERC20 token = dummyToken; - // filter out zero case since it will revert with "StrategyManager._addScaledShares: shares should not be zero!" + // filter out zero case since it will revert with "StrategyManager._addShares: shares should not be zero!" cheats.assume(amount != 0); // filter out zero address because the mock ERC20 we are using will revert on using it cheats.assume(staker != address(0)); // sanity check / filter cheats.assume(amount <= token.balanceOf(address(this))); - uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); + uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); // needed for expecting an event with the right parameters @@ -119,7 +119,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv emit Deposit(staker, token, strategy, expectedShares); uint256 shares = strategyManager.depositIntoStrategy(strategy, token, amount); - uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); + uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); assertEq(sharesAfter, sharesBefore + shares, "sharesAfter != sharesBefore + shares"); @@ -144,7 +144,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv uint256 expiry, string memory expectedRevertMessage ) internal returns (bytes memory) { - // filter out zero case since it will revert with "StrategyManager._addScaledShares: shares should not be zero!" + // filter out zero case since it will revert with "StrategyManager._addShares: shares should not be zero!" cheats.assume(amount != 0); // sanity check / filter cheats.assume(amount <= dummyToken.balanceOf(address(this))); @@ -163,7 +163,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv signature = abi.encodePacked(r, s, v); } - uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); + uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, dummyStrat); bool expectedRevertMessageIsempty; { @@ -190,7 +190,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv signature ); - uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); + uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, dummyStrat); uint256 nonceAfter = strategyManager.nonces(staker); if (expiry >= block.timestamp && expectedRevertMessageIsempty) { @@ -271,7 +271,7 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest IERC20 token = dummyToken; IStrategy strategy = dummyStrat; - // filter out zero case since it will revert with "StrategyManager._addScaledShares: shares should not be zero!" + // filter out zero case since it will revert with "StrategyManager._addShares: shares should not be zero!" cheats.assume(amount != 0); // filter out zero address because the mock ERC20 we are using will revert on using it cheats.assume(staker != address(0)); @@ -281,7 +281,7 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest cheats.assume(amount <= token.balanceOf(address(this))); cheats.assume(amount >= 1); - uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); + uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); // needed for expecting an event with the right parameters @@ -292,7 +292,7 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest emit Deposit(staker, token, strategy, expectedShares); uint256 shares = strategyManager.depositIntoStrategy(strategy, token, amount); - uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); + uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); assertEq(sharesAfter, sharesBefore + shares, "sharesAfter != sharesBefore + shares"); @@ -472,7 +472,7 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest strategyManager.depositIntoStrategy(strategy, token, amount); } - function test_addScaledShares_Revert_WhenSharesIsZero() external { + function test_addShares_Revert_WhenSharesIsZero() external { // replace dummyStrat with Reenterer contract reenterer = new Reenterer(); dummyStrat = StrategyBase(address(reenterer)); @@ -494,7 +494,7 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest reenterer.prepareReturnData(abi.encode(uint256(0))); cheats.prank(staker); - cheats.expectRevert("StrategyManager._addScaledShares: shares should not be zero!"); + cheats.expectRevert("StrategyManager._addShares: shares should not be zero!"); strategyManager.depositIntoStrategy(strategy, token, amount); } } @@ -521,14 +521,14 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa signature = abi.encodePacked(r, s, v); } - uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); + uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); cheats.expectRevert("EIP1271SignatureUtils.checkSignature_EIP1271: signature not from signer"); // call with `notStaker` as input instead of `staker` address address notStaker = address(3333); strategyManager.depositIntoStrategyWithSignature(strategy, token, amount, notStaker, expiry, signature); - uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); + uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); uint256 nonceAfter = strategyManager.nonces(staker); assertEq(sharesAfter, sharesBefore, "sharesAfter != sharesBefore"); @@ -572,7 +572,7 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa ERC1271WalletMock wallet = new ERC1271WalletMock(staker); staker = address(wallet); - // filter out zero case since it will revert with "StrategyManager._addScaledShares: shares should not be zero!" + // filter out zero case since it will revert with "StrategyManager._addShares: shares should not be zero!" cheats.assume(amount != 0); // sanity check / filter cheats.assume(amount <= token.balanceOf(address(this))); @@ -617,7 +617,7 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa ERC1271MaliciousMock wallet = new ERC1271MaliciousMock(); staker = address(wallet); - // filter out zero case since it will revert with "StrategyManager._addScaledShares: shares should not be zero!" + // filter out zero case since it will revert with "StrategyManager._addShares: shares should not be zero!" cheats.assume(amount != 0); // sanity check / filter cheats.assume(amount <= token.balanceOf(address(this))); @@ -763,12 +763,12 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa signature = abi.encodePacked(r, s, v); } - uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); + uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); cheats.expectRevert("StrategyManager.depositIntoStrategyWithSignature: signature expired"); strategyManager.depositIntoStrategyWithSignature(strategy, token, amount, staker, expiry, signature); - uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); + uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); uint256 nonceAfter = strategyManager.nonces(staker); assertEq(sharesAfter, sharesBefore, "sharesAfter != sharesBefore"); @@ -801,18 +801,18 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa } } -contract StrategyManagerUnitTests_removeScaledShares is StrategyManagerUnitTests { +contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { /** * @notice Should revert if not called by DelegationManager */ function test_Revert_DelegationManagerModifier() external { DelegationManagerMock invalidDelegationManager = new DelegationManagerMock(); cheats.expectRevert("StrategyManager.onlyDelegationManager: not the DelegationManager"); - invalidDelegationManager.removeScaledShares(strategyManager, address(this), dummyStrat, 1); + invalidDelegationManager.removeShares(strategyManager, address(this), dummyStrat, 1); } /** - * @notice deposits a single strategy and tests removeScaledShares() function reverts when sharesAmount is 0 + * @notice deposits a single strategy and tests removeShares() function reverts when sharesAmount is 0 */ function testFuzz_Revert_ZeroShares( address staker, @@ -822,48 +822,48 @@ contract StrategyManagerUnitTests_removeScaledShares is StrategyManagerUnitTests cheats.assume(depositAmount > 0 && depositAmount < dummyToken.totalSupply()); IStrategy strategy = dummyStrat; _depositIntoStrategySuccessfully(strategy, staker, depositAmount); - cheats.expectRevert("StrategyManager._removeScaledShares: shareAmount should not be zero!"); - delegationManagerMock.removeScaledShares(strategyManager, staker, strategy, 0); + cheats.expectRevert("StrategyManager._removeShares: shareAmount should not be zero!"); + delegationManagerMock.removeShares(strategyManager, staker, strategy, 0); } /** - * @notice deposits a single strategy and tests removeScaledShares() function reverts when sharesAmount is + * @notice deposits a single strategy and tests removeShares() function reverts when sharesAmount is * higher than depositAmount */ function testFuzz_Revert_ShareAmountTooHigh( address staker, uint256 depositAmount, - uint256 removeScaledSharesAmount + uint256 removeSharesAmount ) external filterFuzzedAddressInputs(staker) { cheats.assume(staker != address(0)); cheats.assume(depositAmount > 0 && depositAmount < dummyToken.totalSupply()); - cheats.assume(removeScaledSharesAmount > depositAmount); + cheats.assume(removeSharesAmount > depositAmount); IStrategy strategy = dummyStrat; _depositIntoStrategySuccessfully(strategy, staker, depositAmount); - cheats.expectRevert("StrategyManager._removeScaledShares: shareAmount too high"); - delegationManagerMock.removeScaledShares(strategyManager, staker, strategy, removeScaledSharesAmount); + cheats.expectRevert("StrategyManager._removeShares: shareAmount too high"); + delegationManagerMock.removeShares(strategyManager, staker, strategy, removeSharesAmount); } /** - * @notice deposit single strategy and removeScaledShares() for less than the deposited amount + * @notice deposit single strategy and removeShares() for less than the deposited amount * Shares should be updated correctly with stakerStrategyListLength unchanged */ function testFuzz_RemoveScaledSharesLessThanDeposit( address staker, uint256 depositAmount, - uint256 removeScaledSharesAmount + uint256 removeSharesAmount ) external filterFuzzedAddressInputs(staker) { cheats.assume(staker != address(0)); cheats.assume(depositAmount > 0 && depositAmount < dummyToken.totalSupply()); - cheats.assume(removeScaledSharesAmount > 0 && removeScaledSharesAmount < depositAmount); + cheats.assume(removeSharesAmount > 0 && removeSharesAmount < depositAmount); IStrategy strategy = dummyStrat; _depositIntoStrategySuccessfully(strategy, staker, depositAmount); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); - uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); - delegationManagerMock.removeScaledShares(strategyManager, staker, strategy, removeScaledSharesAmount); + uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); + delegationManagerMock.removeShares(strategyManager, staker, strategy, removeSharesAmount); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); - uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); - assertEq(sharesBefore, sharesAfter + removeScaledSharesAmount, "Remove incorrect amount of shares"); + uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); + assertEq(sharesBefore, sharesAfter + removeSharesAmount, "Remove incorrect amount of shares"); assertEq( stakerStrategyListLengthBefore, stakerStrategyListLengthAfter, @@ -872,7 +872,7 @@ contract StrategyManagerUnitTests_removeScaledShares is StrategyManagerUnitTests } /** - * @notice testing removeScaledShares() + * @notice testing removeShares() * deposits 1 strategy and tests it is removed from staker strategy list after removing all shares */ function testFuzz_RemovesStakerStrategyListSingleStrat( @@ -885,12 +885,12 @@ contract StrategyManagerUnitTests_removeScaledShares is StrategyManagerUnitTests _depositIntoStrategySuccessfully(strategy, staker, sharesAmount); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); - uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, strategy); + uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, strategy); assertEq(sharesBefore, sharesAmount, "Staker has not deposited amount into strategy"); - delegationManagerMock.removeScaledShares(strategyManager, staker, strategy, sharesAmount); + delegationManagerMock.removeShares(strategyManager, staker, strategy, sharesAmount); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); - uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, strategy); + uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, strategy); assertEq( stakerStrategyListLengthAfter, stakerStrategyListLengthBefore - 1, @@ -901,7 +901,7 @@ contract StrategyManagerUnitTests_removeScaledShares is StrategyManagerUnitTests } /** - * @notice testing removeScaledShares() function with 3 strategies deposited. + * @notice testing removeShares() function with 3 strategies deposited. * Randomly selects one of the 3 strategies to be fully removed from staker strategy list. * Only callable by DelegationManager */ @@ -925,14 +925,14 @@ contract StrategyManagerUnitTests_removeScaledShares is StrategyManagerUnitTests uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); uint256[] memory sharesBefore = new uint256[](3); for (uint256 i = 0; i < 3; ++i) { - sharesBefore[i] = strategyManager.stakerStrategyScaledShares(staker, strategies[i]); + sharesBefore[i] = strategyManager.stakerStrategyShares(staker, strategies[i]); assertEq(sharesBefore[i], amounts[i], "Staker has not deposited amount into strategy"); assertTrue(_isDepositedStrategy(staker, strategies[i]), "strategy should be deposited"); } - delegationManagerMock.removeScaledShares(strategyManager, staker, removeStrategy, removeAmount); + delegationManagerMock.removeShares(strategyManager, staker, removeStrategy, removeAmount); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); - uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, removeStrategy); + uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, removeStrategy); assertEq( stakerStrategyListLengthAfter, stakerStrategyListLengthBefore - 1, @@ -946,7 +946,7 @@ contract StrategyManagerUnitTests_removeScaledShares is StrategyManagerUnitTests } /** - * @notice testing removeScaledShares() function with 3 strategies deposited. + * @notice testing removeShares() function with 3 strategies deposited. * Removing Shares could result in removing from staker strategy list if depositAmounts[i] == sharesAmounts[i]. * Only callable by DelegationManager */ @@ -961,7 +961,7 @@ contract StrategyManagerUnitTests_removeScaledShares is StrategyManagerUnitTests depositAmounts[i] = bound(depositAmounts[i], 1, strategies[i].underlyingToken().totalSupply()); sharesAmounts[i] = bound(sharesAmounts[i], 1, depositAmounts[i]); _depositIntoStrategySuccessfully(strategies[i], staker, depositAmounts[i]); - sharesBefore[i] = strategyManager.stakerStrategyScaledShares(staker, strategies[i]); + sharesBefore[i] = strategyManager.stakerStrategyShares(staker, strategies[i]); assertEq(sharesBefore[i], depositAmounts[i], "Staker has not deposited amount into strategy"); assertTrue(_isDepositedStrategy(staker, strategies[i]), "strategy should be deposited"); } @@ -970,11 +970,11 @@ contract StrategyManagerUnitTests_removeScaledShares is StrategyManagerUnitTests uint256 numPoppedStrategies = 0; uint256[] memory sharesAfter = new uint256[](3); for (uint256 i = 0; i < 3; ++i) { - delegationManagerMock.removeScaledShares(strategyManager, staker, strategies[i], sharesAmounts[i]); + delegationManagerMock.removeShares(strategyManager, staker, strategies[i], sharesAmounts[i]); } for (uint256 i = 0; i < 3; ++i) { - sharesAfter[i] = strategyManager.stakerStrategyScaledShares(staker, strategies[i]); + sharesAfter[i] = strategyManager.stakerStrategyShares(staker, strategies[i]); if (sharesAmounts[i] == depositAmounts[i]) { ++numPoppedStrategies; assertFalse( @@ -1002,22 +1002,22 @@ contract StrategyManagerUnitTests_removeScaledShares is StrategyManagerUnitTests } } -contract StrategyManagerUnitTests_addScaledShares is StrategyManagerUnitTests { +contract StrategyManagerUnitTests_addShares is StrategyManagerUnitTests { function test_Revert_DelegationManagerModifier() external { DelegationManagerMock invalidDelegationManager = new DelegationManagerMock(); cheats.expectRevert("StrategyManager.onlyDelegationManager: not the DelegationManager"); - invalidDelegationManager.addScaledShares(strategyManager, address(this), dummyToken, dummyStrat, 1); + invalidDelegationManager.addShares(strategyManager, address(this), dummyToken, dummyStrat, 1); } function testFuzz_Revert_StakerZeroAddress(uint256 amount) external { - cheats.expectRevert("StrategyManager._addScaledShares: staker cannot be zero address"); - delegationManagerMock.addScaledShares(strategyManager, address(0), dummyToken, dummyStrat, amount); + cheats.expectRevert("StrategyManager._addShares: staker cannot be zero address"); + delegationManagerMock.addShares(strategyManager, address(0), dummyToken, dummyStrat, amount); } function testFuzz_Revert_ZeroShares(address staker) external filterFuzzedAddressInputs(staker) { cheats.assume(staker != address(0)); - cheats.expectRevert("StrategyManager._addScaledShares: shares should not be zero!"); - delegationManagerMock.addScaledShares(strategyManager, staker, dummyToken, dummyStrat, 0); + cheats.expectRevert("StrategyManager._addShares: shares should not be zero!"); + delegationManagerMock.addShares(strategyManager, staker, dummyToken, dummyStrat, 0); } function testFuzz_AppendsStakerStrategyList( @@ -1026,13 +1026,13 @@ contract StrategyManagerUnitTests_addScaledShares is StrategyManagerUnitTests { ) external filterFuzzedAddressInputs(staker) { cheats.assume(staker != address(0) && amount != 0); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); - uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); + uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, dummyStrat); assertEq(sharesBefore, 0, "Staker has already deposited into this strategy"); assertFalse(_isDepositedStrategy(staker, dummyStrat), "strategy should not be deposited"); - delegationManagerMock.addScaledShares(strategyManager, staker, dummyToken, dummyStrat, amount); + delegationManagerMock.addShares(strategyManager, staker, dummyToken, dummyStrat, amount); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); - uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); + uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, dummyStrat); assertEq( stakerStrategyListLengthAfter, stakerStrategyListLengthBefore + 1, @@ -1051,13 +1051,13 @@ contract StrategyManagerUnitTests_addScaledShares is StrategyManagerUnitTests { IStrategy strategy = dummyStrat; _depositIntoStrategySuccessfully(strategy, staker, initialAmount); uint256 stakerStrategyListLengthBefore = strategyManager.stakerStrategyListLength(staker); - uint256 sharesBefore = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); + uint256 sharesBefore = strategyManager.stakerStrategyShares(staker, dummyStrat); assertEq(sharesBefore, initialAmount, "Staker has not deposited amount into strategy"); assertTrue(_isDepositedStrategy(staker, strategy), "strategy should be deposited"); - delegationManagerMock.addScaledShares(strategyManager, staker, dummyToken, dummyStrat, sharesAmount); + delegationManagerMock.addShares(strategyManager, staker, dummyToken, dummyStrat, sharesAmount); uint256 stakerStrategyListLengthAfter = strategyManager.stakerStrategyListLength(staker); - uint256 sharesAfter = strategyManager.stakerStrategyScaledShares(staker, dummyStrat); + uint256 sharesAfter = strategyManager.stakerStrategyShares(staker, dummyStrat); assertEq( stakerStrategyListLengthAfter, stakerStrategyListLengthBefore, @@ -1068,7 +1068,7 @@ contract StrategyManagerUnitTests_addScaledShares is StrategyManagerUnitTests { } /** - * @notice When _addScaledShares() called either by depositIntoStrategy or addScaledShares() results in appending to + * @notice When _addShares() called either by depositIntoStrategy or addShares() results in appending to * stakerStrategyListLength when the staker has MAX_STAKER_STRATEGY_LIST_LENGTH strategies, it should revert */ function test_Revert_WhenMaxStrategyListLength() external { @@ -1104,10 +1104,10 @@ contract StrategyManagerUnitTests_addScaledShares is StrategyManagerUnitTests { ); cheats.prank(staker); - cheats.expectRevert("StrategyManager._addScaledShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH"); - delegationManagerMock.addScaledShares(strategyManager, staker, dummyToken, strategy, amount); + cheats.expectRevert("StrategyManager._addShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH"); + delegationManagerMock.addShares(strategyManager, staker, dummyToken, strategy, amount); - cheats.expectRevert("StrategyManager._addScaledShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH"); + cheats.expectRevert("StrategyManager._addShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH"); strategyManager.depositIntoStrategy(strategy, token, amount); } } @@ -1116,7 +1116,7 @@ contract StrategyManagerUnitTests_withdrawSharesAsTokens is StrategyManagerUnitT function test_Revert_DelegationManagerModifier() external { DelegationManagerMock invalidDelegationManager = new DelegationManagerMock(); cheats.expectRevert("StrategyManager.onlyDelegationManager: not the DelegationManager"); - invalidDelegationManager.removeScaledShares(strategyManager, address(this), dummyStrat, 1); + invalidDelegationManager.removeShares(strategyManager, address(this), dummyStrat, 1); } /** From 90c6630405019d3ee9b131d55e2054eb8f2da5f0 Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Sat, 7 Sep 2024 12:33:42 -0400 Subject: [PATCH 19/47] chore: cleanup and snapshots rename --- pkg/bindings/AVSDirectoryStorage/binding.go | 706 +++++++++--------- pkg/bindings/DelegationManager/binding.go | 579 +++++++++++--- pkg/bindings/EigenPodManager/binding.go | 10 +- pkg/bindings/IAVSDirectory/binding.go | 507 +++++++------ pkg/bindings/IDelegationFaucet/binding.go | 16 +- pkg/bindings/IWhitelister/binding.go | 16 +- pkg/bindings/RewardsCoordinator/binding.go | 2 +- pkg/bindings/SlashingConstants/binding.go | 327 ++++++++ src/contracts/core/AVSDirectory.sol | 14 +- src/contracts/core/AVSDirectoryStorage.sol | 10 +- src/contracts/core/DelegationManager.sol | 64 +- .../core/DelegationManagerStorage.sol | 7 +- src/contracts/core/StrategyManager.sol | 14 +- .../{Checkpoints.sol => Snapshots.sol} | 140 ++-- src/contracts/pods/EigenPodManagerStorage.sol | 3 - 15 files changed, 1567 insertions(+), 848 deletions(-) create mode 100644 pkg/bindings/SlashingConstants/binding.go rename src/contracts/libraries/{Checkpoints.sol => Snapshots.sol} (53%) diff --git a/pkg/bindings/AVSDirectoryStorage/binding.go b/pkg/bindings/AVSDirectoryStorage/binding.go index a76c0eb2a..b705c9766 100644 --- a/pkg/bindings/AVSDirectoryStorage/binding.go +++ b/pkg/bindings/AVSDirectoryStorage/binding.go @@ -52,7 +52,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryStorageMetaData contains all meta data concerning the AVSDirectoryStorage contract. var AVSDirectoryStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"INITIAL_TOTAL_MAGNITUDE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAGNITUDE_ADJUSTMENT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"allocationDelay\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"isSet\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateMagnitudeAllocationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"freeMagnitude\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"numToComplete\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashablePPM\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"linear\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint24[]\",\"internalType\":\"uint24[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initializeAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetMemberCount\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"registered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"lastDeregisteredTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"slashOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateFreeMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToComplete\",\"type\":\"uint8[]\",\"internalType\":\"uint8[]\"}],\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeAllocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToAllocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeDeallocationCompleted\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"freeMagnitudeAdded\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeQueueDeallocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToDeallocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"completableTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAGNITUDE_ADJUSTMENT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateMagnitudeAllocationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"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\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"numToComplete\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentSlashableMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"uint64[][]\",\"internalType\":\"uint64[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNumOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetsOfOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"uint64[][]\",\"internalType\":\"uint64[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashablePPM\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"linear\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint24[]\",\"internalType\":\"uint24[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudeAtTimestamp\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudesAtTimestamp\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"operatorMagnitudeInfo\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"nextPendingFreeMagnitudeIndex\",\"type\":\"uint192\",\"internalType\":\"uint192\"},{\"name\":\"freeMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetMemberAtIndex\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"registered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"lastDeregisteredTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOfAtIndex\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"slashOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateFreeMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToComplete\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeAllocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToAllocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeDeallocationCompleted\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"freeMagnitudeAdded\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeQueueDeallocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToDeallocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"completableTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false}]", } // AVSDirectoryStorageABI is the input ABI used to generate the binding from. @@ -232,37 +232,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) DOMAINTYPEHASH() ( return _AVSDirectoryStorage.Contract.DOMAINTYPEHASH(&_AVSDirectoryStorage.CallOpts) } -// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. -// -// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) INITIALTOTALMAGNITUDE(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "INITIAL_TOTAL_MAGNITUDE") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. -// -// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) INITIALTOTALMAGNITUDE() (uint64, error) { - return _AVSDirectoryStorage.Contract.INITIALTOTALMAGNITUDE(&_AVSDirectoryStorage.CallOpts) -} - -// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. -// -// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) INITIALTOTALMAGNITUDE() (uint64, error) { - return _AVSDirectoryStorage.Contract.INITIALTOTALMAGNITUDE(&_AVSDirectoryStorage.CallOpts) -} - // MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. // // Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) @@ -387,51 +356,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORSETREGISTR return _AVSDirectoryStorage.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) } -// AllocationDelay is a free data retrieval call binding the contract method 0xbe4e1fd3. -// -// Solidity: function allocationDelay(address ) view returns(bool isSet, uint32 allocationDelay) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) AllocationDelay(opts *bind.CallOpts, arg0 common.Address) (struct { - IsSet bool - AllocationDelay uint32 -}, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "allocationDelay", arg0) - - outstruct := new(struct { - IsSet bool - AllocationDelay uint32 - }) - if err != nil { - return *outstruct, err - } - - outstruct.IsSet = *abi.ConvertType(out[0], new(bool)).(*bool) - outstruct.AllocationDelay = *abi.ConvertType(out[1], new(uint32)).(*uint32) - - return *outstruct, err - -} - -// AllocationDelay is a free data retrieval call binding the contract method 0xbe4e1fd3. -// -// Solidity: function allocationDelay(address ) view returns(bool isSet, uint32 allocationDelay) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) AllocationDelay(arg0 common.Address) (struct { - IsSet bool - AllocationDelay uint32 -}, error) { - return _AVSDirectoryStorage.Contract.AllocationDelay(&_AVSDirectoryStorage.CallOpts, arg0) -} - -// AllocationDelay is a free data retrieval call binding the contract method 0xbe4e1fd3. -// -// Solidity: function allocationDelay(address ) view returns(bool isSet, uint32 allocationDelay) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) AllocationDelay(arg0 common.Address) (struct { - IsSet bool - AllocationDelay uint32 -}, error) { - return _AVSDirectoryStorage.Contract.AllocationDelay(&_AVSDirectoryStorage.CallOpts, arg0) -} - // AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. // // Solidity: function avsOperatorStatus(address , address ) view returns(uint8) @@ -623,10 +547,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) Delegation() (comm // Solidity: function domainSeparator() view returns(bytes32) func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 6b2ab7ed (build: bindings) err := _AVSDirectoryStorage.contract.Call(opts, &out, "domainSeparator") if err != nil { @@ -653,135 +573,117 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) DomainSeparator() return _AVSDirectoryStorage.Contract.DomainSeparator(&_AVSDirectoryStorage.CallOpts) } -<<<<<<< HEAD -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. // -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetNumOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetAllocatableMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getNumOperatorsInOperatorSet", operatorSet) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) -======= -// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. -// -// Solidity: function freeMagnitude(address , address ) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) FreeMagnitude(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint64, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "freeMagnitude", arg0, arg1) + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getAllocatableMagnitude", operator, strategy, numToComplete) if err != nil { return *new(uint64), err } out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) ->>>>>>> 6b2ab7ed (build: bindings) return out0, err } -<<<<<<< HEAD -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. // -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { - return _AVSDirectoryStorage.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet) +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { + return _AVSDirectoryStorage.Contract.GetAllocatableMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy, numToComplete) } -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. // -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { - return _AVSDirectoryStorage.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet) +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { + return _AVSDirectoryStorage.Contract.GetAllocatableMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy, numToComplete) } -// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. +// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. // -// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetOperatorSetsOfOperator(opts *bind.CallOpts, operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { +// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetCurrentSlashableMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getOperatorSetsOfOperator", operator, start, length) + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getCurrentSlashableMagnitudes", operator, strategies) if err != nil { - return *new([]IAVSDirectoryOperatorSet), err + return *new([]IAVSDirectoryOperatorSet), *new([][]uint64), err } out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) -======= -// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. + out1 := *abi.ConvertType(out[1], new([][]uint64)).(*[][]uint64) + + return out0, out1, err + +} + +// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. // -// Solidity: function freeMagnitude(address , address ) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) FreeMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { - return _AVSDirectoryStorage.Contract.FreeMagnitude(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetCurrentSlashableMagnitudes(operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { + return _AVSDirectoryStorage.Contract.GetCurrentSlashableMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies) } -// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. +// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. // -// Solidity: function freeMagnitude(address , address ) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) FreeMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { - return _AVSDirectoryStorage.Contract.FreeMagnitude(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetCurrentSlashableMagnitudes(operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { + return _AVSDirectoryStorage.Contract.GetCurrentSlashableMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies) } -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0xdd63ac60. +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetAllocatableMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetNumOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getAllocatableMagnitude", operator, strategy, numToComplete) + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getNumOperatorsInOperatorSet", operatorSet) if err != nil { - return *new(uint64), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0xdd63ac60. +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { - return _AVSDirectoryStorage.Contract.GetAllocatableMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy, numToComplete) +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + return _AVSDirectoryStorage.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet) } -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0xdd63ac60. +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { - return _AVSDirectoryStorage.Contract.GetAllocatableMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy, numToComplete) +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + return _AVSDirectoryStorage.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet) } -// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. // -// Solidity: function getAllocationDelay(address operator) view returns(uint32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetAllocationDelay(opts *bind.CallOpts, operator common.Address) (uint32, error) { +// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetOperatorSetsOfOperator(opts *bind.CallOpts, operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getAllocationDelay", operator) + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getOperatorSetsOfOperator", operator, start, length) if err != nil { - return *new(uint32), err + return *new([]IAVSDirectoryOperatorSet), err } -<<<<<<< HEAD - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) ->>>>>>> 6b2ab7ed (build: bindings) -======= - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) ->>>>>>> 49569901 (feat: set allocations (#691)) + out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) return out0, err } -<<<<<<< HEAD -<<<<<<< HEAD // GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. // // Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) @@ -827,57 +729,36 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetOperatorsInOper return _AVSDirectoryStorage.Contract.GetOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet, start, length) } -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. // -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { +// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetSlashableMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "inTotalOperatorSets", operator) + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getSlashableMagnitudes", operator, strategies, timestamp) if err != nil { - return *new(*big.Int), err + return *new([]IAVSDirectoryOperatorSet), *new([][]uint64), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err + out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) + out1 := *abi.ConvertType(out[1], new([][]uint64)).(*[][]uint64) -} + return out0, out1, err -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _AVSDirectoryStorage.Contract.InTotalOperatorSets(&_AVSDirectoryStorage.CallOpts, operator) } -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _AVSDirectoryStorage.Contract.InTotalOperatorSets(&_AVSDirectoryStorage.CallOpts, operator) -======= -// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. -======= -// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. ->>>>>>> 49569901 (feat: set allocations (#691)) +// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. // -// Solidity: function getAllocationDelay(address operator) view returns(uint32) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetAllocationDelay(operator common.Address) (uint32, error) { - return _AVSDirectoryStorage.Contract.GetAllocationDelay(&_AVSDirectoryStorage.CallOpts, operator) +// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetSlashableMagnitudes(operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { + return _AVSDirectoryStorage.Contract.GetSlashableMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies, timestamp) } -// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. // -<<<<<<< HEAD -// Solidity: function getSlashableBips(address operator, (address,uint32) operatorSet, address strategy, uint32 timestamp) view returns(uint16) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetSlashableBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategy common.Address, timestamp uint32) (uint16, error) { - return _AVSDirectoryStorage.Contract.GetSlashableBips(&_AVSDirectoryStorage.CallOpts, operator, operatorSet, strategy, timestamp) ->>>>>>> 6b2ab7ed (build: bindings) -======= -// Solidity: function getAllocationDelay(address operator) view returns(uint32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetAllocationDelay(operator common.Address) (uint32, error) { - return _AVSDirectoryStorage.Contract.GetAllocationDelay(&_AVSDirectoryStorage.CallOpts, operator) +// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetSlashableMagnitudes(operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { + return _AVSDirectoryStorage.Contract.GetSlashableMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies, timestamp) } // GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. @@ -909,7 +790,161 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetSlashablePPM(operator // Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetSlashablePPM(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { return _AVSDirectoryStorage.Contract.GetSlashablePPM(&_AVSDirectoryStorage.CallOpts, operator, operatorSet, strategies, timestamp, linear) ->>>>>>> 49569901 (feat: set allocations (#691)) +} + +// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. +// +// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetTotalMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getTotalMagnitude", operator, strategy) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. +// +// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetTotalMagnitude(operator common.Address, strategy common.Address) (uint64, error) { + return _AVSDirectoryStorage.Contract.GetTotalMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy) +} + +// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. +// +// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetTotalMagnitude(operator common.Address, strategy common.Address) (uint64, error) { + return _AVSDirectoryStorage.Contract.GetTotalMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy) +} + +// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. +// +// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetTotalMagnitudeAtTimestamp(opts *bind.CallOpts, operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getTotalMagnitudeAtTimestamp", operator, strategy, timestamp) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. +// +// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetTotalMagnitudeAtTimestamp(operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { + return _AVSDirectoryStorage.Contract.GetTotalMagnitudeAtTimestamp(&_AVSDirectoryStorage.CallOpts, operator, strategy, timestamp) +} + +// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. +// +// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetTotalMagnitudeAtTimestamp(operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { + return _AVSDirectoryStorage.Contract.GetTotalMagnitudeAtTimestamp(&_AVSDirectoryStorage.CallOpts, operator, strategy, timestamp) +} + +// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. +// +// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetTotalMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]uint64, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getTotalMagnitudes", operator, strategies) + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. +// +// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetTotalMagnitudes(operator common.Address, strategies []common.Address) ([]uint64, error) { + return _AVSDirectoryStorage.Contract.GetTotalMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies) +} + +// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. +// +// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetTotalMagnitudes(operator common.Address, strategies []common.Address) ([]uint64, error) { + return _AVSDirectoryStorage.Contract.GetTotalMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies) +} + +// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. +// +// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetTotalMagnitudesAtTimestamp(opts *bind.CallOpts, operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "getTotalMagnitudesAtTimestamp", operator, strategies, timestamp) + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. +// +// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetTotalMagnitudesAtTimestamp(operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { + return _AVSDirectoryStorage.Contract.GetTotalMagnitudesAtTimestamp(&_AVSDirectoryStorage.CallOpts, operator, strategies, timestamp) +} + +// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. +// +// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetTotalMagnitudesAtTimestamp(operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { + return _AVSDirectoryStorage.Contract.GetTotalMagnitudesAtTimestamp(&_AVSDirectoryStorage.CallOpts, operator, strategies, timestamp) +} + +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "inTotalOperatorSets", operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _AVSDirectoryStorage.Contract.InTotalOperatorSets(&_AVSDirectoryStorage.CallOpts, operator) +} + +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _AVSDirectoryStorage.Contract.InTotalOperatorSets(&_AVSDirectoryStorage.CallOpts, operator) } // IsMember is a free data retrieval call binding the contract method 0xda2ff05d. @@ -918,12 +953,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetSlashablePPM(op func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsMember(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { var out []interface{} err := _AVSDirectoryStorage.contract.Call(opts, &out, "isMember", operator, operatorSet) -<<<<<<< HEAD -======= - err := _AVSDirectoryStorage.contract.Call(opts, &out, "isMember", arg0, arg1, arg2) ->>>>>>> ce94473c (feat: operator commission bips (#627)) -======= ->>>>>>> 6b2ab7ed (build: bindings) if err != nil { return *new(bool), err @@ -1042,6 +1071,51 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsOperatorSlashabl return _AVSDirectoryStorage.Contract.IsOperatorSlashable(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) } +// OperatorMagnitudeInfo is a free data retrieval call binding the contract method 0xcb13e56b. +// +// Solidity: function operatorMagnitudeInfo(address , address ) view returns(uint192 nextPendingFreeMagnitudeIndex, uint64 freeMagnitude) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorMagnitudeInfo(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (struct { + NextPendingFreeMagnitudeIndex *big.Int + FreeMagnitude uint64 +}, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorMagnitudeInfo", arg0, arg1) + + outstruct := new(struct { + NextPendingFreeMagnitudeIndex *big.Int + FreeMagnitude uint64 + }) + if err != nil { + return *outstruct, err + } + + outstruct.NextPendingFreeMagnitudeIndex = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.FreeMagnitude = *abi.ConvertType(out[1], new(uint64)).(*uint64) + + return *outstruct, err + +} + +// OperatorMagnitudeInfo is a free data retrieval call binding the contract method 0xcb13e56b. +// +// Solidity: function operatorMagnitudeInfo(address , address ) view returns(uint192 nextPendingFreeMagnitudeIndex, uint64 freeMagnitude) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorMagnitudeInfo(arg0 common.Address, arg1 common.Address) (struct { + NextPendingFreeMagnitudeIndex *big.Int + FreeMagnitude uint64 +}, error) { + return _AVSDirectoryStorage.Contract.OperatorMagnitudeInfo(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + +// OperatorMagnitudeInfo is a free data retrieval call binding the contract method 0xcb13e56b. +// +// Solidity: function operatorMagnitudeInfo(address , address ) view returns(uint192 nextPendingFreeMagnitudeIndex, uint64 freeMagnitude) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorMagnitudeInfo(arg0 common.Address, arg1 common.Address) (struct { + NextPendingFreeMagnitudeIndex *big.Int + FreeMagnitude uint64 +}, error) { + return _AVSDirectoryStorage.Contract.OperatorMagnitudeInfo(&_AVSDirectoryStorage.CallOpts, arg0, arg1) +} + // OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // // Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) @@ -1073,8 +1147,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSaltIsSpen return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) } -<<<<<<< HEAD -<<<<<<< HEAD // OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. // // Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) @@ -1106,136 +1178,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetMemberA return _AVSDirectoryStorage.Contract.OperatorSetMemberAtIndex(&_AVSDirectoryStorage.CallOpts, operatorSet, index) } -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. -// -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetsMemberOfAtIndex(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetsMemberOfAtIndex", operator, index) - - if err != nil { - return *new(IAVSDirectoryOperatorSet), err - } - - out0 := *abi.ConvertType(out[0], new(IAVSDirectoryOperatorSet)).(*IAVSDirectoryOperatorSet) - - return out0, err - -} - -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. -// -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _AVSDirectoryStorage.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectoryStorage.CallOpts, operator, index) -} - -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. -// -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _AVSDirectoryStorage.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectoryStorage.CallOpts, operator, index) -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "becomeOperatorSetAVS") -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.BecomeOperatorSetAVS(&_AVSDirectoryStorage.TransactOpts) -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.BecomeOperatorSetAVS(&_AVSDirectoryStorage.TransactOpts) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) CancelSalt(opts *bind.TransactOpts, salt [32]byte) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "cancelSalt", salt) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.CancelSalt(&_AVSDirectoryStorage.TransactOpts, salt) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.CancelSalt(&_AVSDirectoryStorage.TransactOpts, salt) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "createOperatorSets", operatorSetIds) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.CreateOperatorSets(&_AVSDirectoryStorage.TransactOpts, operatorSetIds) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.CreateOperatorSets(&_AVSDirectoryStorage.TransactOpts, operatorSetIds) -} - -======= ->>>>>>> ce94473c (feat: operator commission bips (#627)) -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. -======= -// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. ->>>>>>> 6b2ab7ed (build: bindings) -// -// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetMemberCount(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (*big.Int, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetMemberCount", arg0, arg1) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. -// -// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetMemberCount(arg0 common.Address, arg1 uint32) (*big.Int, error) { - return _AVSDirectoryStorage.Contract.OperatorSetMemberCount(&_AVSDirectoryStorage.CallOpts, arg0, arg1) -} - -// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. -// -// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetMemberCount(arg0 common.Address, arg1 uint32) (*big.Int, error) { - return _AVSDirectoryStorage.Contract.OperatorSetMemberCount(&_AVSDirectoryStorage.CallOpts, arg0, arg1) -} - // OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. // // Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) @@ -1281,6 +1223,37 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetStatus( return _AVSDirectoryStorage.Contract.OperatorSetStatus(&_AVSDirectoryStorage.CallOpts, arg0, arg1, arg2) } +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetsMemberOfAtIndex(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + var out []interface{} + err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetsMemberOfAtIndex", operator, index) + + if err != nil { + return *new(IAVSDirectoryOperatorSet), err + } + + out0 := *abi.ConvertType(out[0], new(IAVSDirectoryOperatorSet)).(*IAVSDirectoryOperatorSet) + + return out0, err + +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _AVSDirectoryStorage.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectoryStorage.CallOpts, operator, index) +} + +// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// +// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { + return _AVSDirectoryStorage.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectoryStorage.CallOpts, operator, index) +} + // BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. // // Solidity: function becomeOperatorSetAVS() returns() @@ -1344,6 +1317,27 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) CreateOperator return _AVSDirectoryStorage.Contract.CreateOperatorSets(&_AVSDirectoryStorage.TransactOpts, operatorSetIds) } +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "deregisterOperatorFromAVS", operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) +} + +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. +// +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) +} + // DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. // // Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() @@ -1386,27 +1380,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) ForceDeregiste return _AVSDirectoryStorage.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, avs, operatorSetIds, operatorSignature) } -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. -// -// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) InitializeAllocationDelay(opts *bind.TransactOpts, operator common.Address, delay uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "initializeAllocationDelay", operator, delay) -} - -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. -// -// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) InitializeAllocationDelay(operator common.Address, delay uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.InitializeAllocationDelay(&_AVSDirectoryStorage.TransactOpts, operator, delay) -} - -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. -// -// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) InitializeAllocationDelay(operator common.Address, delay uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.InitializeAllocationDelay(&_AVSDirectoryStorage.TransactOpts, operator, delay) -} - // MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. // // Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() @@ -1449,6 +1422,27 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) ModifyAllocati return _AVSDirectoryStorage.Contract.ModifyAllocations(&_AVSDirectoryStorage.TransactOpts, operator, allocations, operatorSignature) } +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) +} + // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // // Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() @@ -1512,24 +1506,24 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) UpdateAVSMetad return _AVSDirectoryStorage.Contract.UpdateAVSMetadataURI(&_AVSDirectoryStorage.TransactOpts, metadataURI) } -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. // -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) UpdateFreeMagnitude(opts *bind.TransactOpts, operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) UpdateFreeMagnitude(opts *bind.TransactOpts, operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { return _AVSDirectoryStorage.contract.Transact(opts, "updateFreeMagnitude", operator, strategies, numToComplete) } -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. // -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { return _AVSDirectoryStorage.Contract.UpdateFreeMagnitude(&_AVSDirectoryStorage.TransactOpts, operator, strategies, numToComplete) } -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. // -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { return _AVSDirectoryStorage.Contract.UpdateFreeMagnitude(&_AVSDirectoryStorage.TransactOpts, operator, strategies, numToComplete) } diff --git a/pkg/bindings/DelegationManager/binding.go b/pkg/bindings/DelegationManager/binding.go index 27c91c8d8..5740ffc70 100644 --- a/pkg/bindings/DelegationManager/binding.go +++ b/pkg/bindings/DelegationManager/binding.go @@ -29,6 +29,12 @@ var ( _ = abi.ConvertType ) +// IDelegationManagerAllocationDelayDetails is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerAllocationDelayDetails struct { + IsSet bool + AllocationDelay uint32 +} + // IDelegationManagerOperatorDetails is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerOperatorDetails struct { DeprecatedEarningsReceiver common.Address @@ -45,13 +51,13 @@ type IDelegationManagerQueuedWithdrawalParams struct { // IDelegationManagerWithdrawal is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerWithdrawal struct { - Staker common.Address - DelegatedTo common.Address - Withdrawer common.Address - Nonce *big.Int - StartBlock uint32 - Strategies []common.Address - Shares []*big.Int + Staker common.Address + DelegatedTo common.Address + Withdrawer common.Address + Nonce *big.Int + StartTimestamp uint32 + Strategies []common.Address + ScaledShares []*big.Int } // ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. @@ -62,8 +68,8 @@ type ISignatureUtilsSignatureWithExpiry 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\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false}]", - Bin: "0x6101006040523480156200001257600080fd5b5060405162005c4638038062005c46833981016040819052620000359162000140565b6001600160a01b0380841660805280821660c052821660a0526200005862000065565b50504660e0525062000194565b600054610100900460ff1615620000d25760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000125576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200013d57600080fd5b50565b6000806000606084860312156200015657600080fd5b8351620001638162000127565b6020850151909350620001768162000127565b6040850151909250620001898162000127565b809150509250925092565b60805160a05160c05160e051615a1d6200022960003960006126a00152600081816105b10152818161102e015281816113aa01528181611c23015281816129f901528181613eac0152614398015260006107620152600081816104f901528181610ffc0152818161137801528181611cb701528181612ac601528181612c4901528181613fd2015261443e0152615a1d6000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a61035536600461484e565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a23660046148b4565b6109ce565b6103ba6103b536600461484e565b610a90565b604051610364919061490f565b6103da6103d53660046149ac565b610df9565b005b6103da6103ea3660046149ff565b610f3e565b6103da6103fd366004614a23565b610ff1565b6103da610410366004614a64565b6110a8565b6103da610423366004614a7d565b6111e7565b61035a6104363660046149ff565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004614a23565b6111fb565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004614ae8565b611229565b6103da6104bc366004614a23565b61136d565b61035a6104cf3660046149ff565b609b6020526000908152604090205481565b6103da6104ef366004614b8f565b61141d565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b6105413660046149ff565b6001600160a01b039081166000908152609960205260409020600101541690565b6105756105703660046149ff565b61155a565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da61157a565b61035a6105f3366004614e8c565b611641565b610575610606366004614ec8565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da610631366004614ef9565b611671565b6103da610644366004614a64565b61170c565b61051b6106573660046149ff565b609a602052600090815260409020546001600160a01b031681565b6105756106803660046149ff565b61171d565b6103da611757565b61035a61069b366004614f88565b609860209081526000928352604080842090915290825290205481565b6103da6106c6366004615069565b61176b565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd3660046150f9565b611997565b6040516103649190615183565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da610738366004615196565b611a71565b61035a61074b3660046149ff565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004614a64565b609e6020526000908152604090205460ff1681565b6105756107b53660046151cb565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec3660046149ff565b60a16020526000908152604090205481565b61086e61080c3660046149ff565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b23660046151f7565b611b43565b61035a62034bc081565b6108d46108cf3660046149ff565b611bfc565b604051610364929190615278565b6103ba6108f03660046149ff565b611fb4565b6103da61090336600461529d565b612478565b6103da6109163660046152f5565b612595565b6103da6109293660046149ff565b612626565b61035a61269c565b6103da610944366004614a64565b6126da565b609d54600090815b838110156109c657600060a1600087878581811061097157610971615311565b905060200201602081019061098691906149ff565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b506109bf8161533d565b9050610951565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a4c61269c565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610ac55760405162461bcd60e51b8152600401610abc90615358565b60405180910390fd5b6000836001600160401b03811115610adf57610adf614c31565b604051908082528060200260200182016040528015610b08578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610dee57868682818110610b4357610b43615311565b9050602002810190610b55919061538f565b610b639060208101906153af565b9050878783818110610b7757610b77615311565b9050602002810190610b89919061538f565b610b9390806153af565b905014610c085760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610abc565b33878783818110610c1b57610c1b615311565b9050602002810190610c2d919061538f565b610c3e9060608101906040016149ff565b6001600160a01b031614610cba5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610abc565b610dbf3383898985818110610cd157610cd1615311565b9050602002810190610ce3919061538f565b610cf49060608101906040016149ff565b8a8a86818110610d0657610d06615311565b9050602002810190610d18919061538f565b610d2290806153af565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610d6857610d68615311565b9050602002810190610d7a919061538f565b610d889060208101906153af565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061283692505050565b838281518110610dd157610dd1615311565b602090810291909101015280610de68161533d565b915050610b29565b509095945050505050565b610e023361155a565b15610e885760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610abc565b610e923384612df6565b604080518082019091526060815260006020820152610eb43380836000612fe9565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610eed91906153f8565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610f3092919061544a565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190615479565b6001600160a01b0316336001600160a01b031614610fe55760405162461bcd60e51b8152600401610abc90615496565b610fee8161327f565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110505750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61106c5760405162461bcd60e51b8152600401610abc906154e0565b6110758361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a181858585613376565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611114919061553d565b6111305760405162461bcd60e51b8152600401610abc9061555a565b606654818116146111a95760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6111ef6133f1565b6110a18484848461344b565b6001600160a01b0383166000908152609b602052604081205461122085828686611b43565b95945050505050565b600054610100900460ff16158080156112495750600054600160ff909116105b806112635750303b158015611263575060005460ff166001145b6112c65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610abc565b6000805460ff1916600117905580156112e9576000805461ff0019166101001790555b6112f38888613671565b6112fb61375b565b609755611307896137f2565b61131086613844565b61131c8585858561344b565b8015611362576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113cc5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6113e85760405162461bcd60e51b8152600401610abc906154e0565b6113f18361155a565b156110a3576001600160a01b038084166000908152609a6020526040902054166110a18185858561393e565b606654600290600490811614156114465760405162461bcd60e51b8152600401610abc90615358565b600260c95414156114995760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c95560005b88811015611549576115398a8a838181106114be576114be615311565b90506020028101906114d091906155a2565b8989848181106114e2576114e2615311565b90506020028101906114f491906153af565b89898681811061150657611506615311565b9050602002013588888781811061151f5761151f615311565b905060200201602081019061153491906155b8565b6139b9565b6115428161533d565b90506114a1565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e6919061553d565b6116025760405162461bcd60e51b8152600401610abc9061555a565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016116549190615649565b604051602081830303815290604052805190602001209050919050565b6066546002906004908116141561169a5760405162461bcd60e51b8152600401610abc90615358565b600260c95414156116ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610abc565b600260c9556116ff86868686866139b9565b5050600160c95550505050565b6117146133f1565b610fee81613844565b60006001600160a01b0382161580159061175157506001600160a01b038083166000818152609a6020526040902054909116145b92915050565b61175f6133f1565b61176960006137f2565b565b42836020015110156117ef5760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610abc565b6117f88561155a565b156118815760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610abc565b61188a8461171d565b6119165760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610abc565b6000609b6000876001600160a01b03166001600160a01b0316815260200190815260200160002054905060006119528783888860200151611b43565b6001600160a01b0388166000908152609b60205260409020600184019055855190915061198290889083906141a3565b61198e87878686612fe9565b50505050505050565b6060600082516001600160401b038111156119b4576119b4614c31565b6040519080825280602002602001820160405280156119dd578160200160208202803683370190505b50905060005b83518110156109c6576001600160a01b03851660009081526098602052604081208551909190869084908110611a1b57611a1b615311565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110611a5657611a56615311565b6020908102919091010152611a6a8161533d565b90506119e3565b611a7a3361171d565b611afc5760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610abc565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611b3792919061544a565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611bb961269c565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c90919061565c565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015611d00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d2891908101906156d0565b9150915060008313611d3f57909590945092505050565b606080835160001415611df9576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611db457611db4615311565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611de857611de8615311565b602002602001018181525050611fa7565b8351611e0690600161578a565b6001600160401b03811115611e1d57611e1d614c31565b604051908082528060200260200182016040528015611e46578160200160208202803683370190505b50915081516001600160401b03811115611e6257611e62614c31565b604051908082528060200260200182016040528015611e8b578160200160208202803683370190505b50905060005b8451811015611f2557848181518110611eac57611eac615311565b6020026020010151838281518110611ec657611ec6615311565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611ef857611ef8615311565b6020026020010151828281518110611f1257611f12615311565b6020908102919091010152600101611e91565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611f4a91906157a2565b81518110611f5a57611f5a615311565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611f8a91906157a2565b81518110611f9a57611f9a615311565b6020026020010181815250505b9097909650945050505050565b60665460609060019060029081161415611fe05760405162461bcd60e51b8152600401610abc90615358565b611fe98361155a565b6120695760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610abc565b6120728361171d565b156120e55760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610abc565b6001600160a01b0383166121615760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610abc565b6001600160a01b038084166000818152609a6020526040902054909116903314806121945750336001600160a01b038216145b806121bb57506001600160a01b038181166000908152609960205260409020600101541633145b61222d5760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610abc565b60008061223986611bfc565b9092509050336001600160a01b0387161461228f57826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b0319169055815161231157604080516000815260208101909152945061246f565b81516001600160401b0381111561232a5761232a614c31565b604051908082528060200260200182016040528015612353578160200160208202803683370190505b50945060005b825181101561246d576040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508483815181106123b9576123b9615311565b6020026020010151826000815181106123d4576123d4615311565b60200260200101906001600160a01b031690816001600160a01b03168152505083838151811061240657612406615311565b60200260200101518160008151811061242157612421615311565b60200260200101818152505061243a89878b8585612836565b88848151811061244c5761244c615311565b602002602001018181525050505080806124659061533d565b915050612359565b505b50505050919050565b6124813361155a565b156124ff5760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610abc565b6125088361171d565b6125895760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610abc565b6110a333848484612fe9565b61259e3361171d565b61261c5760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610abc565b610fee3382612df6565b61262e6133f1565b6001600160a01b0381166126935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abc565b610fee816137f2565b60007f00000000000000000000000000000000000000000000000000000000000000004614156126cd575060975490565b6126d561375b565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561272d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127519190615479565b6001600160a01b0316336001600160a01b0316146127815760405162461bcd60e51b8152600401610abc90615496565b6066541981196066541916146127ff5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610abc565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016111dc565b60006001600160a01b0386166128cd5760405162461bcd60e51b815260206004820152605060248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610abc565b82516129575760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610abc565b60005b8351811015612d04576001600160a01b038616156129b0576129b0868886848151811061298957612989615311565b60200260200101518685815181106129a3576129a3615311565b6020026020010151613376565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106129e0576129e0615311565b60200260200101516001600160a01b03161415612aa9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb8988858481518110612a3957612a39615311565b60200260200101516040518363ffffffff1660e01b8152600401612a729291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b50505050612cfc565b846001600160a01b0316876001600160a01b03161480612b7b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d858381518110612b0557612b05615311565b60200260200101516040518263ffffffff1660e01b8152600401612b3891906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b79919061553d565b155b612c475760405162461bcd60e51b8152602060048201526084602482018190527f44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734160448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610abc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e588868481518110612c8957612c89615311565b6020026020010151868581518110612ca357612ca3615311565b60200260200101516040518463ffffffff1660e01b8152600401612cc9939291906157b9565b600060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050505b60010161295a565b506001600160a01b0386166000908152609f60205260408120805491829190612d2c8361533d565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff1681526020018681526020018581525090506000612d9482611641565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f990612de290839085906157dd565b60405180910390a198975050505050505050565b6213c680612e0a60608301604084016157f6565b63ffffffff161115612ebf5760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610abc565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff1690612efb90606084019084016157f6565b63ffffffff161015612f915760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610abc565b6001600160a01b03821660009081526099602052604090208190612fb58282615833565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611b379084906153f8565b606654600090600190811614156130125760405162461bcd60e51b8152600401610abc90615358565b6001600160a01b038085166000908152609960205260409020600101541680158015906130485750336001600160a01b03821614155b801561305d5750336001600160a01b03861614155b156131ca5742846020015110156130dc5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156131765760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610abc565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516131b79088908890859088906109ce565b90506131c8828287600001516141a3565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061322988611bfc565b9150915060005b825181101561136257613277888a85848151811061325057613250615311565b602002602001015185858151811061326a5761326a615311565b602002602001015161393e565b600101613230565b6001600160a01b03811661330d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610abc565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038085166000908152609860209081526040808320938616835292905290812080548392906133ad9084906157a2565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610f30939291906157b9565b6033546001600160a01b031633146117695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610abc565b8281146134d35760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610abc565b8260005b818110156136695760008686838181106134f3576134f3615311565b905060200201602081019061350891906149ff565b6001600160a01b038116600090815260a1602052604081205491925086868581811061353657613536615311565b90506020020135905062034bc08111156135fa5760405162461bcd60e51b815260206004820152607360248201527f44656c65676174696f6e4d616e616765722e5f7365745374726174656779576960448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610abc565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806136629061533d565b90506134d7565b505050505050565b6065546001600160a01b031615801561369257506001600160a01b03821615155b6137145760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610abc565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26137578261327f565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc08111156138fd5760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610abc565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b0380851660009081526098602090815260408083209386168352929052908120805483929061397590849061578a565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610f30939291906157b9565b60006139c76105f387615896565b6000818152609e602052604090205490915060ff16613a485760405162461bcd60e51b815260206004820152604360248201526000805160206159c883398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610abc565b609d544390613a5d60a0890160808a016157f6565b63ffffffff16613a6d919061578a565b1115613af55760405162461bcd60e51b815260206004820152605f60248201526000805160206159c883398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61794260648201527f6c6f636b7320706572696f6420686173206e6f74207965742070617373656400608482015260a401610abc565b613b0560608701604088016149ff565b6001600160a01b0316336001600160a01b031614613b925760405162461bcd60e51b815260206004820152605060248201526000805160206159c883398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610abc565b8115613c1457613ba560a08701876153af565b85149050613c145760405162461bcd60e51b815260206004820152604260248201526000805160206159c883398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610abc565b6000818152609e60205260409020805460ff191690558115613d795760005b613c4060a08801886153af565b9050811015613d73574360a16000613c5b60a08b018b6153af565b85818110613c6b57613c6b615311565b9050602002016020810190613c8091906149ff565b6001600160a01b03168152602081019190915260400160002054613caa60a08a0160808b016157f6565b63ffffffff16613cba919061578a565b1115613cd85760405162461bcd60e51b8152600401610abc906158a2565b613d6b613ce860208901896149ff565b33613cf660a08b018b6153af565b85818110613d0657613d06615311565b9050602002016020810190613d1b91906149ff565b613d2860c08c018c6153af565b86818110613d3857613d38615311565b905060200201358a8a87818110613d5157613d51615311565b9050602002016020810190613d6691906149ff565b61435d565b600101613c33565b50614168565b336000908152609a60205260408120546001600160a01b0316905b613da160a08901896153af565b9050811015614165574360a16000613dbc60a08c018c6153af565b85818110613dcc57613dcc615311565b9050602002016020810190613de191906149ff565b6001600160a01b03168152602081019190915260400160002054613e0b60a08b0160808c016157f6565b63ffffffff16613e1b919061578a565b1115613e395760405162461bcd60e51b8152600401610abc906158a2565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0613e5b60a08a018a6153af565b83818110613e6b57613e6b615311565b9050602002016020810190613e8091906149ff565b6001600160a01b03161415613fd0576000613e9e60208a018a6149ff565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c83613edf60c08e018e6153af565b87818110613eef57613eef615311565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af1158015613f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f67919061565c565b6001600160a01b038084166000908152609a6020526040902054919250168015613fc857613fc88184613f9d60a08f018f6153af565b88818110613fad57613fad615311565b9050602002016020810190613fc291906149ff565b8561393e565b50505061415d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061401257614012615311565b905060200201602081019061402791906149ff565b61403460a08d018d6153af565b8681811061404457614044615311565b905060200201602081019061405991906149ff565b61406660c08e018e6153af565b8781811061407657614076615311565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156140d657600080fd5b505af11580156140ea573d6000803e3d6000fd5b505050506001600160a01b0382161561415d5761415d823361410f60a08c018c6153af565b8581811061411f5761411f615311565b905060200201602081019061413491906149ff565b61414160c08d018d6153af565b8681811061415157614151615311565b9050602002013561393e565b600101613d94565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b156142bd57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906141e3908690869060040161592a565b602060405180830381865afa158015614200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142249190615987565b6001600160e01b031916146110a35760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610abc565b826001600160a01b03166142d1838361449d565b6001600160a01b0316146110a35760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610abc565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014156144085760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b1300906143d1908890889087906004016157b9565b600060405180830381600087803b1580156143eb57600080fd5b505af11580156143ff573d6000803e3d6000fd5b50505050614496565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b15801561448257600080fd5b505af1158015611362573d6000803e3d6000fd5b5050505050565b60008060006144ac85856144b9565b915091506109c681614529565b6000808251604114156144f05760208301516040840151606085015160001a6144e4878285856146e4565b94509450505050614522565b82516040141561451a576020830151604084015161450f8683836147d1565b935093505050614522565b506000905060025b9250929050565b600081600481111561453d5761453d6159b1565b14156145465750565b600181600481111561455a5761455a6159b1565b14156145a85760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610abc565b60028160048111156145bc576145bc6159b1565b141561460a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610abc565b600381600481111561461e5761461e6159b1565b14156146775760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610abc565b600481600481111561468b5761468b6159b1565b1415610fee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610abc565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561471b57506000905060036147c8565b8460ff16601b1415801561473357508460ff16601c14155b1561474457506000905060046147c8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614798573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147c1576000600192509250506147c8565b9150600090505b94509492505050565b6000806001600160ff1b038316816147ee60ff86901c601b61578a565b90506147fc878288856146e4565b935093505050935093915050565b60008083601f84011261481c57600080fd5b5081356001600160401b0381111561483357600080fd5b6020830191508360208260051b850101111561452257600080fd5b6000806020838503121561486157600080fd5b82356001600160401b0381111561487757600080fd5b6148838582860161480a565b90969095509350505050565b6001600160a01b0381168114610fee57600080fd5b80356148af8161488f565b919050565b600080600080600060a086880312156148cc57600080fd5b85356148d78161488f565b945060208601356148e78161488f565b935060408601356148f78161488f565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b818110156149475783518352928401929184019160010161492b565b50909695505050505050565b60006060828403121561496557600080fd5b50919050565b60008083601f84011261497d57600080fd5b5081356001600160401b0381111561499457600080fd5b60208301915083602082850101111561452257600080fd5b6000806000608084860312156149c157600080fd5b6149cb8585614953565b925060608401356001600160401b038111156149e657600080fd5b6149f28682870161496b565b9497909650939450505050565b600060208284031215614a1157600080fd5b8135614a1c8161488f565b9392505050565b600080600060608486031215614a3857600080fd5b8335614a438161488f565b92506020840135614a538161488f565b929592945050506040919091013590565b600060208284031215614a7657600080fd5b5035919050565b60008060008060408587031215614a9357600080fd5b84356001600160401b0380821115614aaa57600080fd5b614ab68883890161480a565b90965094506020870135915080821115614acf57600080fd5b50614adc8782880161480a565b95989497509550505050565b60008060008060008060008060c0898b031215614b0457600080fd5b8835614b0f8161488f565b97506020890135614b1f8161488f565b9650604089013595506060890135945060808901356001600160401b0380821115614b4957600080fd5b614b558c838d0161480a565b909650945060a08b0135915080821115614b6e57600080fd5b50614b7b8b828c0161480a565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215614bab57600080fd5b88356001600160401b0380821115614bc257600080fd5b614bce8c838d0161480a565b909a50985060208b0135915080821115614be757600080fd5b614bf38c838d0161480a565b909850965060408b0135915080821115614c0c57600080fd5b614c188c838d0161480a565b909650945060608b0135915080821115614b6e57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614c6957614c69614c31565b60405290565b604080519081016001600160401b0381118282101715614c6957614c69614c31565b604051601f8201601f191681016001600160401b0381118282101715614cb957614cb9614c31565b604052919050565b63ffffffff81168114610fee57600080fd5b80356148af81614cc1565b60006001600160401b03821115614cf757614cf7614c31565b5060051b60200190565b600082601f830112614d1257600080fd5b81356020614d27614d2283614cde565b614c91565b82815260059290921b84018101918181019086841115614d4657600080fd5b8286015b84811015614d6a578035614d5d8161488f565b8352918301918301614d4a565b509695505050505050565b600082601f830112614d8657600080fd5b81356020614d96614d2283614cde565b82815260059290921b84018101918181019086841115614db557600080fd5b8286015b84811015614d6a5780358352918301918301614db9565b600060e08284031215614de257600080fd5b614dea614c47565b9050614df5826148a4565b8152614e03602083016148a4565b6020820152614e14604083016148a4565b604082015260608201356060820152614e2f60808301614cd3565b608082015260a08201356001600160401b0380821115614e4e57600080fd5b614e5a85838601614d01565b60a084015260c0840135915080821115614e7357600080fd5b50614e8084828501614d75565b60c08301525092915050565b600060208284031215614e9e57600080fd5b81356001600160401b03811115614eb457600080fd5b614ec084828501614dd0565b949350505050565b600060208284031215614eda57600080fd5b813560ff81168114614a1c57600080fd5b8015158114610fee57600080fd5b600080600080600060808688031215614f1157600080fd5b85356001600160401b0380821115614f2857600080fd5b9087019060e0828a031215614f3c57600080fd5b90955060208701359080821115614f5257600080fd5b50614f5f8882890161480a565b909550935050604086013591506060860135614f7a81614eeb565b809150509295509295909350565b60008060408385031215614f9b57600080fd5b8235614fa68161488f565b91506020830135614fb68161488f565b809150509250929050565b600060408284031215614fd357600080fd5b614fdb614c6f565b905081356001600160401b0380821115614ff457600080fd5b818401915084601f83011261500857600080fd5b813560208282111561501c5761501c614c31565b61502e601f8301601f19168201614c91565b9250818352868183860101111561504457600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561508157600080fd5b853561508c8161488f565b9450602086013561509c8161488f565b935060408601356001600160401b03808211156150b857600080fd5b6150c489838a01614fc1565b945060608801359150808211156150da57600080fd5b506150e788828901614fc1565b95989497509295608001359392505050565b6000806040838503121561510c57600080fd5b82356151178161488f565b915060208301356001600160401b0381111561513257600080fd5b61513e85828601614d01565b9150509250929050565b600081518084526020808501945080840160005b838110156151785781518752958201959082019060010161515c565b509495945050505050565b602081526000614a1c6020830184615148565b600080602083850312156151a957600080fd5b82356001600160401b038111156151bf57600080fd5b6148838582860161496b565b600080604083850312156151de57600080fd5b82356151e98161488f565b946020939093013593505050565b6000806000806080858703121561520d57600080fd5b84356152188161488f565b935060208501359250604085013561522f8161488f565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156151785781516001600160a01b031687529582019590820190600101615253565b60408152600061528b604083018561523f565b82810360208401526112208185615148565b6000806000606084860312156152b257600080fd5b83356152bd8161488f565b925060208401356001600160401b038111156152d857600080fd5b6152e486828701614fc1565b925050604084013590509250925092565b60006060828403121561530757600080fd5b614a1c8383614953565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561535157615351615327565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e198336030181126153a557600080fd5b9190910192915050565b6000808335601e198436030181126153c657600080fd5b8301803591506001600160401b038211156153e057600080fd5b6020019150600581901b360382131561452257600080fd5b6060810182356154078161488f565b6001600160a01b0390811683526020840135906154238261488f565b166020830152604083013561543781614cc1565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561548b57600080fd5b8151614a1c8161488f565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b60006020828403121561554f57600080fd5b8151614a1c81614eeb565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000823560de198336030181126153a557600080fd5b6000602082840312156155ca57600080fd5b8135614a1c81614eeb565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a085015261563060e085018261523f565b905060c083015184820360c08601526112208282615148565b602081526000614a1c60208301846155d5565b60006020828403121561566e57600080fd5b5051919050565b600082601f83011261568657600080fd5b81516020615696614d2283614cde565b82815260059290921b840181019181810190868411156156b557600080fd5b8286015b84811015614d6a57805183529183019183016156b9565b600080604083850312156156e357600080fd5b82516001600160401b03808211156156fa57600080fd5b818501915085601f83011261570e57600080fd5b8151602061571e614d2283614cde565b82815260059290921b8401810191818101908984111561573d57600080fd5b948201945b838610156157645785516157558161488f565b82529482019490820190615742565b9188015191965090935050508082111561577d57600080fd5b5061513e85828601615675565b6000821982111561579d5761579d615327565b500190565b6000828210156157b4576157b4615327565b500390565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000614ec060408301846155d5565b60006020828403121561580857600080fd5b8135614a1c81614cc1565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561583e8161488f565b6158488183615813565b5060018101602083013561585b8161488f565b6158658183615813565b50604083013561587481614cc1565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006117513683614dd0565b6020808252606e908201526000805160206159c883398151915260408201527f645769746864726177616c3a207769746864726177616c44656c6179426c6f6360608201527f6b7320706572696f6420686173206e6f74207965742070617373656420666f7260808201526d207468697320737472617465677960901b60a082015260c00190565b82815260006020604081840152835180604085015260005b8181101561595e57858101830151858201606001528201615942565b81811115615970576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561599957600080fd5b81516001600160e01b031981168114614a1c57600080fd5b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f636f6d706c6574655175657565a26469706673582212201a88ea42e4cac4dd0831a1f8bfe22cc6c2ba4c8776376923419ad9ee255481f164736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"startTimestamp\",\"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\":\"structIDelegationManager.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\":\"startTimestamp\",\"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\":\"structIDelegationManager.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\":\"startTimestamp\",\"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\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"removedShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawableStakerShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"existingShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addedShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeAllocationDelay\",\"inputs\":[{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"minWithdrawalDelay\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minWithdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.AllocationDelayDetails\",\"components\":[{\"name\":\"isSet\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorScaledShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelays\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerScalingFactors\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelays\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyWithdrawalDelaySet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false}]", + Bin: "0x6101206040523480156200001257600080fd5b506040516200745438038062007454833981016040819052620000359162000149565b6001600160a01b0380851660a05280831660e05280841660c05281166080526200005e6200006e565b5050466101005250620001b19050565b600054610100900460ff1615620000db5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200012e576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014657600080fd5b50565b600080600080608085870312156200016057600080fd5b84516200016d8162000130565b6020860151909450620001808162000130565b6040860151909350620001938162000130565b6060860151909250620001a68162000130565b939692955090935050565b60805160a05160c05160e051610100516171af620002a56000396000612ba601526000818161062a0152818161117d0152818161158f01528181611f8601528181612c750152818161327301528181613603015281816155d50152615b72015260006108f401526000818161055f0152818161114b0152818161155d0152818161201a01528181612d1c015281816132fe01528181613681015281816137f2015281816156bd0152615c1801526000818161074e01528181610e810152818161120501528181611617015281816119d8015281816126bd01528181612e12015281816147780152614f6a01526171af6000f3fe608060405234801561001057600080fd5b50600436106103c55760003560e01c806365da1264116101ff578063b7f06ebe1161011a578063da8be864116100ad578063f2fde38b1161007c578063f2fde38b14610abe578063f698da2514610ad1578063f878776e14610ad9578063fabc1cbc14610af957600080fd5b8063da8be86414610a72578063e4cc3f9014610a85578063eea9064b14610a98578063f16172b014610aab57600080fd5b8063c5e480db116100e9578063c5e480db14610990578063c94b511114610a36578063ca661c0414610a49578063cf80873e14610a5157600080fd5b8063b7f06ebe14610916578063bb45fef214610939578063c448feb814610967578063c488375a1461097057600080fd5b80638da5cb5b116101925780639fb4ee32116101615780639fb4ee321461089a578063a1788484146108c5578063a238f9df146108e5578063b1344271146108ef57600080fd5b80638da5cb5b146108485780639104c319146108595780639435bb431461087457806399be81c81461088757600080fd5b8063778e55f3116101ce578063778e55f31461078b5780637f5480711461079e578063886f1195146107b157806389829397146107c457600080fd5b806365da1264146107205780636b3aa72e146107495780636d70f7ae14610770578063715018a61461078357600080fd5b806339b70e38116102ef57806350739be3116102825780635ac86ab7116102515780635ac86ab7146106cf5780635c975abb146106f2578063635bbd10146106fa578063651878101461070d57600080fd5b806350739be31461066957806351260e2314610689578063595c6a67146106b4578063597b36da146106bc57600080fd5b806343377382116102be57806343377382146105fe5780634665bcda14610625578063497300601461064c5780634fc40b611461065f57600080fd5b806339b70e381461055a5780633c651cf2146105995780633cdeb5e0146105ac5780633e28391d146105db57600080fd5b8063132d4967116103675780631bbce091116103365780631bbce091146104ed57806320606b701461050057806322bf40e41461052757806329c77d4f1461053a57600080fd5b8063132d49671461047b578063136439dd1461048e5780631522bf02146104a157806316928365146104b457600080fd5b80630d5b0067116103a35780630d5b00671461042a5780630dd8dd02146104335780630de5495d1461045357806310d67a2f1461046857600080fd5b80630449ca39146103ca57806304a4f979146103f05780630b9f487a14610417575b600080fd5b6103dd6103d8366004615dda565b610b0c565b6040519081526020015b60405180910390f35b6103dd7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6103dd610425366004615e40565b610b91565b6103dd60a25481565b610446610441366004615dda565b610c53565b6040516103e79190615e9b565b610466610461366004615efc565b611084565b005b610466610476366004615f19565b611090565b610466610489366004615f36565b611140565b61046661049c366004615f77565b611287565b6104666104af366004615f90565b6113c6565b6103dd6104c2366004615f19565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b6103dd6104fb366004615f36565b6113e0565b6103dd7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b610466610535366004615ffb565b61140e565b6103dd610548366004615f19565b609b6020526000908152604090205481565b6105817f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103e7565b6104666105a73660046160a2565b611552565b6105816105ba366004615f19565b6001600160a01b039081166000908152609960205260409020600101541690565b6105ee6105e9366004615f19565b6116d3565b60405190151581526020016103e7565b6103dd7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b6105817f000000000000000000000000000000000000000000000000000000000000000081565b61046661065a366004616141565b6116f3565b6103dd6213c68081565b6103dd610677366004615f19565b60a36020526000908152604090205481565b6103dd610697366004616198565b60a460209081526000928352604080842090915290825290205481565b610466611842565b6103dd6106ca36600461640f565b611909565b6105ee6106dd366004616443565b606654600160ff9092169190911b9081161490565b6066546103dd565b610466610708366004615f77565b611939565b61046661071b366004615f90565b61194a565b61058161072e366004615f19565b609a602052600090815260409020546001600160a01b031681565b6105817f000000000000000000000000000000000000000000000000000000000000000081565b6105ee61077e366004615f19565b61195e565b610466611998565b6103dd610799366004616198565b6119ac565b6104666107ac36600461650e565b611a7e565b606554610581906001600160a01b031681565b6108256107d2366004615f19565b6040805180820190915260008082526020820152506001600160a01b0316600090815260a5602090815260409182902082518084019093525460ff811615158352610100900463ffffffff169082015290565b6040805182511515815260209283015163ffffffff1692810192909252016103e7565b6033546001600160a01b0316610581565b61058173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61046661088236600461659e565b611ca1565b610466610895366004616637565b611dc3565b6103dd6108a8366004616198565b609860209081526000928352604080842090915290825290205481565b6103dd6108d3366004615f19565b609f6020526000908152604090205481565b6103dd62278d0081565b6105817f000000000000000000000000000000000000000000000000000000000000000081565b6105ee610924366004615f77565b609e6020526000908152604090205460ff1681565b6105ee61094736600461666c565b609c60209081526000928352604080842090915290825290205460ff1681565b6103dd609d5481565b6103dd61097e366004615f19565b60a16020526000908152604090205481565b610a0061099e366004615f19565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff16908201526060016103e7565b6103dd610a44366004616698565b611e95565b6103dd611f4e565b610a64610a5f366004615f19565b611f5f565b6040516103e7929190616754565b610446610a80366004615f19565b612317565b610466610a93366004616787565b6128e5565b610466610aa636600461680a565b61297e565b610466610ab9366004616862565b612a9b565b610466610acc366004615f19565b612b2c565b6103dd612ba2565b610aec610ae736600461687e565b612be0565b6040516103e791906168d2565b610466610b07366004615f77565b612f5c565b609d54600090815b83811015610b8957600060a16000878785818110610b3457610b346168e5565b9050602002016020810190610b499190615f19565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811115610b78578092505b50610b8281616911565b9050610b14565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610c0f612ba2565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610c885760405162461bcd60e51b8152600401610c7f9061692c565b60405180910390fd5b6000836001600160401b03811115610ca257610ca26161d1565b604051908082528060200260200182016040528015610ccb578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b8581101561107957868682818110610d0657610d066168e5565b9050602002810190610d189190616963565b610d26906020810190616983565b9050878783818110610d3a57610d3a6168e5565b9050602002810190610d4c9190616963565b610d569080616983565b905014610dcb5760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610c7f565b33878783818110610dde57610dde6168e5565b9050602002810190610df09190616963565b610e01906060810190604001615f19565b6001600160a01b031614610e7d5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610c7f565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166339a9a3ed848a8a86818110610ec157610ec16168e5565b9050602002810190610ed39190616963565b610edd9080616983565b6040518463ffffffff1660e01b8152600401610efb93929190616a0a565b600060405180830381865afa158015610f18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f409190810190616a46565b905061104933848a8a86818110610f5957610f596168e5565b9050602002810190610f6b9190616963565b610f7c906060810190604001615f19565b8b8b87818110610f8e57610f8e6168e5565b9050602002810190610fa09190616963565b610faa9080616983565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508f92508e9150899050818110610ff057610ff06168e5565b90506020028101906110029190616963565b611010906020810190616983565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506130b8915050565b84838151811061105b5761105b6168e5565b6020908102919091010152508061107181616911565b915050610cec565b509095945050505050565b61108d8161398f565b50565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111079190616add565b6001600160a01b0316336001600160a01b0316146111375760405162461bcd60e51b8152600401610c7f90616afa565b61108d81613b24565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061119f5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6111bb5760405162461bcd60e51b8152600401610c7f90616b44565b6111c4836116d3565b15611282576001600160a01b038381166000908152609a6020526040808220549051635a3932f160e11b8152908316600482018190528584166024830152927f0000000000000000000000000000000000000000000000000000000000000000169063b47265e290604401602060405180830381865afa15801561124c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112709190616ba1565b905061127f8286868685613c1b565b50505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156112cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f39190616bbc565b61130f5760405162461bcd60e51b8152600401610c7f90616bd9565b606654818116146113885760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610c7f565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6113ce613cb7565b6113da84848484613d11565b50505050565b6001600160a01b0383166000908152609b602052604081205461140585828686611e95565b95945050505050565b600054610100900460ff161580801561142e5750600054600160ff909116105b806114485750303b158015611448575060005460ff166001145b6114ab5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c7f565b6000805460ff1916600117905580156114ce576000805461ff0019166101001790555b6114d88888613f1f565b6114e0614009565b6097556114ec896140a0565b6114f5866140f2565b61150185858585613d11565b8015611547576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806115b15750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6115cd5760405162461bcd60e51b8152600401610c7f90616b44565b6115d6846116d3565b156113da576001600160a01b038481166000908152609a6020526040808220549051635a3932f160e11b8152908316600482018190528684166024830152927f0000000000000000000000000000000000000000000000000000000000000000169063b47265e290604401602060405180830381865afa15801561165e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116829190616ba1565b9050600061169387878488886141f6565b6001600160a01b03808916600090815260a460209081526040808320938b1683529290522081905590506116ca83888887866142b1565b50505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b6116fc336116d3565b156117825760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610c7f565b61178c338561433d565b6040805180820190915260608152600060208201526117ae3380836000614530565b6117b78461398f565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2866040516117f09190616c21565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051611833929190616c73565b60405180910390a25050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561188a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ae9190616bbc565b6118ca5760405162461bcd60e51b8152600401610c7f90616bd9565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60008160405160200161191c9190616d16565b604051602081830303815290604052805190602001209050919050565b611941613cb7565b61108d816140f2565b611952613cb7565b6113da84848484614947565b60006001600160a01b0382161580159061199257506001600160a01b038083166000818152609a6020526040902054909116145b92915050565b6119a0613cb7565b6119aa60006140a0565b565b604051635a3932f160e11b81526001600160a01b038381166004830152828116602483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063b47265e290604401602060405180830381865afa158015611a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a439190616ba1565b6001600160a01b03808616600090815260986020908152604080832093881683529290522054909150611a769082614b20565b949350505050565b4283602001511015611b025760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610c7f565b611b0b856116d3565b15611b945760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610c7f565b611b9d8461195e565b611c295760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610c7f565b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611c658783888860200151611e95565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611c959088908390614b4f565b6116ca87878686614530565b60665460029060049081161415611cca5760405162461bcd60e51b8152600401610c7f9061692c565b600260cb541415611d1d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b600260cb5560005b86811015611db457611da4888883818110611d4257611d426168e5565b9050602002810190611d549190616d29565b878784818110611d6657611d666168e5565b9050602002810190611d789190616983565b878786818110611d8a57611d8a6168e5565b9050602002016020810190611d9f9190616d3f565b614d09565b611dad81616911565b9050611d25565b5050600160cb55505050505050565b611dcc3361195e565b611e4e5760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610c7f565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611e89929190616c73565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611f0b612ba2565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b611f5c600c62278d00616d5c565b81565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611fcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff39190616d7e565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015612063573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261208b9190810190616df2565b91509150600083136120a257909590945092505050565b60608083516000141561215c576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110612117576121176168e5565b60200260200101906001600160a01b031690816001600160a01b031681525050848160008151811061214b5761214b6168e5565b60200260200101818152505061230a565b8351612169906001616eb6565b6001600160401b03811115612180576121806161d1565b6040519080825280602002602001820160405280156121a9578160200160208202803683370190505b50915081516001600160401b038111156121c5576121c56161d1565b6040519080825280602002602001820160405280156121ee578160200160208202803683370190505b50905060005b84518110156122885784818151811061220f5761220f6168e5565b6020026020010151838281518110612229576122296168e5565b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061225b5761225b6168e5565b6020026020010151828281518110612275576122756168e5565b60209081029190910101526001016121f4565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600184516122ad9190616ece565b815181106122bd576122bd6168e5565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600184516122ed9190616ece565b815181106122fd576122fd6168e5565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811614156123435760405162461bcd60e51b8152600401610c7f9061692c565b61234c836116d3565b6123cc5760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610c7f565b6123d58361195e565b156124485760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610c7f565b6001600160a01b0383166124c45760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610c7f565b6001600160a01b038084166000818152609a6020526040902054909116903314806124f75750336001600160a01b038216145b8061251e57506001600160a01b038181166000908152609960205260409020600101541633145b6125905760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610c7f565b60008061259c86611f5f565b9092509050336001600160a01b038716146125f257826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516126745760408051600081526020810190915294506128dc565b81516001600160401b0381111561268d5761268d6161d1565b6040519080825280602002602001820160405280156126b6578160200160208202803683370190505b50945060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166339a9a3ed85856040518363ffffffff1660e01b8152600401612709929190616ee5565b600060405180830381865afa158015612726573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261274e9190810190616a46565b905060005b83518110156128d95760408051600180825281830190925260009160208083019080368337505060408051600180825281830190925292935060009291506020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508684815181106127d6576127d66168e5565b6020026020010151836000815181106127f1576127f16168e5565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110612823576128236168e5565b60200260200101518260008151811061283e5761283e6168e5565b60200260200101818152505084848151811061285c5761285c6168e5565b602002602001015181600081518110612877576128776168e5565b60200260200101906001600160401b031690816001600160401b0316815250506128a58b898d8686866130b8565b8a85815181106128b7576128b76168e5565b60200260200101818152505050505080806128d190616911565b915050612753565b50505b50505050919050565b6066546002906004908116141561290e5760405162461bcd60e51b8152600401610c7f9061692c565b600260cb5414156129615760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b600260cb5561297285858585614d09565b5050600160cb55505050565b612987336116d3565b15612a055760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610c7f565b612a0e8361195e565b612a8f5760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610c7f565b61128233848484614530565b612aa43361195e565b612b225760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610c7f565b61108d338261433d565b612b34613cb7565b6001600160a01b038116612b995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c7f565b61108d816140a0565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612bd3575060975490565b612bdb614009565b905090565b6001600160a01b038084166000908152609a602052604081205460609216905b83811015612f535773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0858583818110612c2f57612c2f6168e5565b9050602002016020810190612c449190615f19565b6001600160a01b03161415612d1a576040516360f4062b60e01b81526001600160a01b0387811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015612cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce29190616d7e565b90506000811315612cf35780612cf6565b60005b848381518110612d0857612d086168e5565b60200260200101818152505050612dff565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637a7e0d9287878785818110612d5c57612d5c6168e5565b9050602002016020810190612d719190615f19565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de09190616d7e565b838281518110612df257612df26168e5565b6020026020010181815250505b6001600160a01b03821615612f435760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b47265e284888886818110612e5257612e526168e5565b9050602002016020810190612e679190615f19565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190616ba1565b9050612f2387878785818110612eee57612eee6168e5565b9050602002016020810190612f039190615f19565b868581518110612f1557612f156168e5565b6020026020010151846150ab565b848381518110612f3557612f356168e5565b602002602001018181525050505b612f4c81616911565b9050612c00565b50509392505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd39190616add565b6001600160a01b0316336001600160a01b0316146130035760405162461bcd60e51b8152600401610c7f90616afa565b6066541981196066541916146130815760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610c7f565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016113bb565b60006001600160a01b03871661313d5760405162461bcd60e51b8152602060048201526050602482015260008051602061711a83398151915260448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610c7f565b83516131b55760405162461bcd60e51b815260206004820152604d602482015260008051602061711a83398151915260448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610c7f565b600084516001600160401b038111156131d0576131d06161d1565b6040519080825280602002602001820160405280156131f9578160200160208202803683370190505b50905060005b855181101561389b57600073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b031687838151811061323a5761323a6168e5565b60200260200101516001600160a01b031614156132fc576040516360f4062b60e01b81526001600160a01b038b811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa1580156132bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e09190616d7e565b905060008113156132f157806132f4565b60005b9150506133bc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637a7e0d928b89858151811061333e5761333e6168e5565b60200260200101516040518363ffffffff1660e01b81526004016133789291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015613395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b99190616d7e565b90505b6133fa8a8884815181106133d2576133d26168e5565b6020026020010151838886815181106133ed576133ed6168e5565b60200260200101516150ab565b86838151811061340c5761340c6168e5565b602002602001015111156134a65760405162461bcd60e51b8152602060048201526061602482015260008051602061711a83398151915260448201527f6e6451756575655769746864726177616c3a2073686172657320746f2077697460648201527f6864726177206578636565647320776974686472617761626c652073686172656084820152607360f81b60a482015260c401610c7f565b60006134cb8b8985815181106134be576134be6168e5565b60200260200101516150eb565b905060008061350d8986815181106134e5576134e56168e5565b6020026020010151848a8881518110613500576135006168e5565b6020026020010151615129565b9150915080868681518110613524576135246168e5565b60209081029190910101526001600160a01b038c1615613596576135968c8e8c8881518110613555576135556168e5565b60200260200101518c898151811061356f5761356f6168e5565b60200260200101518c8a81518110613589576135896168e5565b6020026020010151613c1b565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168a86815181106135c6576135c66168e5565b60200260200101516001600160a01b031614156136645760405163beffbb8960e01b81526001600160a01b038e81166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063beffbb8990604401600060405180830381600087803b15801561364757600080fd5b505af115801561365b573d6000803e3d6000fd5b5050505061388c565b8a6001600160a01b03168d6001600160a01b0316148061373657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d8b87815181106136c0576136c06168e5565b60200260200101516040518263ffffffff1660e01b81526004016136f391906001600160a01b0391909116815260200190565b602060405180830381865afa158015613710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137349190616bbc565b155b6137f05760405162461bcd60e51b81526020600482015260846024820181905260008051602061711a83398151915260448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610c7f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e58e8c8881518110613832576138326168e5565b6020026020010151856040518463ffffffff1660e01b815260040161385993929190616f09565b600060405180830381600087803b15801561387357600080fd5b505af1158015613887573d6000803e3d6000fd5b505050505b846001019450505050506131ff565b506001600160a01b0388166000908152609f602052604081208054918291906138c383616911565b919050555060006040518060e001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018381526020014263ffffffff168152602001888152602001848152509050600061392b82611909565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9906139799083908590616f2d565b60405180910390a19a9950505050505050505050565b6139983361195e565b613a305760405162461bcd60e51b815260206004820152605760248201527f44656c65676174696f6e4d616e616765722e5f696e697469616c697a65416c6c60448201527f6f636174696f6e44656c61793a206f70657261746f72206e6f7420726567697360648201527f746572656420746f20456967656e4c6179657220796574000000000000000000608482015260a401610c7f565b33600090815260a5602052604090205460ff1615613ac95760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f696e697469616c697a65416c6c60448201527f6f636174696f6e44656c61793a20616c6c6f636174696f6e2064656c617920616064820152691b1c9958591e481cd95d60b21b608482015260a401610c7f565b6040805180820182526001815263ffffffff928316602080830191825233600090815260a59091529290922090518154925164ffffffffff1990931690151564ffffffff001916176101009290931691909102919091179055565b6001600160a01b038116613bb25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610c7f565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000613c27838361518b565b6001600160a01b038088166000908152609860209081526040808320938916835292905290812080549293508392909190613c63908490616ece565b92505081905550856001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd868684604051613ca793929190616f09565b60405180910390a2505050505050565b6033546001600160a01b031633146119aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c7f565b828114613d875760405162461bcd60e51b815260206004820152604a602482015260008051602061715a83398151915260448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610c7f565b8260005b81811015613f17576000868683818110613da757613da76168e5565b9050602002016020810190613dbc9190615f19565b6001600160a01b038116600090815260a16020526040812054919250868685818110613dea57613dea6168e5565b905060200201359050600c62278d00613e039190616d5c565b811115613ea85760405162461bcd60e51b8152602060048201526073602482015260008051602061715a83398151915260448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610c7f565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a150505080613f1090616911565b9050613d8b565b505050505050565b6065546001600160a01b0316158015613f4057506001600160a01b03821615155b613fc25760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610c7f565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261400582613b24565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b614100600c62278d00616d5c565b8111156141b55760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610c7f565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b60008083614220576142196001600160401b038616670de0b6b3a7640000616d5c565b90506142a7565b600061422c88886150eb565b90506001600160401b0386166142428587616eb6565b61424c9190616f46565b61425e670de0b6b3a764000086616f46565b670de0b6b3a76400006001600160401b03891661427b8986616f46565b6142859190616f46565b61428f9190616d5c565b6142999190616eb6565b6142a39190616d5c565b9150505b9695505050505050565b60006142bd838361518b565b6001600160a01b0380881660009081526098602090815260408083209389168352929052908120805492935083929091906142f9908490616eb6565b92505081905550856001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c868684604051613ca793929190616f09565b6213c6806143516060830160408401615efc565b63ffffffff1611156144065760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610c7f565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff16906144429060608401908401615efc565b63ffffffff1610156144d85760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610c7f565b6001600160a01b038216600090815260996020526040902081906144fc8282616f85565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611e89908490616c21565b606654600090600190811614156145595760405162461bcd60e51b8152600401610c7f9061692c565b6001600160a01b0380851660009081526099602052604090206001015416801580159061458f5750336001600160a01b03821614155b80156145a45750336001600160a01b03861614155b156147115742846020015110156146235760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610c7f565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156146bd5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610c7f565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516146fe908890889085908890610b91565b905061470f82828760000151614b4f565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061477088611f5f565b9150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166339a9a3ed89856040518363ffffffff1660e01b81526004016147c4929190616ee5565b600060405180830381865afa1580156147e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148099190810190616a46565b905060005b835181101561493b5760006148728b86848151811061482f5761482f6168e5565b6020026020010151858581518110614849576148496168e5565b60200260200101516000888781518110614865576148656168e5565b60200260200101516141f6565b90508060a460008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106148ae576148ae6168e5565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506149328a8c8785815181106148f1576148f16168e5565b602002602001015187868151811061490b5761490b6168e5565b6020026020010151878781518110614925576149256168e5565b60200260200101516142b1565b5060010161480e565b50505050505050505050565b8281146149b85760405162461bcd60e51b81526020600482015260446024820181905260008051602061715a833981519152908201527f746864726177616c44656c61793a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610c7f565b8260005b81811015613f175760008686838181106149d8576149d86168e5565b90506020020160208101906149ed9190615f19565b6001600160a01b038116600090815260a36020526040812054919250868685818110614a1b57614a1b6168e5565b90506020020135905062278d00811115614ab15760405162461bcd60e51b8152602060048201526060602482015260008051602061715a83398151915260448201527f746864726177616c44656c61793a205f7769746864726177616c44656c61792060648201527f63616e6e6f74206265203e204d41585f5749544844524157414c5f44454c4159608482015260a401610c7f565b6001600160a01b038316600081815260a360209081526040918290208490558151928352820184905281018290527f4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e59060600160405180910390a150505080614b1990616911565b90506149bc565b6000670de0b6b3a7640000614b3e6001600160401b03841685616f46565b614b489190616d5c565b9392505050565b6001600160a01b0383163b15614c6957604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90614b8f9086908690600401616fe8565b602060405180830381865afa158015614bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bd09190617045565b6001600160e01b031916146112825760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610c7f565b826001600160a01b0316614c7d83836151a9565b6001600160a01b0316146112825760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610c7f565b6000614d176106ca8661706f565b6000818152609e602052604090205490915060ff16614d985760405162461bcd60e51b8152602060048201526043602482015260008051602061713a83398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610c7f565b60a2544390614dad60a0880160808901615efc565b63ffffffff16614dbd9190616eb6565b1115614e455760405162461bcd60e51b8152602060048201526059602482015260008051602061713a83398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61792060648201527f706572696f6420686173206e6f74207965742070617373656400000000000000608482015260a401610c7f565b614e556060860160408701615f19565b6001600160a01b0316336001600160a01b031614614ee25760405162461bcd60e51b8152602060048201526050602482015260008051602061713a83398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610c7f565b614eef60a0860186616983565b84149050614f5e5760405162461bcd60e51b8152602060048201526042602482015260008051602061713a83398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610c7f565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663858d0b47614f9f6040890160208a01615f19565b614fac60a08a018a616983565b62171240614fc060a08d0160808e01615efc565b614fca919061707b565b6040518563ffffffff1660e01b8152600401614fe994939291906170a3565b600060405180830381865afa158015615006573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261502e9190810190616a46565b9050821561504757615042868686846151c5565b615053565b615053868686846153bc565b6000828152609e602052604090819020805460ff19169055517fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9061509b9084815260200190565b60405180910390a1505050505050565b6000806150b886866150eb565b9050670de0b6b3a76400006001600160401b0384166150d78684616f46565b6150e19190616f46565b6142a79190616d5c565b6001600160a01b03808316600090815260a46020908152604080832093851683529290529081205480614b485750670de0b6b3a76400009392505050565b60008061513f6001600160401b03841685616f46565b6151586ec097ce7bc90715b34b9f100000000087616f46565b6151629190616d5c565b9150670de0b6b3a76400006151778587616f46565b6151819190616d5c565b9050935093915050565b60006001600160401b038216614b3e670de0b6b3a764000085616f46565b60008060006151b8858561590c565b91509150610b898161597c565b60005b6151d560a0860186616983565b905081101561127f574260a360006151f060a0890189616983565b85818110615200576152006168e5565b90506020020160208101906152159190615f19565b6001600160a01b0316815260208101919091526040016000205461523f60a0880160808901615efc565b63ffffffff1661524f9190616eb6565b11156152f95760405162461bcd60e51b815260206004820152606760248201527f44656c65676174696f6e4d616e616765722e5f636f6d706c657465526563656960448201527f76654173546f6b656e733a207769746864726177616c44656c6179207065726960648201527f6f6420686173206e6f74207965742070617373656420666f72207468697320736084820152667472617465677960c81b60a482015260c401610c7f565b600061534161530b60c0880188616983565b8481811061531b5761531b6168e5565b90506020020135848481518110615334576153346168e5565b6020026020010151614b20565b90506153b36153536020880188615f19565b3361536160a08a018a616983565b86818110615371576153716168e5565b90506020020160208101906153869190615f19565b84898988818110615399576153996168e5565b90506020020160208101906153ae9190615f19565b615b37565b506001016151c8565b336000908152609a60205260408120546001600160a01b0316905b6153e460a0870187616983565b9050811015613f17574360a360006153ff60a08a018a616983565b8581811061540f5761540f6168e5565b90506020020160208101906154249190615f19565b6001600160a01b0316815260208101919091526040016000205461544e60a0890160808a01615efc565b63ffffffff1661545e9190616eb6565b11156155085760405162461bcd60e51b815260206004820152606760248201527f44656c65676174696f6e4d616e616765722e5f636f6d706c657465526563656960448201527f766541735368617265733a207769746864726177616c44656c6179207065726960648201527f6f6420686173206e6f74207965742070617373656420666f72207468697320736084820152667472617465677960c81b60a482015260c401610c7f565b600061554361551a60c0890189616983565b8481811061552a5761552a6168e5565b90506020020135858481518110615334576153346168e5565b9050600073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061556960a08a018a616983565b85818110615579576155796168e5565b905060200201602081019061558e9190615f19565b6001600160a01b031614156156bb5760006155ac60208a018a615f19565b6040516303a041cf60e21b81526001600160a01b038083166004830152602482018690529192507f000000000000000000000000000000000000000000000000000000000000000090911690630e81073c9060440160408051808303816000875af115801561561f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061564391906170df565b6001600160a01b038084166000908152609a60205260409020549295509093501680156156b4576156b4818361567c60a08e018e616983565b8981811061568c5761568c6168e5565b90506020020160208101906156a19190615f19565b878b8a81518110614925576149256168e5565b5050615820565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea1338989878181106156fd576156fd6168e5565b90506020020160208101906157129190615f19565b61571f60a08d018d616983565b8881811061572f5761572f6168e5565b90506020020160208101906157449190615f19565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018590526084016020604051808303816000875af11580156157a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906157c59190616d7e565b90506001600160a01b038416156158205761582084336157e860a08c018c616983565b878181106157f8576157f86168e5565b905060200201602081019061580d9190615f19565b85898881518110614925576149256168e5565b600061588561583260208b018b615f19565b61583f60a08c018c616983565b8781811061584f5761584f6168e5565b90506020020160208101906158649190615f19565b888781518110615876576158766168e5565b602002602001015185876141f6565b90508060a4600061589960208d018d615f19565b6001600160a01b0316815260208101919091526040016000908120906158c260a08d018d616983565b888181106158d2576158d26168e5565b90506020020160208101906158e79190615f19565b6001600160a01b031681526020810191909152604001600020555050506001016153d7565b6000808251604114156159435760208301516040840151606085015160001a61593787828585615c70565b94509450505050615975565b82516040141561596d5760208301516040840151615962868383615d5d565b935093505050615975565b506000905060025b9250929050565b600081600481111561599057615990617103565b14156159995750565b60018160048111156159ad576159ad617103565b14156159fb5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610c7f565b6002816004811115615a0f57615a0f617103565b1415615a5d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610c7f565b6003816004811115615a7157615a71617103565b1415615aca5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610c7f565b6004816004811115615ade57615ade617103565b141561108d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610c7f565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac01415615be25760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b130090615bab90889088908790600401616f09565b600060405180830381600087803b158015615bc557600080fd5b505af1158015615bd9573d6000803e3d6000fd5b5050505061127f565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b158015615c5c57600080fd5b505af1158015611547573d6000803e3d6000fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115615ca75750600090506003615d54565b8460ff16601b14158015615cbf57508460ff16601c14155b15615cd05750600090506004615d54565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015615d24573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116615d4d57600060019250925050615d54565b9150600090505b94509492505050565b6000806001600160ff1b03831681615d7a60ff86901c601b616eb6565b9050615d8887828885615c70565b935093505050935093915050565b60008083601f840112615da857600080fd5b5081356001600160401b03811115615dbf57600080fd5b6020830191508360208260051b850101111561597557600080fd5b60008060208385031215615ded57600080fd5b82356001600160401b03811115615e0357600080fd5b615e0f85828601615d96565b90969095509350505050565b6001600160a01b038116811461108d57600080fd5b8035615e3b81615e1b565b919050565b600080600080600060a08688031215615e5857600080fd5b8535615e6381615e1b565b94506020860135615e7381615e1b565b93506040860135615e8381615e1b565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b81811015615ed357835183529284019291840191600101615eb7565b50909695505050505050565b63ffffffff8116811461108d57600080fd5b8035615e3b81615edf565b600060208284031215615f0e57600080fd5b8135614b4881615edf565b600060208284031215615f2b57600080fd5b8135614b4881615e1b565b600080600060608486031215615f4b57600080fd5b8335615f5681615e1b565b92506020840135615f6681615e1b565b929592945050506040919091013590565b600060208284031215615f8957600080fd5b5035919050565b60008060008060408587031215615fa657600080fd5b84356001600160401b0380821115615fbd57600080fd5b615fc988838901615d96565b90965094506020870135915080821115615fe257600080fd5b50615fef87828801615d96565b95989497509550505050565b60008060008060008060008060c0898b03121561601757600080fd5b883561602281615e1b565b9750602089013561603281615e1b565b9650604089013595506060890135945060808901356001600160401b038082111561605c57600080fd5b6160688c838d01615d96565b909650945060a08b013591508082111561608157600080fd5b5061608e8b828c01615d96565b999c989b5096995094979396929594505050565b600080600080608085870312156160b857600080fd5b84356160c381615e1b565b935060208501356160d381615e1b565b93969395505050506040820135916060013590565b6000606082840312156160fa57600080fd5b50919050565b60008083601f84011261611257600080fd5b5081356001600160401b0381111561612957600080fd5b60208301915083602082850101111561597557600080fd5b60008060008060a0858703121561615757600080fd5b61616186866160e8565b9350606085013561617181615edf565b925060808501356001600160401b0381111561618c57600080fd5b615fef87828801616100565b600080604083850312156161ab57600080fd5b82356161b681615e1b565b915060208301356161c681615e1b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715616209576162096161d1565b60405290565b604080519081016001600160401b0381118282101715616209576162096161d1565b604051601f8201601f191681016001600160401b0381118282101715616259576162596161d1565b604052919050565b60006001600160401b0382111561627a5761627a6161d1565b5060051b60200190565b600082601f83011261629557600080fd5b813560206162aa6162a583616261565b616231565b82815260059290921b840181019181810190868411156162c957600080fd5b8286015b848110156162ed5780356162e081615e1b565b83529183019183016162cd565b509695505050505050565b600082601f83011261630957600080fd5b813560206163196162a583616261565b82815260059290921b8401810191818101908684111561633857600080fd5b8286015b848110156162ed578035835291830191830161633c565b600060e0828403121561636557600080fd5b61636d6161e7565b905061637882615e30565b815261638660208301615e30565b602082015261639760408301615e30565b6040820152606082013560608201526163b260808301615ef1565b608082015260a08201356001600160401b03808211156163d157600080fd5b6163dd85838601616284565b60a084015260c08401359150808211156163f657600080fd5b50616403848285016162f8565b60c08301525092915050565b60006020828403121561642157600080fd5b81356001600160401b0381111561643757600080fd5b611a7684828501616353565b60006020828403121561645557600080fd5b813560ff81168114614b4857600080fd5b60006040828403121561647857600080fd5b61648061620f565b905081356001600160401b038082111561649957600080fd5b818401915084601f8301126164ad57600080fd5b81356020828211156164c1576164c16161d1565b6164d3601f8301601f19168201616231565b925081835286818386010111156164e957600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561652657600080fd5b853561653181615e1b565b9450602086013561654181615e1b565b935060408601356001600160401b038082111561655d57600080fd5b61656989838a01616466565b9450606088013591508082111561657f57600080fd5b5061658c88828901616466565b95989497509295608001359392505050565b600080600080600080606087890312156165b757600080fd5b86356001600160401b03808211156165ce57600080fd5b6165da8a838b01615d96565b909850965060208901359150808211156165f357600080fd5b6165ff8a838b01615d96565b9096509450604089013591508082111561661857600080fd5b5061662589828a01615d96565b979a9699509497509295939492505050565b6000806020838503121561664a57600080fd5b82356001600160401b0381111561666057600080fd5b615e0f85828601616100565b6000806040838503121561667f57600080fd5b823561668a81615e1b565b946020939093013593505050565b600080600080608085870312156166ae57600080fd5b84356166b981615e1b565b93506020850135925060408501356166d081615e1b565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156167195781516001600160a01b0316875295820195908201906001016166f4565b509495945050505050565b600081518084526020808501945080840160005b8381101561671957815187529582019590820190600101616738565b60408152600061676760408301856166e0565b82810360208401526114058185616724565b801515811461108d57600080fd5b6000806000806060858703121561679d57600080fd5b84356001600160401b03808211156167b457600080fd5b9086019060e082890312156167c857600080fd5b909450602086013590808211156167de57600080fd5b506167eb87828801615d96565b90945092505060408501356167ff81616779565b939692955090935050565b60008060006060848603121561681f57600080fd5b833561682a81615e1b565b925060208401356001600160401b0381111561684557600080fd5b61685186828701616466565b925050604084013590509250925092565b60006060828403121561687457600080fd5b614b4883836160e8565b60008060006040848603121561689357600080fd5b833561689e81615e1b565b925060208401356001600160401b038111156168b957600080fd5b6168c586828701615d96565b9497909650939450505050565b602081526000614b486020830184616724565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415616925576169256168fb565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e1983360301811261697957600080fd5b9190910192915050565b6000808335601e1984360301811261699a57600080fd5b8301803591506001600160401b038211156169b457600080fd5b6020019150600581901b360382131561597557600080fd5b8183526000602080850194508260005b858110156167195781356169ef81615e1b565b6001600160a01b0316875295820195908201906001016169dc565b6001600160a01b038416815260406020820181905260009061140590830184866169cc565b80516001600160401b0381168114615e3b57600080fd5b60006020808385031215616a5957600080fd5b82516001600160401b03811115616a6f57600080fd5b8301601f81018513616a8057600080fd5b8051616a8e6162a582616261565b81815260059190911b82018301908381019087831115616aad57600080fd5b928401925b82841015616ad257616ac384616a2f565b82529284019290840190616ab2565b979650505050505050565b600060208284031215616aef57600080fd5b8151614b4881615e1b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b600060208284031215616bb357600080fd5b614b4882616a2f565b600060208284031215616bce57600080fd5b8151614b4881616779565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b606081018235616c3081615e1b565b6001600160a01b039081168352602084013590616c4c82615e1b565b1660208301526040830135616c6081615edf565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a0850152616cfd60e08501826166e0565b905060c083015184820360c08601526114058282616724565b602081526000614b486020830184616ca2565b6000823560de1983360301811261697957600080fd5b600060208284031215616d5157600080fd5b8135614b4881616779565b600082616d7957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215616d9057600080fd5b5051919050565b600082601f830112616da857600080fd5b81516020616db86162a583616261565b82815260059290921b84018101918181019086841115616dd757600080fd5b8286015b848110156162ed5780518352918301918301616ddb565b60008060408385031215616e0557600080fd5b82516001600160401b0380821115616e1c57600080fd5b818501915085601f830112616e3057600080fd5b81516020616e406162a583616261565b82815260059290921b84018101918181019089841115616e5f57600080fd5b948201945b83861015616e86578551616e7781615e1b565b82529482019490820190616e64565b91880151919650909350505080821115616e9f57600080fd5b50616eac85828601616d97565b9150509250929050565b60008219821115616ec957616ec96168fb565b500190565b600082821015616ee057616ee06168fb565b500390565b6001600160a01b0383168152604060208201819052600090611a76908301846166e0565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000611a766040830184616ca2565b6000816000190483118215151615616f6057616f606168fb565b500290565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135616f9081615e1b565b616f9a8183616f65565b50600181016020830135616fad81615e1b565b616fb78183616f65565b506040830135616fc681615edf565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b82815260006020604081840152835180604085015260005b8181101561701c57858101830151858201606001528201617000565b8181111561702e576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561705757600080fd5b81516001600160e01b031981168114614b4857600080fd5b60006119923683616353565b600063ffffffff80831681851680830382111561709a5761709a6168fb565b01949350505050565b6001600160a01b03851681526060602082018190526000906170c890830185876169cc565b905063ffffffff8316604083015295945050505050565b600080604083850312156170f257600080fd5b505080516020909101519092909150565b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734144656c65676174696f6e4d616e616765722e5f636f6d706c657465517565756544656c65676174696f6e4d616e616765722e5f73657453747261746567795769a2646970667358221220ba649443e45a93abe956d2562b7180994d60197a942bf86d641a4808199648da64736f6c634300080c0033", } // DelegationManagerABI is the input ABI used to generate the binding from. @@ -75,7 +81,7 @@ var DelegationManagerABI = DelegationManagerMetaData.ABI var DelegationManagerBin = DelegationManagerMetaData.Bin // DeployDelegationManager deploys a new Ethereum contract, binding an instance of DelegationManager to it. -func DeployDelegationManager(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _slasher common.Address, _eigenPodManager common.Address) (common.Address, *types.Transaction, *DelegationManager, error) { +func DeployDelegationManager(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _slasher common.Address, _eigenPodManager common.Address, _avsDirectory common.Address) (common.Address, *types.Transaction, *DelegationManager, error) { parsed, err := DelegationManagerMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -84,7 +90,7 @@ func DeployDelegationManager(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(DelegationManagerBin), backend, _strategyManager, _slasher, _eigenPodManager) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(DelegationManagerBin), backend, _strategyManager, _slasher, _eigenPodManager, _avsDirectory) if err != nil { return common.Address{}, nil, nil, err } @@ -326,6 +332,37 @@ func (_DelegationManager *DelegationManagerCallerSession) MAXSTAKEROPTOUTWINDOWB return _DelegationManager.Contract.MAXSTAKEROPTOUTWINDOWBLOCKS(&_DelegationManager.CallOpts) } +// MAXWITHDRAWALDELAY is a free data retrieval call binding the contract method 0xa238f9df. +// +// Solidity: function MAX_WITHDRAWAL_DELAY() view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) MAXWITHDRAWALDELAY(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "MAX_WITHDRAWAL_DELAY") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXWITHDRAWALDELAY is a free data retrieval call binding the contract method 0xa238f9df. +// +// Solidity: function MAX_WITHDRAWAL_DELAY() view returns(uint256) +func (_DelegationManager *DelegationManagerSession) MAXWITHDRAWALDELAY() (*big.Int, error) { + return _DelegationManager.Contract.MAXWITHDRAWALDELAY(&_DelegationManager.CallOpts) +} + +// MAXWITHDRAWALDELAY is a free data retrieval call binding the contract method 0xa238f9df. +// +// Solidity: function MAX_WITHDRAWAL_DELAY() view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) MAXWITHDRAWALDELAY() (*big.Int, error) { + return _DelegationManager.Contract.MAXWITHDRAWALDELAY(&_DelegationManager.CallOpts) +} + // MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. // // Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) @@ -388,6 +425,37 @@ func (_DelegationManager *DelegationManagerCallerSession) STAKERDELEGATIONTYPEHA return _DelegationManager.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManager.CallOpts) } +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_DelegationManager *DelegationManagerCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "avsDirectory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_DelegationManager *DelegationManagerSession) AvsDirectory() (common.Address, error) { + return _DelegationManager.Contract.AvsDirectory(&_DelegationManager.CallOpts) +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_DelegationManager *DelegationManagerCallerSession) AvsDirectory() (common.Address, error) { + return _DelegationManager.Contract.AvsDirectory(&_DelegationManager.CallOpts) +} + // BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. // // Solidity: function beaconChainETHStrategy() view returns(address) @@ -761,12 +829,12 @@ func (_DelegationManager *DelegationManagerCallerSession) GetDelegatableShares(s return _DelegationManager.Contract.GetDelegatableShares(&_DelegationManager.CallOpts, staker) } -// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. +// GetWithdrawableStakerShares is a free data retrieval call binding the contract method 0xf878776e. // -// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) -func (_DelegationManager *DelegationManagerCaller) GetOperatorShares(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]*big.Int, error) { +// Solidity: function getWithdrawableStakerShares(address staker, address[] strategies) view returns(uint256[] shares) +func (_DelegationManager *DelegationManagerCaller) GetWithdrawableStakerShares(opts *bind.CallOpts, staker common.Address, strategies []common.Address) ([]*big.Int, error) { var out []interface{} - err := _DelegationManager.contract.Call(opts, &out, "getOperatorShares", operator, strategies) + err := _DelegationManager.contract.Call(opts, &out, "getWithdrawableStakerShares", staker, strategies) if err != nil { return *new([]*big.Int), err @@ -778,18 +846,18 @@ func (_DelegationManager *DelegationManagerCaller) GetOperatorShares(opts *bind. } -// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. +// GetWithdrawableStakerShares is a free data retrieval call binding the contract method 0xf878776e. // -// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) -func (_DelegationManager *DelegationManagerSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { - return _DelegationManager.Contract.GetOperatorShares(&_DelegationManager.CallOpts, operator, strategies) +// Solidity: function getWithdrawableStakerShares(address staker, address[] strategies) view returns(uint256[] shares) +func (_DelegationManager *DelegationManagerSession) GetWithdrawableStakerShares(staker common.Address, strategies []common.Address) ([]*big.Int, error) { + return _DelegationManager.Contract.GetWithdrawableStakerShares(&_DelegationManager.CallOpts, staker, strategies) } -// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. +// GetWithdrawableStakerShares is a free data retrieval call binding the contract method 0xf878776e. // -// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) -func (_DelegationManager *DelegationManagerCallerSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { - return _DelegationManager.Contract.GetOperatorShares(&_DelegationManager.CallOpts, operator, strategies) +// Solidity: function getWithdrawableStakerShares(address staker, address[] strategies) view returns(uint256[] shares) +func (_DelegationManager *DelegationManagerCallerSession) GetWithdrawableStakerShares(staker common.Address, strategies []common.Address) ([]*big.Int, error) { + return _DelegationManager.Contract.GetWithdrawableStakerShares(&_DelegationManager.CallOpts, staker, strategies) } // GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. @@ -885,6 +953,37 @@ func (_DelegationManager *DelegationManagerCallerSession) IsOperator(operator co return _DelegationManager.Contract.IsOperator(&_DelegationManager.CallOpts, operator) } +// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. +// +// Solidity: function minWithdrawalDelay() view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) MinWithdrawalDelay(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "minWithdrawalDelay") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. +// +// Solidity: function minWithdrawalDelay() view returns(uint256) +func (_DelegationManager *DelegationManagerSession) MinWithdrawalDelay() (*big.Int, error) { + return _DelegationManager.Contract.MinWithdrawalDelay(&_DelegationManager.CallOpts) +} + +// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. +// +// Solidity: function minWithdrawalDelay() view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) MinWithdrawalDelay() (*big.Int, error) { + return _DelegationManager.Contract.MinWithdrawalDelay(&_DelegationManager.CallOpts) +} + // MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. // // Solidity: function minWithdrawalDelayBlocks() view returns(uint256) @@ -916,6 +1015,37 @@ func (_DelegationManager *DelegationManagerCallerSession) MinWithdrawalDelayBloc return _DelegationManager.Contract.MinWithdrawalDelayBlocks(&_DelegationManager.CallOpts) } +// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. +// +// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) +func (_DelegationManager *DelegationManagerCaller) OperatorAllocationDelay(opts *bind.CallOpts, operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "operatorAllocationDelay", operator) + + if err != nil { + return *new(IDelegationManagerAllocationDelayDetails), err + } + + out0 := *abi.ConvertType(out[0], new(IDelegationManagerAllocationDelayDetails)).(*IDelegationManagerAllocationDelayDetails) + + return out0, err + +} + +// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. +// +// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) +func (_DelegationManager *DelegationManagerSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { + return _DelegationManager.Contract.OperatorAllocationDelay(&_DelegationManager.CallOpts, operator) +} + +// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. +// +// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) +func (_DelegationManager *DelegationManagerCallerSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { + return _DelegationManager.Contract.OperatorAllocationDelay(&_DelegationManager.CallOpts, operator) +} + // OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. // // Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) @@ -947,12 +1077,43 @@ func (_DelegationManager *DelegationManagerCallerSession) OperatorDetails(operat return _DelegationManager.Contract.OperatorDetails(&_DelegationManager.CallOpts, operator) } +// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. +// +// Solidity: function operatorScaledShares(address , address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) OperatorScaledShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "operatorScaledShares", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. +// +// Solidity: function operatorScaledShares(address , address ) view returns(uint256) +func (_DelegationManager *DelegationManagerSession) OperatorScaledShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.OperatorScaledShares(&_DelegationManager.CallOpts, arg0, arg1) +} + +// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. +// +// Solidity: function operatorScaledShares(address , address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) OperatorScaledShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.OperatorScaledShares(&_DelegationManager.CallOpts, arg0, arg1) +} + // OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorShares(address , address ) view returns(uint256) -func (_DelegationManager *DelegationManagerCaller) OperatorShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { +// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) OperatorShares(opts *bind.CallOpts, operator common.Address, strategy common.Address) (*big.Int, error) { var out []interface{} - err := _DelegationManager.contract.Call(opts, &out, "operatorShares", arg0, arg1) + err := _DelegationManager.contract.Call(opts, &out, "operatorShares", operator, strategy) if err != nil { return *new(*big.Int), err @@ -966,16 +1127,16 @@ func (_DelegationManager *DelegationManagerCaller) OperatorShares(opts *bind.Cal // OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorShares(address , address ) view returns(uint256) -func (_DelegationManager *DelegationManagerSession) OperatorShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManager.Contract.OperatorShares(&_DelegationManager.CallOpts, arg0, arg1) +// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) +func (_DelegationManager *DelegationManagerSession) OperatorShares(operator common.Address, strategy common.Address) (*big.Int, error) { + return _DelegationManager.Contract.OperatorShares(&_DelegationManager.CallOpts, operator, strategy) } // OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorShares(address , address ) view returns(uint256) -func (_DelegationManager *DelegationManagerCallerSession) OperatorShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManager.Contract.OperatorShares(&_DelegationManager.CallOpts, arg0, arg1) +// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) OperatorShares(operator common.Address, strategy common.Address) (*big.Int, error) { + return _DelegationManager.Contract.OperatorShares(&_DelegationManager.CallOpts, operator, strategy) } // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. @@ -1226,6 +1387,37 @@ func (_DelegationManager *DelegationManagerCallerSession) StakerOptOutWindowBloc return _DelegationManager.Contract.StakerOptOutWindowBlocks(&_DelegationManager.CallOpts, operator) } +// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. +// +// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) StakerScalingFactors(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "stakerScalingFactors", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. +// +// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) +func (_DelegationManager *DelegationManagerSession) StakerScalingFactors(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.StakerScalingFactors(&_DelegationManager.CallOpts, arg0, arg1) +} + +// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. +// +// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) StakerScalingFactors(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.StakerScalingFactors(&_DelegationManager.CallOpts, arg0, arg1) +} + // StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. // // Solidity: function strategyManager() view returns(address) @@ -1288,67 +1480,98 @@ func (_DelegationManager *DelegationManagerCallerSession) StrategyWithdrawalDela return _DelegationManager.Contract.StrategyWithdrawalDelayBlocks(&_DelegationManager.CallOpts, arg0) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. +// +// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) StrategyWithdrawalDelays(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManager.contract.Call(opts, &out, "strategyWithdrawalDelays", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerSession) StrategyWithdrawalDelays(arg0 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.StrategyWithdrawalDelays(&_DelegationManager.CallOpts, arg0) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManager.Contract.CompleteQueuedWithdrawal(&_DelegationManager.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) StrategyWithdrawalDelays(arg0 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.StrategyWithdrawalDelays(&_DelegationManager.CallOpts, arg0) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManager.Contract.CompleteQueuedWithdrawal(&_DelegationManager.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManager.Contract.CompleteQueuedWithdrawal(&_DelegationManager.TransactOpts, withdrawal, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManager.Contract.CompleteQueuedWithdrawals(&_DelegationManager.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManager.Contract.CompleteQueuedWithdrawal(&_DelegationManager.TransactOpts, withdrawal, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManager.Contract.CompleteQueuedWithdrawals(&_DelegationManager.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, receiveAsTokens) +} + +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. +// +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManager.Contract.CompleteQueuedWithdrawals(&_DelegationManager.TransactOpts, withdrawals, tokens, receiveAsTokens) +} + +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. +// +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManager.Contract.CompleteQueuedWithdrawals(&_DelegationManager.TransactOpts, withdrawals, tokens, receiveAsTokens) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManager *DelegationManagerTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, shares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() +func (_DelegationManager *DelegationManagerTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, removedShares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManager *DelegationManagerSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManager.Contract.DecreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, shares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() +func (_DelegationManager *DelegationManagerSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.DecreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, removedShares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManager *DelegationManagerTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManager.Contract.DecreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, shares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() +func (_DelegationManager *DelegationManagerTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.DecreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, removedShares) } // DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. @@ -1393,25 +1616,25 @@ func (_DelegationManager *DelegationManagerTransactorSession) DelegateToBySignat return _DelegationManager.Contract.DelegateToBySignature(&_DelegationManager.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManager *DelegationManagerTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, shares) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() +func (_DelegationManager *DelegationManagerTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, existingShares, addedShares) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManager *DelegationManagerSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManager.Contract.IncreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, shares) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() +func (_DelegationManager *DelegationManagerSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.IncreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, existingShares, addedShares) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManager *DelegationManagerTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManager.Contract.IncreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, shares) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() +func (_DelegationManager *DelegationManagerTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.IncreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, existingShares, addedShares) } // Initialize is a paid mutator transaction binding the contract method 0x22bf40e4. @@ -1435,6 +1658,27 @@ func (_DelegationManager *DelegationManagerTransactorSession) Initialize(initial return _DelegationManager.Contract.Initialize(&_DelegationManager.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus, _minWithdrawalDelayBlocks, _strategies, _withdrawalDelayBlocks) } +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. +// +// Solidity: function initializeAllocationDelay(uint32 delay) returns() +func (_DelegationManager *DelegationManagerTransactor) InitializeAllocationDelay(opts *bind.TransactOpts, delay uint32) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "initializeAllocationDelay", delay) +} + +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. +// +// Solidity: function initializeAllocationDelay(uint32 delay) returns() +func (_DelegationManager *DelegationManagerSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { + return _DelegationManager.Contract.InitializeAllocationDelay(&_DelegationManager.TransactOpts, delay) +} + +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. +// +// Solidity: function initializeAllocationDelay(uint32 delay) returns() +func (_DelegationManager *DelegationManagerTransactorSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { + return _DelegationManager.Contract.InitializeAllocationDelay(&_DelegationManager.TransactOpts, delay) +} + // ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. // // Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() @@ -1519,25 +1763,25 @@ func (_DelegationManager *DelegationManagerTransactorSession) QueueWithdrawals(q return _DelegationManager.Contract.QueueWithdrawals(&_DelegationManager.TransactOpts, queuedWithdrawalParams) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() -func (_DelegationManager *DelegationManagerTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() +func (_DelegationManager *DelegationManagerTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, allocationDelay, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() -func (_DelegationManager *DelegationManagerSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { - return _DelegationManager.Contract.RegisterAsOperator(&_DelegationManager.TransactOpts, registeringOperatorDetails, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() +func (_DelegationManager *DelegationManagerSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { + return _DelegationManager.Contract.RegisterAsOperator(&_DelegationManager.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() -func (_DelegationManager *DelegationManagerTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { - return _DelegationManager.Contract.RegisterAsOperator(&_DelegationManager.TransactOpts, registeringOperatorDetails, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() +func (_DelegationManager *DelegationManagerTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { + return _DelegationManager.Contract.RegisterAsOperator(&_DelegationManager.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -1603,6 +1847,27 @@ func (_DelegationManager *DelegationManagerTransactorSession) SetPauserRegistry( return _DelegationManager.Contract.SetPauserRegistry(&_DelegationManager.TransactOpts, newPauserRegistry) } +// SetStrategyWithdrawalDelay is a paid mutator transaction binding the contract method 0x65187810. +// +// Solidity: function setStrategyWithdrawalDelay(address[] strategies, uint256[] withdrawalDelays) returns() +func (_DelegationManager *DelegationManagerTransactor) SetStrategyWithdrawalDelay(opts *bind.TransactOpts, strategies []common.Address, withdrawalDelays []*big.Int) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "setStrategyWithdrawalDelay", strategies, withdrawalDelays) +} + +// SetStrategyWithdrawalDelay is a paid mutator transaction binding the contract method 0x65187810. +// +// Solidity: function setStrategyWithdrawalDelay(address[] strategies, uint256[] withdrawalDelays) returns() +func (_DelegationManager *DelegationManagerSession) SetStrategyWithdrawalDelay(strategies []common.Address, withdrawalDelays []*big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.SetStrategyWithdrawalDelay(&_DelegationManager.TransactOpts, strategies, withdrawalDelays) +} + +// SetStrategyWithdrawalDelay is a paid mutator transaction binding the contract method 0x65187810. +// +// Solidity: function setStrategyWithdrawalDelay(address[] strategies, uint256[] withdrawalDelays) returns() +func (_DelegationManager *DelegationManagerTransactorSession) SetStrategyWithdrawalDelay(strategies []common.Address, withdrawalDelays []*big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.SetStrategyWithdrawalDelay(&_DelegationManager.TransactOpts, strategies, withdrawalDelays) +} + // SetStrategyWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x1522bf02. // // Solidity: function setStrategyWithdrawalDelayBlocks(address[] strategies, uint256[] withdrawalDelayBlocks) returns() @@ -3734,6 +3999,142 @@ func (_DelegationManager *DelegationManagerFilterer) ParseStrategyWithdrawalDela return event, nil } +// DelegationManagerStrategyWithdrawalDelaySetIterator is returned from FilterStrategyWithdrawalDelaySet and is used to iterate over the raw logs and unpacked data for StrategyWithdrawalDelaySet events raised by the DelegationManager contract. +type DelegationManagerStrategyWithdrawalDelaySetIterator struct { + Event *DelegationManagerStrategyWithdrawalDelaySet // 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 *DelegationManagerStrategyWithdrawalDelaySetIterator) 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(DelegationManagerStrategyWithdrawalDelaySet) + 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(DelegationManagerStrategyWithdrawalDelaySet) + 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 *DelegationManagerStrategyWithdrawalDelaySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStrategyWithdrawalDelaySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStrategyWithdrawalDelaySet represents a StrategyWithdrawalDelaySet event raised by the DelegationManager contract. +type DelegationManagerStrategyWithdrawalDelaySet struct { + Strategy common.Address + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyWithdrawalDelaySet is a free log retrieval operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. +// +// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManager *DelegationManagerFilterer) FilterStrategyWithdrawalDelaySet(opts *bind.FilterOpts) (*DelegationManagerStrategyWithdrawalDelaySetIterator, error) { + + logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "StrategyWithdrawalDelaySet") + if err != nil { + return nil, err + } + return &DelegationManagerStrategyWithdrawalDelaySetIterator{contract: _DelegationManager.contract, event: "StrategyWithdrawalDelaySet", logs: logs, sub: sub}, nil +} + +// WatchStrategyWithdrawalDelaySet is a free log subscription operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. +// +// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManager *DelegationManagerFilterer) WatchStrategyWithdrawalDelaySet(opts *bind.WatchOpts, sink chan<- *DelegationManagerStrategyWithdrawalDelaySet) (event.Subscription, error) { + + logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "StrategyWithdrawalDelaySet") + 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(DelegationManagerStrategyWithdrawalDelaySet) + if err := _DelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", 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 +} + +// ParseStrategyWithdrawalDelaySet is a log parse operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. +// +// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManager *DelegationManagerFilterer) ParseStrategyWithdrawalDelaySet(log types.Log) (*DelegationManagerStrategyWithdrawalDelaySet, error) { + event := new(DelegationManagerStrategyWithdrawalDelaySet) + if err := _DelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // DelegationManagerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the DelegationManager contract. type DelegationManagerUnpausedIterator struct { Event *DelegationManagerUnpaused // Event containing the contract specifics and raw log diff --git a/pkg/bindings/EigenPodManager/binding.go b/pkg/bindings/EigenPodManager/binding.go index 3d1d31267..394bf5ae7 100644 --- a/pkg/bindings/EigenPodManager/binding.go +++ b/pkg/bindings/EigenPodManager/binding.go @@ -31,8 +31,8 @@ var ( // 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\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620031693803806200316983398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e05161010051612f286200024160003960008181610551015281816105fb01528181610b7901528181611313015281816117bf01526118af015260006104dd015260006102cf015260008181610263015281816112920152611e64015260006103af0152612f286000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b1461053f578063f2fde38b14610573578063f6848d2414610593578063fabc1cbc146105ce57600080fd5b8063b1344271146104cb578063beffbb89146104ff578063c2c51c401461051f57600080fd5b80639b4e4634116100c65780639b4e46341461044c5780639ba062751461045f578063a38406a314610495578063a6a509be146104b557600080fd5b8063886f1195146103e65780638da5cb5b146104065780639104c3191461042457600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461035b578063715018a61461038857806374cdd7981461039d57806384d81062146103d157600080fd5b8063595c6a67146102f15780635ac86ab7146103065780635c975abb1461034657600080fd5b80631794bb3c116101955780631794bb3c14610231578063292b7b2b14610251578063387b13001461029d57806339b70e38146102bd57600080fd5b80630e81073c146101bc57806310d67a2f146101ef578063136439dd14610211575b600080fd5b3480156101c857600080fd5b506101dc6101d73660046120fc565b6105ee565b6040519081526020015b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004612128565b61085d565b005b34801561021d57600080fd5b5061020f61022c366004612145565b610910565b34801561023d57600080fd5b5061020f61024c36600461215e565b610a4f565b34801561025d57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e6565b3480156102a957600080fd5b5061020f6102b836600461215e565b610b6e565b3480156102c957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fd57600080fd5b5061020f610f82565b34801561031257600080fd5b5061033661032136600461219f565b606654600160ff9092169190911b9081161490565b60405190151581526020016101e6565b34801561035257600080fd5b506066546101dc565b34801561036757600080fd5b506101dc610376366004612128565b609b6020526000908152604090205481565b34801561039457600080fd5b5061020f611049565b3480156103a957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b5061028561105d565b3480156103f257600080fd5b50606554610285906001600160a01b031681565b34801561041257600080fd5b506033546001600160a01b0316610285565b34801561043057600080fd5b5061028573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61020f61045a36600461220b565b611147565b34801561046b57600080fd5b5061028561047a366004612128565b6098602052600090815260409020546001600160a01b031681565b3480156104a157600080fd5b506102856104b0366004612128565b611236565b3480156104c157600080fd5b506101dc60995481565b3480156104d757600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061020f61051a3660046120fc565b611308565b34801561052b57600080fd5b5061020f61053a3660046120fc565b611547565b34801561054b57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b5061020f61058e366004612128565b61197b565b34801561059f57600080fd5b506103366105ae366004612128565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105da57600080fd5b5061020f6105e9366004612145565b6119f1565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106415760405162461bcd60e51b81526004016106389061227f565b60405180910390fd5b6001600160a01b0383166106bd5760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f20616464726573730000000000006064820152608401610638565b600082121561072b5760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b6064820152608401610638565b610739633b9aca00836122f3565b156107ac5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e740000006064820152608401610638565b6001600160a01b0383166000908152609b6020526040812054906107d0848361231d565b6001600160a01b0386166000818152609b6020526040908190208390555191925090600080516020612eb38339815191529061080f9087815260200190565b60405180910390a2846001600160a01b03166000805160206125858339815191528260405161084091815260200190565b60405180910390a26108528282611b4d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d4919061235e565b6001600160a01b0316336001600160a01b0316146109045760405162461bcd60e51b81526004016106389061237b565b61090d81611b8f565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097c91906123c5565b6109985760405162461bcd60e51b8152600401610638906123e7565b60665481811614610a115760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610638565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff1615808015610a6f5750600054600160ff909116105b80610a895750303b158015610a89575060005460ff166001145b610aec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610638565b6000805460ff191660011790558015610b0f576000805461ff0019166101001790555b610b1884611c86565b610b228383611cd8565b8015610b68576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bb65760405162461bcd60e51b81526004016106389061227f565b6001600160a01b038316610c305760405162461bcd60e51b81526020600482015260476024820152600080516020612ed383398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a401610638565b6001600160a01b038216610cad5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ed383398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a401610638565b6000811215610d1c5760405162461bcd60e51b81526020600482015260416024820152600080516020612ed383398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a401610638565b610d2a633b9aca00826122f3565b15610d9e5760405162461bcd60e51b815260206004820152604a6024820152600080516020612ed383398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a401610638565b6001600160a01b0383166000908152609b602052604081205490811215610f07576000610dca8261242f565b905080831115610e61576001600160a01b0385166000908152609b6020526040812055610df7818461244c565b9250846001600160a01b0316600080516020612eb383398151915282604051610e2291815260200190565b60405180910390a2846001600160a01b03166000805160206125858339815191526000604051610e5491815260200190565b60405180910390a2610f05565b6001600160a01b0385166000908152609b6020526040812054610e8590859061231d565b6001600160a01b0387166000818152609b6020526040908190208390555191925090600080516020612eb383398151915290610ec49087815260200190565b60405180910390a2856001600160a01b031660008051602061258583398151915282604051610ef591815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610f6457600080fd5b505af1158015610f78573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fee91906123c5565b61100a5760405162461bcd60e51b8152600401610638906123e7565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611051611dc2565b61105b6000611c86565b565b6066546000908190600190811614156110b45760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610638565b336000908152609860205260409020546001600160a01b0316156111365760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b6064820152608401610638565b6000611140611e1c565b9250505090565b6066546000906001908116141561119c5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b6044820152606401610638565b336000908152609860205260409020546001600160a01b0316806111c5576111c2611e1c565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e46349034906111fb908b908b908b908b908b9060040161248c565b6000604051808303818588803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061085757611301836001600160a01b031660001b60405180610940016040528061090e81526020016125a561090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f19818403018152908290526112e69291602001612501565b60405160208183030381529060405280519060200120611f81565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113505760405162461bcd60e51b81526004016106389061227f565b60008112156113c75760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e656761746976650000000000000000006064820152608401610638565b6113d5633b9aca00826122f3565b1561144a576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e746064820152608401610638565b6001600160a01b0382166000908152609b602052604081205461146e908390612516565b905060008112156114ff5760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a401610638565b6001600160a01b0383166000818152609b602052604090819020839055516000805160206125858339815191529061153a9084815260200190565b60405180910390a2505050565b6001600160a01b0380831660009081526098602052604090205483911633146115c25760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b6064820152608401610638565b600260c95414156116155760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610638565b600260c9556001600160a01b0383166116b15760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a401610638565b6116bf633b9aca0083612555565b156117585760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a401610638565b6001600160a01b0383166000908152609b60205260408120549061177c848361231d565b6001600160a01b0386166000908152609b602052604081208290559091506117a48383611b4d565b9050801561190c57600081121561186f576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06118038561242f565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561185257600080fd5b505af1158015611866573d6000803e3d6000fd5b5050505061190c565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156118f357600080fd5b505af1158015611907573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020612eb38339815191528660405161193591815260200190565b60405180910390a2856001600160a01b03166000805160206125858339815191528360405161196691815260200190565b60405180910390a25050600160c95550505050565b611983611dc2565b6001600160a01b0381166119e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610638565b61090d81611c86565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a68919061235e565b6001600160a01b0316336001600160a01b031614611a985760405162461bcd60e51b81526004016106389061237b565b606654198119606654191614611b165760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610638565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610a44565b6000808313611b6d5760008213611b6657506000610857565b5080610857565b60008213611b8557611b7e8361242f565b9050610857565b611b7e8383612516565b6001600160a01b038116611c1d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610638565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b0316158015611cf957506001600160a01b03821615155b611d7b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610638565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611dbe82611b8f565b5050565b6033546001600160a01b0316331461105b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000609960008154611e2d90612569565b9091555060408051610940810190915261090e808252600091611ecc91839133916125a56020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052611eb89291602001612501565b604051602081830303815290604052611fdd565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b158015611f1057600080fd5b505af1158015611f24573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090611301565b600080844710156120305760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610638565b825161207e5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610638565b8383516020850187f590506001600160a01b0381166120df5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610638565b949350505050565b6001600160a01b038116811461090d57600080fd5b6000806040838503121561210f57600080fd5b823561211a816120e7565b946020939093013593505050565b60006020828403121561213a57600080fd5b8135611301816120e7565b60006020828403121561215757600080fd5b5035919050565b60008060006060848603121561217357600080fd5b833561217e816120e7565b9250602084013561218e816120e7565b929592945050506040919091013590565b6000602082840312156121b157600080fd5b813560ff8116811461130157600080fd5b60008083601f8401126121d457600080fd5b50813567ffffffffffffffff8111156121ec57600080fd5b60208301915083602082850101111561220457600080fd5b9250929050565b60008060008060006060868803121561222357600080fd5b853567ffffffffffffffff8082111561223b57600080fd5b61224789838a016121c2565b9097509550602088013591508082111561226057600080fd5b5061226d888289016121c2565b96999598509660400135949350505050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612302576123026122dd565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b038490038513161561233f5761233f612307565b600160ff1b839003841281161561235857612358612307565b50500190565b60006020828403121561237057600080fd5b8151611301816120e7565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156123d757600080fd5b8151801515811461130157600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b82141561244557612445612307565b5060000390565b60008282101561245e5761245e612307565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006124a0606083018789612463565b82810360208401526124b3818688612463565b9150508260408301529695505050505050565b6000815160005b818110156124e757602081850181015186830152016124cd565b818111156124f6576000828601525b509290920192915050565b60006120df61251083866124c6565b846124c6565b60008083128015600160ff1b85018412161561253457612534612307565b6001600160ff1b038401831381161561254f5761254f612307565b50500390565b600082612564576125646122dd565b500790565b600060001982141561257d5761257d612307565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220ab15fe92e05748fd03441d98a7837905194deb492a89f580b320661f7cb8204164736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodBeacon\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"increaseInDelegateableShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"existingPodShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x6101206040523480156200001257600080fd5b50604051620031b9380380620031b983398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e05161010051612f7862000241600039600081816105620152818161060d01528181610b9f0152818161133b015281816117e70152611899015260006104ee015260006102d601526000818161026a015281816112b80152611eb4015260006103c00152612f786000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b14610550578063f2fde38b14610584578063f6848d24146105a4578063fabc1cbc146105df57600080fd5b8063b1344271146104dc578063beffbb8914610510578063c2c51c401461053057600080fd5b80639b4e4634116100c65780639b4e46341461045d5780639ba0627514610470578063a38406a3146104a6578063a6a509be146104c657600080fd5b8063886f1195146103f75780638da5cb5b146104175780639104c3191461043557600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461036c578063715018a61461039957806374cdd798146103ae57806384d81062146103e257600080fd5b8063595c6a67146102f85780635ac86ab71461030d5780635c975abb1461034d57600080fd5b80631794bb3c116101955780631794bb3c14610238578063292b7b2b14610258578063387b1300146102a457806339b70e38146102c457600080fd5b80630e81073c146101bc57806310d67a2f146101f6578063136439dd14610218575b600080fd5b3480156101c857600080fd5b506101dc6101d736600461214c565b6105ff565b604080519283526020830191909152015b60405180910390f35b34801561020257600080fd5b50610216610211366004612178565b610883565b005b34801561022457600080fd5b5061021661023336600461219c565b610936565b34801561024457600080fd5b506102166102533660046121b5565b610a75565b34801561026457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ed565b3480156102b057600080fd5b506102166102bf3660046121b5565b610b94565b3480156102d057600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561030457600080fd5b50610216610fa8565b34801561031957600080fd5b5061033d6103283660046121f6565b606654600160ff9092169190911b9081161490565b60405190151581526020016101ed565b34801561035957600080fd5b506066545b6040519081526020016101ed565b34801561037857600080fd5b5061035e610387366004612178565b609b6020526000908152604090205481565b3480156103a557600080fd5b5061021661106f565b3480156103ba57600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ee57600080fd5b5061028c611083565b34801561040357600080fd5b5060655461028c906001600160a01b031681565b34801561042357600080fd5b506033546001600160a01b031661028c565b34801561044157600080fd5b5061028c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61021661046b36600461225b565b61116d565b34801561047c57600080fd5b5061028c61048b366004612178565b6098602052600090815260409020546001600160a01b031681565b3480156104b257600080fd5b5061028c6104c1366004612178565b61125c565b3480156104d257600080fd5b5061035e60995481565b3480156104e857600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561051c57600080fd5b5061021661052b36600461214c565b611330565b34801561053c57600080fd5b5061021661054b36600461214c565b61156f565b34801561055c57600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561059057600080fd5b5061021661059f366004612178565b6119cb565b3480156105b057600080fd5b5061033d6105bf366004612178565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105eb57600080fd5b506102166105fa36600461219c565b611a41565b600080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106535760405162461bcd60e51b815260040161064a906122cf565b60405180910390fd5b6001600160a01b0384166106cf5760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161064a565b600083121561073d5760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161064a565b61074b633b9aca0084612343565b156107be5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161064a565b6001600160a01b0384166000908152609b6020526040812054906107e2858361236d565b6001600160a01b0387166000818152609b6020526040908190208390555191925090600080516020612f03833981519152906108219088815260200190565b60405180910390a2856001600160a01b03166000805160206125d58339815191528260405161085291815260200190565b60405180910390a26108648282611b9d565b9350600082126108745781610877565b60005b925050505b9250929050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa91906123ae565b6001600160a01b0316336001600160a01b03161461092a5760405162461bcd60e51b815260040161064a906123cb565b61093381611bdf565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561097e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a29190612415565b6109be5760405162461bcd60e51b815260040161064a90612437565b60665481811614610a375760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161064a565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff1615808015610a955750600054600160ff909116105b80610aaf5750303b158015610aaf575060005460ff166001145b610b125760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161064a565b6000805460ff191660011790558015610b35576000805461ff0019166101001790555b610b3e84611cd6565b610b488383611d28565b8015610b8e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bdc5760405162461bcd60e51b815260040161064a906122cf565b6001600160a01b038316610c565760405162461bcd60e51b81526020600482015260476024820152600080516020612f2383398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161064a565b6001600160a01b038216610cd35760405162461bcd60e51b815260206004820152604a6024820152600080516020612f2383398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161064a565b6000811215610d425760405162461bcd60e51b81526020600482015260416024820152600080516020612f2383398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161064a565b610d50633b9aca0082612343565b15610dc45760405162461bcd60e51b815260206004820152604a6024820152600080516020612f2383398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161064a565b6001600160a01b0383166000908152609b602052604081205490811215610f2d576000610df08261247f565b905080831115610e87576001600160a01b0385166000908152609b6020526040812055610e1d818461249c565b9250846001600160a01b0316600080516020612f0383398151915282604051610e4891815260200190565b60405180910390a2846001600160a01b03166000805160206125d58339815191526000604051610e7a91815260200190565b60405180910390a2610f2b565b6001600160a01b0385166000908152609b6020526040812054610eab90859061236d565b6001600160a01b0387166000818152609b6020526040908190208390555191925090600080516020612f0383398151915290610eea9087815260200190565b60405180910390a2856001600160a01b03166000805160206125d583398151915282604051610f1b91815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610f8a57600080fd5b505af1158015610f9e573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ff0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110149190612415565b6110305760405162461bcd60e51b815260040161064a90612437565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611077611e12565b6110816000611cd6565b565b6066546000908190600190811614156110da5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161064a565b336000908152609860205260409020546001600160a01b03161561115c5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161064a565b6000611166611e6c565b9250505090565b606654600090600190811614156111c25760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161064a565b336000908152609860205260409020546001600160a01b0316806111eb576111e8611e6c565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490611221908b908b908b908b908b906004016124dc565b6000604051808303818588803b15801561123a57600080fd5b505af115801561124e573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061132a57611327836001600160a01b031660001b60405180610940016040528061090e81526020016125f561090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f198184030181529082905261130c9291602001612551565b60405160208183030381529060405280519060200120611fd1565b90505b92915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113785760405162461bcd60e51b815260040161064a906122cf565b60008112156113ef5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161064a565b6113fd633b9aca0082612343565b15611472576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161064a565b6001600160a01b0382166000908152609b6020526040812054611496908390612566565b905060008112156115275760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161064a565b6001600160a01b0383166000818152609b602052604090819020839055516000805160206125d5833981519152906115629084815260200190565b60405180910390a2505050565b6001600160a01b0380831660009081526098602052604090205483911633146115ea5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161064a565b600260c954141561163d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161064a565b600260c9556001600160a01b0383166116d95760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161064a565b6116e7633b9aca00836125a5565b156117805760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161064a565b6001600160a01b0383166000908152609b6020526040812054906117a4848361236d565b6001600160a01b0386166000908152609b602052604081208290559091506117cc8383611b9d565b9050801561195c576000811215611897576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061182b8561247f565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b5050505061195c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633c651cf28773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0600087126118ea57866118ed565b60005b6040516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152604482015260648101849052608401600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020612f038339815191528660405161198591815260200190565b60405180910390a2856001600160a01b03166000805160206125d5833981519152836040516119b691815260200190565b60405180910390a25050600160c95550505050565b6119d3611e12565b6001600160a01b038116611a385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161064a565b61093381611cd6565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab891906123ae565b6001600160a01b0316336001600160a01b031614611ae85760405162461bcd60e51b815260040161064a906123cb565b606654198119606654191614611b665760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161064a565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610a6a565b6000808313611bbd5760008213611bb65750600061132a565b508061132a565b60008213611bd557611bce8361247f565b905061132a565b611bce8383612566565b6001600160a01b038116611c6d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161064a565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b0316158015611d4957506001600160a01b03821615155b611dcb5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161064a565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611e0e82611bdf565b5050565b6033546001600160a01b031633146110815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161064a565b6000609960008154611e7d906125b9565b9091555060408051610940810190915261090e808252600091611f1c91839133916125f56020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052611f089291602001612551565b60405160208183030381529060405261202d565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b158015611f6057600080fd5b505af1158015611f74573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090611327565b600080844710156120805760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161064a565b82516120ce5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161064a565b8383516020850187f590506001600160a01b03811661212f5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161064a565b949350505050565b6001600160a01b038116811461093357600080fd5b6000806040838503121561215f57600080fd5b823561216a81612137565b946020939093013593505050565b60006020828403121561218a57600080fd5b813561219581612137565b9392505050565b6000602082840312156121ae57600080fd5b5035919050565b6000806000606084860312156121ca57600080fd5b83356121d581612137565b925060208401356121e581612137565b929592945050506040919091013590565b60006020828403121561220857600080fd5b813560ff8116811461219557600080fd5b60008083601f84011261222b57600080fd5b50813567ffffffffffffffff81111561224357600080fd5b60208301915083602082850101111561087c57600080fd5b60008060008060006060868803121561227357600080fd5b853567ffffffffffffffff8082111561228b57600080fd5b61229789838a01612219565b909750955060208801359150808211156122b057600080fd5b506122bd88828901612219565b96999598509660400135949350505050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826123525761235261232d565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b038490038513161561238f5761238f612357565b600160ff1b83900384128116156123a8576123a8612357565b50500190565b6000602082840312156123c057600080fd5b815161219581612137565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561242757600080fd5b8151801515811461219557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b82141561249557612495612357565b5060000390565b6000828210156124ae576124ae612357565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006124f06060830187896124b3565b82810360208401526125038186886124b3565b9150508260408301529695505050505050565b6000815160005b81811015612537576020818501810151868301520161251d565b81811115612546576000828601525b509290920192915050565b600061212f6125608386612516565b84612516565b60008083128015600160ff1b85018412161561258457612584612357565b6001600160ff1b038401831381161561259f5761259f612357565b50500390565b6000826125b4576125b461232d565b500790565b60006000198214156125cd576125cd612357565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220589d2421fd1a2806ed6524a3f40bea05ae2be9f1769c5fd5b724f497f6146b6164736f6c634300080c0033", } // EigenPodManagerABI is the input ABI used to generate the binding from. @@ -669,21 +669,21 @@ func (_EigenPodManager *EigenPodManagerCallerSession) StrategyManager() (common. // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) func (_EigenPodManager *EigenPodManagerTransactor) AddShares(opts *bind.TransactOpts, podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManager.contract.Transact(opts, "addShares", podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) func (_EigenPodManager *EigenPodManagerSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManager.Contract.AddShares(&_EigenPodManager.TransactOpts, podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) func (_EigenPodManager *EigenPodManagerTransactorSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManager.Contract.AddShares(&_EigenPodManager.TransactOpts, podOwner, shares) } diff --git a/pkg/bindings/IAVSDirectory/binding.go b/pkg/bindings/IAVSDirectory/binding.go index d8f4e779c..63f096b72 100644 --- a/pkg/bindings/IAVSDirectory/binding.go +++ b/pkg/bindings/IAVSDirectory/binding.go @@ -52,7 +52,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // IAVSDirectoryMetaData contains all meta data concerning the IAVSDirectory contract. var IAVSDirectoryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"INITIAL_TOTAL_MAGNITUDE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"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\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateMagnitudeAllocationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"numToComplete\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashablePPM\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"linear\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint24[]\",\"internalType\":\"uint24[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initializeAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"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\":\"operatorSetMemberCount\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"slashOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateFreeMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToComplete\",\"type\":\"uint8[]\",\"internalType\":\"uint8[]\"}],\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeAllocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToAllocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeDeallocationCompleted\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"freeMagnitudeAdded\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeQueueDeallocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToDeallocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"completableTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false}]", + 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\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateMagnitudeAllocationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"numToComplete\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentSlashableMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"uint64[][]\",\"internalType\":\"uint64[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNumOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetsOfOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"uint64[][]\",\"internalType\":\"uint64[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashablePPM\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"linear\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint24[]\",\"internalType\":\"uint24[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudeAtTimestamp\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudesAtTimestamp\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"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\":\"operatorSetMemberAtIndex\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOfAtIndex\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"slashOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateFreeMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToComplete\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeAllocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToAllocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeDeallocationCompleted\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"freeMagnitudeAdded\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeQueueDeallocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToDeallocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"completableTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false}]", } // IAVSDirectoryABI is the input ABI used to generate the binding from. @@ -201,37 +201,6 @@ func (_IAVSDirectory *IAVSDirectoryTransactorRaw) Transact(opts *bind.TransactOp return _IAVSDirectory.Contract.contract.Transact(opts, method, params...) } -// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. -// -// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) -func (_IAVSDirectory *IAVSDirectoryCaller) INITIALTOTALMAGNITUDE(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "INITIAL_TOTAL_MAGNITUDE") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. -// -// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) -func (_IAVSDirectory *IAVSDirectorySession) INITIALTOTALMAGNITUDE() (uint64, error) { - return _IAVSDirectory.Contract.INITIALTOTALMAGNITUDE(&_IAVSDirectory.CallOpts) -} - -// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. -// -// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) -func (_IAVSDirectory *IAVSDirectoryCallerSession) INITIALTOTALMAGNITUDE() (uint64, error) { - return _IAVSDirectory.Contract.INITIALTOTALMAGNITUDE(&_IAVSDirectory.CallOpts) -} - // OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. // // Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) @@ -418,10 +387,6 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorSetRegistrati return _IAVSDirectory.Contract.CalculateOperatorSetRegistrationDigestHash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) } -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> 6b2ab7ed (build: bindings) // DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. // // Solidity: function domainSeparator() view returns(bytes32) @@ -453,29 +418,10 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) DomainSeparator() ([32]byte, e return _IAVSDirectory.Contract.DomainSeparator(&_IAVSDirectory.CallOpts) } -<<<<<<< HEAD -<<<<<<< HEAD -<<<<<<< HEAD -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. // -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_IAVSDirectory *IAVSDirectoryCaller) GetNumOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getNumOperatorsInOperatorSet", operatorSet) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) -======= -// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. -======= -======= -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0xdd63ac60. -// -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) -func (_IAVSDirectory *IAVSDirectoryCaller) GetAllocatableMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) +func (_IAVSDirectory *IAVSDirectoryCaller) GetAllocatableMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { var out []interface{} err := _IAVSDirectory.contract.Call(opts, &out, "getAllocatableMagnitude", operator, strategy, numToComplete) @@ -489,46 +435,69 @@ func (_IAVSDirectory *IAVSDirectoryCaller) GetAllocatableMagnitude(opts *bind.Ca } -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0xdd63ac60. +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) -func (_IAVSDirectory *IAVSDirectorySession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) +func (_IAVSDirectory *IAVSDirectorySession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { return _IAVSDirectory.Contract.GetAllocatableMagnitude(&_IAVSDirectory.CallOpts, operator, strategy, numToComplete) } -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0xdd63ac60. +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint8 numToComplete) view returns(uint64) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint8) (uint64, error) { +// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { return _IAVSDirectory.Contract.GetAllocatableMagnitude(&_IAVSDirectory.CallOpts, operator, strategy, numToComplete) } ->>>>>>> c7573609 (build: bindings) -// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. ->>>>>>> 49569901 (feat: set allocations (#691)) +// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. // -// Solidity: function getAllocationDelay(address operator) view returns(uint32) -func (_IAVSDirectory *IAVSDirectoryCaller) GetAllocationDelay(opts *bind.CallOpts, operator common.Address) (uint32, error) { +// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) +func (_IAVSDirectory *IAVSDirectoryCaller) GetCurrentSlashableMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getAllocationDelay", operator) + err := _IAVSDirectory.contract.Call(opts, &out, "getCurrentSlashableMagnitudes", operator, strategies) if err != nil { - return *new(uint32), err + return *new([]IAVSDirectoryOperatorSet), *new([][]uint64), err } -<<<<<<< HEAD - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) ->>>>>>> 6b2ab7ed (build: bindings) -======= - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) ->>>>>>> 49569901 (feat: set allocations (#691)) + out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) + out1 := *abi.ConvertType(out[1], new([][]uint64)).(*[][]uint64) + + return out0, out1, err + +} + +// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. +// +// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) +func (_IAVSDirectory *IAVSDirectorySession) GetCurrentSlashableMagnitudes(operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { + return _IAVSDirectory.Contract.GetCurrentSlashableMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies) +} + +// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. +// +// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetCurrentSlashableMagnitudes(operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { + return _IAVSDirectory.Contract.GetCurrentSlashableMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies) +} + +// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// +// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) +func (_IAVSDirectory *IAVSDirectoryCaller) GetNumOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "getNumOperatorsInOperatorSet", operatorSet) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -<<<<<<< HEAD -<<<<<<< HEAD // GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. // // Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) @@ -605,57 +574,36 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) GetOperatorsInOperatorSet(oper return _IAVSDirectory.Contract.GetOperatorsInOperatorSet(&_IAVSDirectory.CallOpts, operatorSet, start, length) } -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. // -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_IAVSDirectory *IAVSDirectoryCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { +// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) +func (_IAVSDirectory *IAVSDirectoryCaller) GetSlashableMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "inTotalOperatorSets", operator) + err := _IAVSDirectory.contract.Call(opts, &out, "getSlashableMagnitudes", operator, strategies, timestamp) if err != nil { - return *new(*big.Int), err + return *new([]IAVSDirectoryOperatorSet), *new([][]uint64), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err + out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) + out1 := *abi.ConvertType(out[1], new([][]uint64)).(*[][]uint64) -} + return out0, out1, err -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_IAVSDirectory *IAVSDirectorySession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _IAVSDirectory.Contract.InTotalOperatorSets(&_IAVSDirectory.CallOpts, operator) } -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. // -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_IAVSDirectory *IAVSDirectoryCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _IAVSDirectory.Contract.InTotalOperatorSets(&_IAVSDirectory.CallOpts, operator) -======= -// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. -======= -// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. ->>>>>>> 49569901 (feat: set allocations (#691)) -// -// Solidity: function getAllocationDelay(address operator) view returns(uint32) -func (_IAVSDirectory *IAVSDirectorySession) GetAllocationDelay(operator common.Address) (uint32, error) { - return _IAVSDirectory.Contract.GetAllocationDelay(&_IAVSDirectory.CallOpts, operator) +// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) +func (_IAVSDirectory *IAVSDirectorySession) GetSlashableMagnitudes(operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { + return _IAVSDirectory.Contract.GetSlashableMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies, timestamp) } -// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. // -<<<<<<< HEAD -// Solidity: function getSlashableBips(address operator, (address,uint32) operatorSet, address strategy, uint32 timestamp) view returns(uint16) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetSlashableBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategy common.Address, timestamp uint32) (uint16, error) { - return _IAVSDirectory.Contract.GetSlashableBips(&_IAVSDirectory.CallOpts, operator, operatorSet, strategy, timestamp) ->>>>>>> 6b2ab7ed (build: bindings) -======= -// Solidity: function getAllocationDelay(address operator) view returns(uint32) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetAllocationDelay(operator common.Address) (uint32, error) { - return _IAVSDirectory.Contract.GetAllocationDelay(&_IAVSDirectory.CallOpts, operator) +// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetSlashableMagnitudes(operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { + return _IAVSDirectory.Contract.GetSlashableMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies, timestamp) } // GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. @@ -687,7 +635,161 @@ func (_IAVSDirectory *IAVSDirectorySession) GetSlashablePPM(operator common.Addr // Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) func (_IAVSDirectory *IAVSDirectoryCallerSession) GetSlashablePPM(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { return _IAVSDirectory.Contract.GetSlashablePPM(&_IAVSDirectory.CallOpts, operator, operatorSet, strategies, timestamp, linear) ->>>>>>> 49569901 (feat: set allocations (#691)) +} + +// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. +// +// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) +func (_IAVSDirectory *IAVSDirectoryCaller) GetTotalMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "getTotalMagnitude", operator, strategy) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. +// +// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) +func (_IAVSDirectory *IAVSDirectorySession) GetTotalMagnitude(operator common.Address, strategy common.Address) (uint64, error) { + return _IAVSDirectory.Contract.GetTotalMagnitude(&_IAVSDirectory.CallOpts, operator, strategy) +} + +// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. +// +// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetTotalMagnitude(operator common.Address, strategy common.Address) (uint64, error) { + return _IAVSDirectory.Contract.GetTotalMagnitude(&_IAVSDirectory.CallOpts, operator, strategy) +} + +// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. +// +// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) +func (_IAVSDirectory *IAVSDirectoryCaller) GetTotalMagnitudeAtTimestamp(opts *bind.CallOpts, operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "getTotalMagnitudeAtTimestamp", operator, strategy, timestamp) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. +// +// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) +func (_IAVSDirectory *IAVSDirectorySession) GetTotalMagnitudeAtTimestamp(operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { + return _IAVSDirectory.Contract.GetTotalMagnitudeAtTimestamp(&_IAVSDirectory.CallOpts, operator, strategy, timestamp) +} + +// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. +// +// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetTotalMagnitudeAtTimestamp(operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { + return _IAVSDirectory.Contract.GetTotalMagnitudeAtTimestamp(&_IAVSDirectory.CallOpts, operator, strategy, timestamp) +} + +// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. +// +// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) +func (_IAVSDirectory *IAVSDirectoryCaller) GetTotalMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]uint64, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "getTotalMagnitudes", operator, strategies) + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. +// +// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) +func (_IAVSDirectory *IAVSDirectorySession) GetTotalMagnitudes(operator common.Address, strategies []common.Address) ([]uint64, error) { + return _IAVSDirectory.Contract.GetTotalMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies) +} + +// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. +// +// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetTotalMagnitudes(operator common.Address, strategies []common.Address) ([]uint64, error) { + return _IAVSDirectory.Contract.GetTotalMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies) +} + +// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. +// +// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) +func (_IAVSDirectory *IAVSDirectoryCaller) GetTotalMagnitudesAtTimestamp(opts *bind.CallOpts, operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "getTotalMagnitudesAtTimestamp", operator, strategies, timestamp) + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. +// +// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) +func (_IAVSDirectory *IAVSDirectorySession) GetTotalMagnitudesAtTimestamp(operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { + return _IAVSDirectory.Contract.GetTotalMagnitudesAtTimestamp(&_IAVSDirectory.CallOpts, operator, strategies, timestamp) +} + +// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. +// +// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) +func (_IAVSDirectory *IAVSDirectoryCallerSession) GetTotalMagnitudesAtTimestamp(operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { + return _IAVSDirectory.Contract.GetTotalMagnitudesAtTimestamp(&_IAVSDirectory.CallOpts, operator, strategies, timestamp) +} + +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_IAVSDirectory *IAVSDirectoryCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { + var out []interface{} + err := _IAVSDirectory.contract.Call(opts, &out, "inTotalOperatorSets", operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_IAVSDirectory *IAVSDirectorySession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _IAVSDirectory.Contract.InTotalOperatorSets(&_IAVSDirectory.CallOpts, operator) +} + +// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// +// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) +func (_IAVSDirectory *IAVSDirectoryCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { + return _IAVSDirectory.Contract.InTotalOperatorSets(&_IAVSDirectory.CallOpts, operator) } // IsMember is a free data retrieval call binding the contract method 0xda2ff05d. @@ -783,10 +885,6 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) IsOperatorSetAVS(avs common.Ad return _IAVSDirectory.Contract.IsOperatorSetAVS(&_IAVSDirectory.CallOpts, avs) } -<<<<<<< HEAD -======= ->>>>>>> ce94473c (feat: operator commission bips (#627)) -======= // IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. // // Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) @@ -818,7 +916,6 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) IsOperatorSlashable(operator c return _IAVSDirectory.Contract.IsOperatorSlashable(&_IAVSDirectory.CallOpts, operator, operatorSet) } ->>>>>>> 6b2ab7ed (build: bindings) // OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // // Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) @@ -850,9 +947,6 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSaltIsSpent(operator c return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) } -<<<<<<< HEAD -<<<<<<< HEAD -<<<<<<< HEAD // OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. // // Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) @@ -978,106 +1072,25 @@ func (_IAVSDirectory *IAVSDirectoryTransactorSession) CreateOperatorSets(operato return _IAVSDirectory.Contract.CreateOperatorSets(&_IAVSDirectory.TransactOpts, operatorSetIds) } -======= ->>>>>>> ce94473c (feat: operator commission bips (#627)) // DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. -======= -// Allocate is a paid mutator transaction binding the contract method 0x70196708. ->>>>>>> 6b2ab7ed (build: bindings) -======= -// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. ->>>>>>> 49569901 (feat: set allocations (#691)) -// -// Solidity: function operatorSetMemberCount(address avs, uint32 operatorSetId) view returns(uint256) -func (_IAVSDirectory *IAVSDirectoryCaller) OperatorSetMemberCount(opts *bind.CallOpts, avs common.Address, operatorSetId uint32) (*big.Int, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "operatorSetMemberCount", avs, operatorSetId) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. -// -// Solidity: function operatorSetMemberCount(address avs, uint32 operatorSetId) view returns(uint256) -func (_IAVSDirectory *IAVSDirectorySession) OperatorSetMemberCount(avs common.Address, operatorSetId uint32) (*big.Int, error) { - return _IAVSDirectory.Contract.OperatorSetMemberCount(&_IAVSDirectory.CallOpts, avs, operatorSetId) -} - -// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. -// -// Solidity: function operatorSetMemberCount(address avs, uint32 operatorSetId) view returns(uint256) -func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSetMemberCount(avs common.Address, operatorSetId uint32) (*big.Int, error) { - return _IAVSDirectory.Contract.OperatorSetMemberCount(&_IAVSDirectory.CallOpts, avs, operatorSetId) -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "becomeOperatorSetAVS") -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_IAVSDirectory *IAVSDirectorySession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _IAVSDirectory.Contract.BecomeOperatorSetAVS(&_IAVSDirectory.TransactOpts) -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _IAVSDirectory.Contract.BecomeOperatorSetAVS(&_IAVSDirectory.TransactOpts) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) CancelSalt(opts *bind.TransactOpts, salt [32]byte) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "cancelSalt", salt) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. // -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_IAVSDirectory *IAVSDirectorySession) CancelSalt(salt [32]byte) (*types.Transaction, error) { - return _IAVSDirectory.Contract.CancelSalt(&_IAVSDirectory.TransactOpts, salt) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "deregisterOperatorFromAVS", operator) } -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { - return _IAVSDirectory.Contract.CancelSalt(&_IAVSDirectory.TransactOpts, salt) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "createOperatorSets", operatorSetIds) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectorySession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.CreateOperatorSets(&_IAVSDirectory.TransactOpts, operatorSetIds) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_IAVSDirectory *IAVSDirectorySession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) } -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.CreateOperatorSets(&_IAVSDirectory.TransactOpts, operatorSetIds) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) } // DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. @@ -1122,27 +1135,6 @@ func (_IAVSDirectory *IAVSDirectoryTransactorSession) ForceDeregisterFromOperato return _IAVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) } -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. -// -// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) InitializeAllocationDelay(opts *bind.TransactOpts, operator common.Address, delay uint32) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "initializeAllocationDelay", operator, delay) -} - -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. -// -// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() -func (_IAVSDirectory *IAVSDirectorySession) InitializeAllocationDelay(operator common.Address, delay uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.InitializeAllocationDelay(&_IAVSDirectory.TransactOpts, operator, delay) -} - -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x80fe6da4. -// -// Solidity: function initializeAllocationDelay(address operator, uint32 delay) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) InitializeAllocationDelay(operator common.Address, delay uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.InitializeAllocationDelay(&_IAVSDirectory.TransactOpts, operator, delay) -} - // MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. // // Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() @@ -1185,6 +1177,27 @@ func (_IAVSDirectory *IAVSDirectoryTransactorSession) ModifyAllocations(operator return _IAVSDirectory.Contract.ModifyAllocations(&_IAVSDirectory.TransactOpts, operator, allocations, operatorSignature) } +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) +} + +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. +// +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) +} + // RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. // // Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() @@ -1248,24 +1261,24 @@ func (_IAVSDirectory *IAVSDirectoryTransactorSession) UpdateAVSMetadataURI(metad return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) } -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. // -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) UpdateFreeMagnitude(opts *bind.TransactOpts, operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) UpdateFreeMagnitude(opts *bind.TransactOpts, operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { return _IAVSDirectory.contract.Transact(opts, "updateFreeMagnitude", operator, strategies, numToComplete) } -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. // -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() -func (_IAVSDirectory *IAVSDirectorySession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() +func (_IAVSDirectory *IAVSDirectorySession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { return _IAVSDirectory.Contract.UpdateFreeMagnitude(&_IAVSDirectory.TransactOpts, operator, strategies, numToComplete) } -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. +// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. // -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { +// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { return _IAVSDirectory.Contract.UpdateFreeMagnitude(&_IAVSDirectory.TransactOpts, operator, strategies, numToComplete) } diff --git a/pkg/bindings/IDelegationFaucet/binding.go b/pkg/bindings/IDelegationFaucet/binding.go index 9486264d0..c66653df5 100644 --- a/pkg/bindings/IDelegationFaucet/binding.go +++ b/pkg/bindings/IDelegationFaucet/binding.go @@ -38,13 +38,13 @@ type IDelegationManagerQueuedWithdrawalParams struct { // IDelegationManagerWithdrawal is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerWithdrawal struct { - Staker common.Address - DelegatedTo common.Address - Withdrawer common.Address - Nonce *big.Int - StartBlock uint32 - Strategies []common.Address - Shares []*big.Int + Staker common.Address + DelegatedTo common.Address + Withdrawer common.Address + Nonce *big.Int + StartTimestamp uint32 + Strategies []common.Address + ScaledShares []*big.Int } // ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. @@ -55,7 +55,7 @@ type ISignatureUtilsSignatureWithExpiry struct { // IDelegationFaucetMetaData contains all meta data concerning the IDelegationFaucet contract. var IDelegationFaucetMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"callAddress\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"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\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getStaker\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"mintDepositAndDelegate\",\"inputs\":[{\"name\":\"_operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_depositAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queueWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"callAddress\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"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\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getStaker\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"mintDepositAndDelegate\",\"inputs\":[{\"name\":\"_operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_depositAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queueWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"}]", } // IDelegationFaucetABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IWhitelister/binding.go b/pkg/bindings/IWhitelister/binding.go index e4afb3731..487579bb7 100644 --- a/pkg/bindings/IWhitelister/binding.go +++ b/pkg/bindings/IWhitelister/binding.go @@ -38,18 +38,18 @@ type IDelegationManagerQueuedWithdrawalParams struct { // IDelegationManagerWithdrawal is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerWithdrawal struct { - Staker common.Address - DelegatedTo common.Address - Withdrawer common.Address - Nonce *big.Int - StartBlock uint32 - Strategies []common.Address - Shares []*big.Int + Staker common.Address + DelegatedTo common.Address + Withdrawer common.Address + Nonce *big.Int + StartTimestamp uint32 + Strategies []common.Address + ScaledShares []*big.Int } // IWhitelisterMetaData contains all meta data concerning the IWhitelister contract. var IWhitelisterMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"callAddress\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"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\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getStaker\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queueWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"callAddress\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"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\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getStaker\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queueWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", } // IWhitelisterABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/RewardsCoordinator/binding.go b/pkg/bindings/RewardsCoordinator/binding.go index 4385bf9d6..4c3aab35e 100644 --- a/pkg/bindings/RewardsCoordinator/binding.go +++ b/pkg/bindings/RewardsCoordinator/binding.go @@ -95,7 +95,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf struct { // RewardsCoordinatorMetaData contains all meta data concerning the RewardsCoordinator contract. var RewardsCoordinatorMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"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\":\"_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", - Bin: "0x6101e06040523480156200001257600080fd5b506040516200511f3803806200511f8339810160408190526200003591620003c0565b898989898989898989896200004b878462000497565b63ffffffff1615620000f05760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b620000ff620151808862000497565b63ffffffff1615620001a05760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a401620000e7565b620001ac878362000497565b63ffffffff1615620002635760405162461bcd60e51b815260206004820152606d60248201527f52657761726473436f6f7264696e61746f723a204f50455241544f525f53455460448201527f5f47454e455349535f524557415244535f54494d455354414d50206d7573742060648201527f62652061206d756c7469706c65206f662043414c43554c4154494f4e5f494e5460848201526c455256414c5f5345434f4e445360981b60a482015260c401620000e7565b6001600160a01b03998a166101605297891661018052959097166101a05263ffffffff93841660805291831660a052821661010052811660c05292831660e0528216610120521661014052620002b8620002ce565b5050466101c05250620004c99650505050505050565b600054610100900460ff1615620003385760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000e7565b60005460ff90811610156200038b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620003a357600080fd5b50565b805163ffffffff81168114620003bb57600080fd5b919050565b6000806000806000806000806000806101408b8d031215620003e157600080fd5b8a51620003ee816200038d565b60208c0151909a5062000401816200038d565b60408c015190995062000414816200038d565b97506200042460608c01620003a6565b96506200043460808c01620003a6565b95506200044460a08c01620003a6565b94506200045460c08c01620003a6565b93506200046460e08c01620003a6565b9250620004756101008c01620003a6565b9150620004866101208c01620003a6565b90509295989b9194979a5092959850565b600063ffffffff80841680620004bd57634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614b896200059660003960006124e80152600081816106970152610e1c01526000818161059d01526130d9015260006108e801526000818161053c0152610f930152600081816108750152610fb4015260008181610576015261124701526000818161048d01526112680152600081816103b90152612fd601526000818161080d0152612cda0152600081816107b301528181612d8a0152612e540152614b896000f3fe608060405234801561001057600080fd5b50600436106103775760003560e01c8063715018a6116101d3578063c46db60611610104578063f2fde38b116100a2578063f96abf2e1161007c578063f96abf2e14610938578063fabc1cbc1461094b578063fbf1e2c11461095e578063fce36c7d1461097157600080fd5b8063f2fde38b1461090a578063f698da251461091d578063f8cd84481461092557600080fd5b8063de02e503116100de578063de02e503146108aa578063e221b245146108bd578063e810ce21146108d0578063ea4d3c9b146108e357600080fd5b8063c46db60614610842578063d11e9ae514610870578063d4540a551461089757600080fd5b80639104c31911610171578063a0169ddd1161014b578063a0169ddd146107d5578063bb7e451f146107e8578063bf21a8aa14610808578063c336f19d1461082f57600080fd5b80639104c3191461078b5780639be3d4e4146107a65780639d45c281146107ae57600080fd5b8063863cb9a9116101ad578063863cb9a914610729578063865c69531461073c578063886f1195146107675780638da5cb5b1461077a57600080fd5b8063715018a6146106e75780637adace91146106ef5780637b8f8b051461072157600080fd5b806339b70e38116102ad57806358baaa3e1161024b5780635c975abb116102255780635c975abb146106775780635e9d83481461067f5780636b3aa72e146106925780636d21117e146106b957600080fd5b806358baaa3e14610639578063595c6a671461064c5780635ac86ab71461065457600080fd5b80633ccc861d116102875780633ccc861d146105e95780633efe1db6146105fc5780634d18cc351461060f5780634d7a80d41461062657600080fd5b806339b70e38146105985780633a8c0786146105bf5780633c8fcf7c146105d657600080fd5b8063136439dd1161031a5780632c9c60cf116102f45780632c9c60cf146105245780633486e32e1461053757806336af41fa1461055e57806337838ed01461057157600080fd5b8063136439dd146104af578063149bc872146104c25780632b9f64a4146104e357600080fd5b80630e9a53cf116103565780630e9a53cf146104185780630eb383451461046057806310d67a2f14610475578063131433b41461048857600080fd5b806218572c1461037c57806304a0c502146103b4578063092db007146103f0575b600080fd5b61039f61038a366004613f70565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103ab565b60cb5461040590600160e01b900461ffff1681565b60405161ffff90911681526020016103ab565b610420610984565b604080518251815260208084015163ffffffff908116918301919091528383015116918101919091526060918201511515918101919091526080016103ab565b61047361046e366004613f9b565b610a63565b005b610473610483366004613f70565b610ae5565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736104bd366004613fd4565b610ba1565b6104d56104d0366004614005565b610ce0565b6040519081526020016103ab565b61050c6104f1366004613f70565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103ab565b61047361053236600461406d565b610d56565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61047361056c36600461406d565b61109e565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b60cb546103db90600160a01b900463ffffffff1681565b6103db6105e43660046140d5565b611336565b6104736105f736600461412c565b6115c4565b61047361060a366004614187565b611986565b60cb546103db90600160c01b900463ffffffff1681565b6104056106343660046141b3565b611c57565b6104736106473660046141f0565b611e06565b610473611e17565b61039f61066236600461420b565b606654600160ff9092169190911b9081161490565b6066546104d5565b61039f61068d36600461422e565b611ede565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b61039f6106c7366004614263565b60cf60209081526000928352604080842090915290825290205460ff1681565b610473611f6b565b6107026106fd36600461428f565b611f7f565b6040805161ffff909316835263ffffffff9091166020830152016103ab565b60ca546104d5565b610473610737366004613f70565b611fe7565b6104d561074a3660046142ef565b60cd60209081526000928352604080842090915290825290205481565b60655461050c906001600160a01b031681565b6033546001600160a01b031661050c565b61050c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610420611ff8565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736107e3366004613f70565b612096565b6104d56107f6366004613f70565b60ce6020526000908152604090205481565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104d561083d3660046141b3565b6120f5565b61039f610850366004614263565b60d060209081526000928352604080842090915290825290205460ff1681565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736108a536600461431d565b6121a8565b6104206108b8366004613fd4565b6122f0565b6104736108cb366004614390565b612382565b6103db6108de366004613fd4565b612393565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b610473610918366004613f70565b61246e565b6104d56124e4565b6104d5610933366004614005565b612522565b6104736109463660046141f0565b612533565b610473610959366004613fd4565b612769565b60cb5461050c906001600160a01b031681565b61047361097f36600461406d565b6128c5565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b8015610a5f57600060ca6109c16001846143c1565b815481106109d1576109d16143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610a415750806040015163ffffffff164210155b15610a4c5792915050565b5080610a57816143ee565b9150506109ac565b5090565b610a6b612a42565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5c9190614405565b6001600160a01b0316336001600160a01b031614610b955760405162461bcd60e51b8152600401610b8c90614422565b60405180910390fd5b610b9e81612a9c565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d919061446c565b610c295760405162461bcd60e51b8152600401610b8c90614489565b60665481811614610ca25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610cf06020840184613f70565b8360200135604051602001610d399392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460049060109081161415610d7f5760405162461bcd60e51b8152600401610b8c906144d1565b60026097541415610da25760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110610dc557610dc56143d8565b9050602002810190610dd7919061453f565b33600081815260ce60209081526040808320549051949550939192610e0292909185918791016146fc565b6040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166384d76f7b33856020016020810190610e5d91906141f0565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff166024820152604401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed0919061446c565b610f4c5760405162461bcd60e51b815260206004820152604160248201527f52657761726473436f6f7264696e61746f722e7265776172644f70657261746f60448201527f72536574466f7252616e67653a20696e76616c6964206f70657261746f7253656064820152601d60fa1b608482015260a401610b8c565b610fd8610f5c604085018561472c565b610f6c6080870160608801613f70565b6080870135610f8160c0890160a08a016141f0565b610f9160e08a0160c08b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260cf602090815260408083208484529091529020805460ff1916600190811790915561100b908390614776565b33600081815260ce602052604090819020929092559051829184917f29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b29061105390889061478e565b60405180910390a46110853330608086018035906110749060608901613f70565b6001600160a01b03169291906132ab565b836001019350505050610daa565b505060016097555050565b606654600190600290811614156110c75760405162461bcd60e51b8152600401610b8c906144d1565b33600090815260d1602052604090205460ff166111665760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a401610b8c565b600260975414156111895760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b8281101561109357368484838181106111ac576111ac6143d8565b90506020028101906111be91906147a1565b33600081815260ce602090815260408083205490519495509391926111e99290918591879101614836565b60408051601f198184030181529190528051602090910120905061128c611210848061472c565b6112206040870160208801613f70565b60408701356112356080890160608a016141f0565b61124560a08a0160808b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260d0602090815260408083208484529091529020805460ff191660019081179091556112bf908390614776565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf2704829061130790889061485d565b60405180910390a46113283330604086018035906110749060208901613f70565b836001019350505050611191565b600061271061ffff831611156113c25760405162461bcd60e51b815260206004820152604560248201527f52657761726473436f6f7264696e61746f722e7365744f70657261746f72436f60448201527f6d6d697373696f6e426970733a20636f6d6d697373696f6e4269707320746f6f606482015264040d0d2ced60db1b608482015260a401610b8c565b6113cf62093a8042614776565b33600090815260d360209081526040822092935090919082906113f490880188613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600086602001602081019061142991906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008560008111156114575761145761455f565b80156114655761146561455f565b8152602081019190915260400160002080549091508015806114c0575063ffffffff8316826114956001846143c1565b815481106114a5576114a56143d8565b60009182526020909120015462010000900463ffffffff1614155b15611523576040805180820190915261ffff808616825263ffffffff808616602080850191825286546001810188556000888152919091209451940180549151909216620100000265ffffffffffff199091169390921692909217179055611560565b83826115306001846143c1565b81548110611540576115406143d8565b6000918252602090912001805461ffff191661ffff929092169190911790555b8560405161156e9190614870565b6040518091039020336001600160a01b03167f811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba8787876040516115b3939291906148a8565b60405180910390a350509392505050565b606654600290600490811614156115ed5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156116105760405162461bcd60e51b8152600401610b8c90614508565b6002609755600060ca61162660208601866141f0565b63ffffffff168154811061163c5761163c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152905061169d848261331c565b60006116af6080860160608701613f70565b6001600160a01b03808216600090815260cc602052604090205491925016806116d55750805b336001600160a01b038216146117535760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d6572000000006064820152608401610b8c565b60005b61176360a08801886148d4565b9050811015611978573661177a60e089018961472c565b8381811061178a5761178a6143d8565b6001600160a01b038716600090815260cd6020908152604080832093029490940194509290915082906117bf90850185613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050808260200135116118795760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a401610b8c565b60006118898260208501356143c1565b6001600160a01b038716600090815260cd602090815260408220929350850180359291906118b79087613f70565b6001600160a01b03168152602080820192909252604001600020919091556118f9908a9083906118e990870187613f70565b6001600160a01b031691906135ed565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061193d6020890189613f70565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050806119719061491e565b9050611756565b505060016097555050505050565b606654600390600890811614156119af5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146119d95760405162461bcd60e51b8152600401610b8c90614939565b60cb5463ffffffff600160c01b909104811690831611611a755760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a401610b8c565b428263ffffffff1610611b0e5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a401610b8c565b60ca5460cb54600090611b2e90600160a01b900463ffffffff164261498d565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60cb546001600160a01b038416600090815260d36020908152604082209192600160e01b900461ffff169183918290611c9290880188613f70565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866020016020810190611cc791906141f0565b63ffffffff1663ffffffff1681526020019081526020016000206000856000811115611cf557611cf561455f565b8015611d0357611d0361455f565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611d77576000848152602090819020604080518082019091529084015461ffff8116825262010000900463ffffffff1681830152825260019092019101611d31565b5050825192935050505b8015611df95763ffffffff421682611d9a6001846143c1565b81518110611daa57611daa6143d8565b60200260200101516020015163ffffffff1611611df05781611dcd6001836143c1565b81518110611ddd57611ddd6143d8565b6020026020010151600001519250611df9565b60001901611d81565b50909150505b9392505050565b611e0e612a42565b610b9e8161361d565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e83919061446c565b611e9f5760405162461bcd60e51b8152600401610b8c90614489565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000611f638260ca611ef360208301836141f0565b63ffffffff1681548110611f0957611f096143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015261331c565b506001919050565b611f73612a42565b611f7d600061368e565b565b60d36020528460005260406000206020528360005260406000206020528260005260406000206020528160005260406000208181548110611fbf57600080fd5b60009182526020909120015461ffff8116955062010000900463ffffffff1693508592505050565b611fef612a42565b610b9e816136e0565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461202c906001906143c1565b8154811061203c5761203c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b6001600160a01b038316600090815260d360209081526040822090829061211e90860186613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600084602001602081019061215391906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008360008111156121815761218161455f565b801561218f5761218f61455f565b8152602081019190915260400160002054949350505050565b600054610100900460ff16158080156121c85750600054600160ff909116105b806121e25750303b1580156121e2575060005460ff166001145b6122455760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b8c565b6000805460ff191660011790558015612268576000805461ff0019166101001790555b61227061373c565b60c95561227d86866137d3565b6122868761368e565b61228f846136e0565b6122988361361d565b6122a1826138bd565b80156122e7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca8281548110612327576123276143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b61238a612a42565b610b9e816138bd565b60ca546000905b63ffffffff8116156123ff578260ca6123b46001846149b5565b63ffffffff16815481106123ca576123ca6143d8565b90600052602060002090600202016000015414156123ed57611dff6001826149b5565b806123f7816149da565b91505061239a565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e640000000000000000006064820152608401610b8c565b612476612a42565b6001600160a01b0381166124db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8c565b610b9e8161368e565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612515575060c95490565b61251d61373c565b905090565b60006001610cf06020840184613f70565b6066546003906008908116141561255c5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146125865760405162461bcd60e51b8152600401610b8c90614939565b60ca5463ffffffff8316106125f75760405162461bcd60e51b815260206004820152603160248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152700d2dcecc2d8d2c840e4dedee892dcc8caf607b1b6064820152608401610b8c565b600060ca8363ffffffff1681548110612612576126126143d8565b906000526020600020906002020190508060010160089054906101000a900460ff161561269f5760405162461bcd60e51b815260206004820152603560248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152741c9bdbdd08185b1c9958591e48191a5cd8589b1959605a1b6064820152608401610b8c565b6001810154600160201b900463ffffffff16421061271e5760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152751c9bdbdd08185b1c9958591e481858dd1a5d985d195960521b6064820152608401610b8c565b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190614405565b6001600160a01b0316336001600160a01b0316146128105760405162461bcd60e51b8152600401610b8c90614422565b60665419811960665419161461288e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610cd5565b606654600090600190811614156128ee5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156129115760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110612934576129346143d8565b905060200281019061294691906147a1565b33600081815260ce602090815260408083205490519495509391926129719290918591879101614836565b60408051601f1981840301815291905280516020909101209050612998611210848061472c565b33600090815260cf602090815260408083208484529091529020805460ff191660019081179091556129cb908390614776565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190612a1390889061485d565b60405180910390a4612a343330604086018035906110749060208901613f70565b836001019350505050612919565b6033546001600160a01b03163314611f7d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b8c565b6001600160a01b038116612b2a5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b8c565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b86612bf6576040805162461bcd60e51b8152602060048201526024810191909152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206e6f2073747261746567696573207365746064820152608401610b8c565b60008511612c645760405162461bcd60e51b81526020600482015260416024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a401610b8c565b6f4b3b4ca85a86c47a098a223fffffffff851115612cd85760405162461bcd60e51b815260206004820152603f6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c61726765006064820152608401610b8c565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168363ffffffff161115612d855760405162461bcd60e51b81526020600482015260546024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a401610b8c565b612daf7f000000000000000000000000000000000000000000000000000000000000000084614a10565b63ffffffff1615612e4f5760405162461bcd60e51b815260206004820152606a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c401610b8c565b612e797f000000000000000000000000000000000000000000000000000000000000000085614a10565b63ffffffff1615612f1f5760405162461bcd60e51b81526020600482015260706024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c401610b8c565b8363ffffffff168263ffffffff1642612f3891906143c1565b11158015612f5257508363ffffffff168163ffffffff1611155b612fcc5760405162461bcd60e51b81526020600482015260516024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a401610b8c565b612ffc63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001642614776565b8463ffffffff1611156130815760405162461bcd60e51b81526020600482015260536024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a401610b8c565b6000805b8881101561329f5760008a8a838181106130a1576130a16143d8565b6130b79260206040909202019081019150613f70565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015613122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613146919061446c565b8061316d57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b6131e05760405162461bcd60e51b815260206004820152604a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a401610b8c565b806001600160a01b0316836001600160a01b03161061328d5760405162461bcd60e51b81526020600482015260696024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c401610b8c565b91506132988161491e565b9050613085565b50505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526133169085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613928565b50505050565b8060600151156133755760405162461bcd60e51b81526020600482015260306024820152600080516020614b1483398151915260448201526f1c9bdbdd081a5cc8191a5cd8589b195960821b6064820152608401610b8c565b806040015163ffffffff164210156133dc5760405162461bcd60e51b81526020600482015260366024820152600080516020614b148339815191526044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b6064820152608401610b8c565b6133e960c08301836148d4565b90506133f860a08401846148d4565b9050146134705760405162461bcd60e51b815260206004820152604c6024820152600080516020614b1483398151915260448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a401610b8c565b61347d60e083018361472c565b905061348c60c08401846148d4565b9050146135025760405162461bcd60e51b815260206004820152604a6024820152600080516020614b1483398151915260448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610b8c565b805161352e9061351860408501602086016141f0565b6135256040860186614a33565b866060016139fa565b60005b61353e60a08401846148d4565b90508110156135e8576135d8608084013561355c60a08601866148d4565b8481811061356c5761356c6143d8565b905060200201602081019061358191906141f0565b61358e60c08701876148d4565b8581811061359e5761359e6143d8565b90506020028101906135b09190614a33565b6135bd60e089018961472c565b878181106135cd576135cd6143d8565b905060400201613b6e565b6135e18161491e565b9050613531565b505050565b6040516001600160a01b0383166024820152604481018290526135e890849063a9059cbb60e01b906064016132df565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156137f457506001600160a01b03821615155b6138765760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26138b982612a9c565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061397d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613cbf9092919063ffffffff16565b8051909150156135e8578080602001905181019061399b919061446c565b6135e85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b8c565b613a05602083614a7a565b6001901b8463ffffffff1610613a8f5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a401610b8c565b6000613a9a82610ce0565b9050613ae584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a401610b8c565b505050505050565b613b79602083614a7a565b6001901b8463ffffffff1610613bf75760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e646578000000006064820152608401610b8c565b6000613c0282612522565b9050613c4d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f66006064820152608401610b8c565b6060613cce8484600085613cee565b949350505050565b600083613ce4868585613e1f565b1495945050505050565b606082471015613d4f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b8c565b6001600160a01b0385163b613da65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b8c565b600080866001600160a01b03168587604051613dc29190614aba565b60006040518083038185875af1925050503d8060008114613dff576040519150601f19603f3d011682016040523d82523d6000602084013e613e04565b606091505b5091509150613e14828286613f22565b979650505050505050565b600060208451613e2f9190614acc565b15613eb65760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610b8c565b8260205b85518111613f1957613ecd600285614acc565b613eee57816000528086015160205260406000209150600284049350613f07565b8086015160005281602052604060002091506002840493505b613f12602082614776565b9050613eba565b50949350505050565b60608315613f31575081611dff565b825115613f415782518084602001fd5b8160405162461bcd60e51b8152600401610b8c9190614ae0565b6001600160a01b0381168114610b9e57600080fd5b600060208284031215613f8257600080fd5b8135611dff81613f5b565b8015158114610b9e57600080fd5b60008060408385031215613fae57600080fd5b8235613fb981613f5b565b91506020830135613fc981613f8d565b809150509250929050565b600060208284031215613fe657600080fd5b5035919050565b600060408284031215613fff57600080fd5b50919050565b60006040828403121561401757600080fd5b611dff8383613fed565b60008083601f84011261403357600080fd5b50813567ffffffffffffffff81111561404b57600080fd5b6020830191508360208260051b850101111561406657600080fd5b9250929050565b6000806020838503121561408057600080fd5b823567ffffffffffffffff81111561409757600080fd5b6140a385828601614021565b90969095509350505050565b8035600181106140be57600080fd5b919050565b803561ffff811681146140be57600080fd5b6000806000608084860312156140ea57600080fd5b6140f48585613fed565b9250614102604085016140af565b9150614110606085016140c3565b90509250925092565b60006101008284031215613fff57600080fd5b6000806040838503121561413f57600080fd5b823567ffffffffffffffff81111561415657600080fd5b61416285828601614119565b9250506020830135613fc981613f5b565b803563ffffffff811681146140be57600080fd5b6000806040838503121561419a57600080fd5b823591506141aa60208401614173565b90509250929050565b6000806000608084860312156141c857600080fd5b83356141d381613f5b565b92506141e28560208601613fed565b9150614110606085016140af565b60006020828403121561420257600080fd5b611dff82614173565b60006020828403121561421d57600080fd5b813560ff81168114611dff57600080fd5b60006020828403121561424057600080fd5b813567ffffffffffffffff81111561425757600080fd5b613cce84828501614119565b6000806040838503121561427657600080fd5b823561428181613f5b565b946020939093013593505050565b600080600080600060a086880312156142a757600080fd5b85356142b281613f5b565b945060208601356142c281613f5b565b93506142d060408701614173565b92506142de606087016140af565b949793965091946080013592915050565b6000806040838503121561430257600080fd5b823561430d81613f5b565b91506020830135613fc981613f5b565b60008060008060008060c0878903121561433657600080fd5b863561434181613f5b565b9550602087013561435181613f5b565b945060408701359350606087013561436881613f5b565b925061437660808801614173565b915061438460a088016140c3565b90509295509295509295565b6000602082840312156143a257600080fd5b611dff826140c3565b634e487b7160e01b600052601160045260246000fd5b6000828210156143d3576143d36143ab565b500390565b634e487b7160e01b600052603260045260246000fd5b6000816143fd576143fd6143ab565b506000190190565b60006020828403121561441757600080fd5b8151611dff81613f5b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561447e57600080fd5b8151611dff81613f8d565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000823560de1983360301811261455557600080fd5b9190910192915050565b634e487b7160e01b600052602160045260246000fd5b6001811061459357634e487b7160e01b600052602160045260246000fd5b9052565b6000808335601e198436030181126145ae57600080fd5b830160208101925035905067ffffffffffffffff8111156145ce57600080fd5b8060061b360383131561406657600080fd5b818352600060208085019450826000805b8681101561464557823561460481613f5b565b6001600160a01b03168852828401356bffffffffffffffffffffffff811680821461462d578384fd5b898601525060409788019792909201916001016145f1565b50959695505050505050565b6146638261465e836140af565b614575565b600061467160208301614173565b63ffffffff808216602086015261468b6040850185614597565b925060e060408701526146a260e0870184836145e0565b92505060608401356146b381613f5b565b6001600160a01b0316606086015260808481013590860152806146d860a08601614173565b1660a0860152806146eb60c08601614173565b1660c0860152508091505092915050565b60018060a01b03841681528260208201526060604082015260006147236060830184614651565b95945050505050565b6000808335601e1984360301811261474357600080fd5b83018035915067ffffffffffffffff82111561475e57600080fd5b6020019150600681901b360382131561406657600080fd5b60008219821115614789576147896143ab565b500190565b602081526000611dff6020830184614651565b60008235609e1983360301811261455557600080fd5b60006147c38283614597565b60a085526147d560a0860182846145e0565b91505060208301356147e681613f5b565b6001600160a01b031660208501526040838101359085015261480a60608401614173565b63ffffffff80821660608701528061482460808701614173565b16608087015250508091505092915050565b60018060a01b038416815282602082015260606040820152600061472360608301846147b7565b602081526000611dff60208301846147b7565b6000823561487d81613f5b565b6001600160a01b0316825263ffffffff61489960208501614173565b16602083015250604001919050565b606081016148b68286614575565b61ffff8416602083015263ffffffff83166040830152949350505050565b6000808335601e198436030181126148eb57600080fd5b83018035915067ffffffffffffffff82111561490657600080fd5b6020019150600581901b360382131561406657600080fd5b6000600019821415614932576149326143ab565b5060010190565b60208082526034908201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6040820152733a103a3432903932bbb0b93239aab83230ba32b960611b606082015260800190565b600063ffffffff8083168185168083038211156149ac576149ac6143ab565b01949350505050565b600063ffffffff838116908316818110156149d2576149d26143ab565b039392505050565b600063ffffffff8216806149f0576149f06143ab565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680614a2757614a276149fa565b92169190910692915050565b6000808335601e19843603018112614a4a57600080fd5b83018035915067ffffffffffffffff821115614a6557600080fd5b60200191503681900382131561406657600080fd5b600082614a8957614a896149fa565b500490565b60005b83811015614aa9578181015183820152602001614a91565b838111156133165750506000910152565b60008251614555818460208701614a8e565b600082614adb57614adb6149fa565b500690565b6020815260008251806020840152614aff816040850160208701614a8e565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2052657761726473436f6f7264696e61746f722e5f76616c696461746552657761a2646970667358221220dcff1a75da71b2f873d2eeb37b40f1e17231b2426cbcc1b471686c39cf2fc60e64736f6c634300080c0033", + Bin: "0x6101e06040523480156200001257600080fd5b506040516200511f3803806200511f8339810160408190526200003591620003c0565b898989898989898989896200004b878462000497565b63ffffffff1615620000f05760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b620000ff620151808862000497565b63ffffffff1615620001a05760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a401620000e7565b620001ac878362000497565b63ffffffff1615620002635760405162461bcd60e51b815260206004820152606d60248201527f52657761726473436f6f7264696e61746f723a204f50455241544f525f53455460448201527f5f47454e455349535f524557415244535f54494d455354414d50206d7573742060648201527f62652061206d756c7469706c65206f662043414c43554c4154494f4e5f494e5460848201526c455256414c5f5345434f4e445360981b60a482015260c401620000e7565b6001600160a01b03998a166101605297891661018052959097166101a05263ffffffff93841660805291831660a052821661010052811660c05292831660e0528216610120521661014052620002b8620002ce565b5050466101c05250620004c99650505050505050565b600054610100900460ff1615620003385760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000e7565b60005460ff90811610156200038b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620003a357600080fd5b50565b805163ffffffff81168114620003bb57600080fd5b919050565b6000806000806000806000806000806101408b8d031215620003e157600080fd5b8a51620003ee816200038d565b60208c0151909a5062000401816200038d565b60408c015190995062000414816200038d565b97506200042460608c01620003a6565b96506200043460808c01620003a6565b95506200044460a08c01620003a6565b94506200045460c08c01620003a6565b93506200046460e08c01620003a6565b9250620004756101008c01620003a6565b9150620004866101208c01620003a6565b90509295989b9194979a5092959850565b600063ffffffff80841680620004bd57634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614b896200059660003960006124e80152600081816106970152610e1c01526000818161059d01526130d9015260006108e801526000818161053c0152610f930152600081816108750152610fb4015260008181610576015261124701526000818161048d01526112680152600081816103b90152612fd601526000818161080d0152612cda0152600081816107b301528181612d8a0152612e540152614b896000f3fe608060405234801561001057600080fd5b50600436106103775760003560e01c8063715018a6116101d3578063c46db60611610104578063f2fde38b116100a2578063f96abf2e1161007c578063f96abf2e14610938578063fabc1cbc1461094b578063fbf1e2c11461095e578063fce36c7d1461097157600080fd5b8063f2fde38b1461090a578063f698da251461091d578063f8cd84481461092557600080fd5b8063de02e503116100de578063de02e503146108aa578063e221b245146108bd578063e810ce21146108d0578063ea4d3c9b146108e357600080fd5b8063c46db60614610842578063d11e9ae514610870578063d4540a551461089757600080fd5b80639104c31911610171578063a0169ddd1161014b578063a0169ddd146107d5578063bb7e451f146107e8578063bf21a8aa14610808578063c336f19d1461082f57600080fd5b80639104c3191461078b5780639be3d4e4146107a65780639d45c281146107ae57600080fd5b8063863cb9a9116101ad578063863cb9a914610729578063865c69531461073c578063886f1195146107675780638da5cb5b1461077a57600080fd5b8063715018a6146106e75780637adace91146106ef5780637b8f8b051461072157600080fd5b806339b70e38116102ad57806358baaa3e1161024b5780635c975abb116102255780635c975abb146106775780635e9d83481461067f5780636b3aa72e146106925780636d21117e146106b957600080fd5b806358baaa3e14610639578063595c6a671461064c5780635ac86ab71461065457600080fd5b80633ccc861d116102875780633ccc861d146105e95780633efe1db6146105fc5780634d18cc351461060f5780634d7a80d41461062657600080fd5b806339b70e38146105985780633a8c0786146105bf5780633c8fcf7c146105d657600080fd5b8063136439dd1161031a5780632c9c60cf116102f45780632c9c60cf146105245780633486e32e1461053757806336af41fa1461055e57806337838ed01461057157600080fd5b8063136439dd146104af578063149bc872146104c25780632b9f64a4146104e357600080fd5b80630e9a53cf116103565780630e9a53cf146104185780630eb383451461046057806310d67a2f14610475578063131433b41461048857600080fd5b806218572c1461037c57806304a0c502146103b4578063092db007146103f0575b600080fd5b61039f61038a366004613f70565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103ab565b60cb5461040590600160e01b900461ffff1681565b60405161ffff90911681526020016103ab565b610420610984565b604080518251815260208084015163ffffffff908116918301919091528383015116918101919091526060918201511515918101919091526080016103ab565b61047361046e366004613f9b565b610a63565b005b610473610483366004613f70565b610ae5565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736104bd366004613fd4565b610ba1565b6104d56104d0366004614005565b610ce0565b6040519081526020016103ab565b61050c6104f1366004613f70565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103ab565b61047361053236600461406d565b610d56565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61047361056c36600461406d565b61109e565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b60cb546103db90600160a01b900463ffffffff1681565b6103db6105e43660046140d5565b611336565b6104736105f736600461412c565b6115c4565b61047361060a366004614187565b611986565b60cb546103db90600160c01b900463ffffffff1681565b6104056106343660046141b3565b611c57565b6104736106473660046141f0565b611e06565b610473611e17565b61039f61066236600461420b565b606654600160ff9092169190911b9081161490565b6066546104d5565b61039f61068d36600461422e565b611ede565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b61039f6106c7366004614263565b60cf60209081526000928352604080842090915290825290205460ff1681565b610473611f6b565b6107026106fd36600461428f565b611f7f565b6040805161ffff909316835263ffffffff9091166020830152016103ab565b60ca546104d5565b610473610737366004613f70565b611fe7565b6104d561074a3660046142ef565b60cd60209081526000928352604080842090915290825290205481565b60655461050c906001600160a01b031681565b6033546001600160a01b031661050c565b61050c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610420611ff8565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736107e3366004613f70565b612096565b6104d56107f6366004613f70565b60ce6020526000908152604090205481565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104d561083d3660046141b3565b6120f5565b61039f610850366004614263565b60d060209081526000928352604080842090915290825290205460ff1681565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736108a536600461431d565b6121a8565b6104206108b8366004613fd4565b6122f0565b6104736108cb366004614390565b612382565b6103db6108de366004613fd4565b612393565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b610473610918366004613f70565b61246e565b6104d56124e4565b6104d5610933366004614005565b612522565b6104736109463660046141f0565b612533565b610473610959366004613fd4565b612769565b60cb5461050c906001600160a01b031681565b61047361097f36600461406d565b6128c5565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b8015610a5f57600060ca6109c16001846143c1565b815481106109d1576109d16143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610a415750806040015163ffffffff164210155b15610a4c5792915050565b5080610a57816143ee565b9150506109ac565b5090565b610a6b612a42565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5c9190614405565b6001600160a01b0316336001600160a01b031614610b955760405162461bcd60e51b8152600401610b8c90614422565b60405180910390fd5b610b9e81612a9c565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d919061446c565b610c295760405162461bcd60e51b8152600401610b8c90614489565b60665481811614610ca25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610cf06020840184613f70565b8360200135604051602001610d399392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460049060109081161415610d7f5760405162461bcd60e51b8152600401610b8c906144d1565b60026097541415610da25760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110610dc557610dc56143d8565b9050602002810190610dd7919061453f565b33600081815260ce60209081526040808320549051949550939192610e0292909185918791016146fc565b6040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166384d76f7b33856020016020810190610e5d91906141f0565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff166024820152604401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed0919061446c565b610f4c5760405162461bcd60e51b815260206004820152604160248201527f52657761726473436f6f7264696e61746f722e7265776172644f70657261746f60448201527f72536574466f7252616e67653a20696e76616c6964206f70657261746f7253656064820152601d60fa1b608482015260a401610b8c565b610fd8610f5c604085018561472c565b610f6c6080870160608801613f70565b6080870135610f8160c0890160a08a016141f0565b610f9160e08a0160c08b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260cf602090815260408083208484529091529020805460ff1916600190811790915561100b908390614776565b33600081815260ce602052604090819020929092559051829184917f29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b29061105390889061478e565b60405180910390a46110853330608086018035906110749060608901613f70565b6001600160a01b03169291906132ab565b836001019350505050610daa565b505060016097555050565b606654600190600290811614156110c75760405162461bcd60e51b8152600401610b8c906144d1565b33600090815260d1602052604090205460ff166111665760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a401610b8c565b600260975414156111895760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b8281101561109357368484838181106111ac576111ac6143d8565b90506020028101906111be91906147a1565b33600081815260ce602090815260408083205490519495509391926111e99290918591879101614836565b60408051601f198184030181529190528051602090910120905061128c611210848061472c565b6112206040870160208801613f70565b60408701356112356080890160608a016141f0565b61124560a08a0160808b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260d0602090815260408083208484529091529020805460ff191660019081179091556112bf908390614776565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf2704829061130790889061485d565b60405180910390a46113283330604086018035906110749060208901613f70565b836001019350505050611191565b600061271061ffff831611156113c25760405162461bcd60e51b815260206004820152604560248201527f52657761726473436f6f7264696e61746f722e7365744f70657261746f72436f60448201527f6d6d697373696f6e426970733a20636f6d6d697373696f6e4269707320746f6f606482015264040d0d2ced60db1b608482015260a401610b8c565b6113cf62093a8042614776565b33600090815260d360209081526040822092935090919082906113f490880188613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600086602001602081019061142991906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008560008111156114575761145761455f565b80156114655761146561455f565b8152602081019190915260400160002080549091508015806114c0575063ffffffff8316826114956001846143c1565b815481106114a5576114a56143d8565b60009182526020909120015462010000900463ffffffff1614155b15611523576040805180820190915261ffff808616825263ffffffff808616602080850191825286546001810188556000888152919091209451940180549151909216620100000265ffffffffffff199091169390921692909217179055611560565b83826115306001846143c1565b81548110611540576115406143d8565b6000918252602090912001805461ffff191661ffff929092169190911790555b8560405161156e9190614870565b6040518091039020336001600160a01b03167f811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba8787876040516115b3939291906148a8565b60405180910390a350509392505050565b606654600290600490811614156115ed5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156116105760405162461bcd60e51b8152600401610b8c90614508565b6002609755600060ca61162660208601866141f0565b63ffffffff168154811061163c5761163c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152905061169d848261331c565b60006116af6080860160608701613f70565b6001600160a01b03808216600090815260cc602052604090205491925016806116d55750805b336001600160a01b038216146117535760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d6572000000006064820152608401610b8c565b60005b61176360a08801886148d4565b9050811015611978573661177a60e089018961472c565b8381811061178a5761178a6143d8565b6001600160a01b038716600090815260cd6020908152604080832093029490940194509290915082906117bf90850185613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050808260200135116118795760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a401610b8c565b60006118898260208501356143c1565b6001600160a01b038716600090815260cd602090815260408220929350850180359291906118b79087613f70565b6001600160a01b03168152602080820192909252604001600020919091556118f9908a9083906118e990870187613f70565b6001600160a01b031691906135ed565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061193d6020890189613f70565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050806119719061491e565b9050611756565b505060016097555050505050565b606654600390600890811614156119af5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146119d95760405162461bcd60e51b8152600401610b8c90614939565b60cb5463ffffffff600160c01b909104811690831611611a755760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a401610b8c565b428263ffffffff1610611b0e5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a401610b8c565b60ca5460cb54600090611b2e90600160a01b900463ffffffff164261498d565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60cb546001600160a01b038416600090815260d36020908152604082209192600160e01b900461ffff169183918290611c9290880188613f70565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866020016020810190611cc791906141f0565b63ffffffff1663ffffffff1681526020019081526020016000206000856000811115611cf557611cf561455f565b8015611d0357611d0361455f565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611d77576000848152602090819020604080518082019091529084015461ffff8116825262010000900463ffffffff1681830152825260019092019101611d31565b5050825192935050505b8015611df95763ffffffff421682611d9a6001846143c1565b81518110611daa57611daa6143d8565b60200260200101516020015163ffffffff1611611df05781611dcd6001836143c1565b81518110611ddd57611ddd6143d8565b6020026020010151600001519250611df9565b60001901611d81565b50909150505b9392505050565b611e0e612a42565b610b9e8161361d565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e83919061446c565b611e9f5760405162461bcd60e51b8152600401610b8c90614489565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000611f638260ca611ef360208301836141f0565b63ffffffff1681548110611f0957611f096143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015261331c565b506001919050565b611f73612a42565b611f7d600061368e565b565b60d36020528460005260406000206020528360005260406000206020528260005260406000206020528160005260406000208181548110611fbf57600080fd5b60009182526020909120015461ffff8116955062010000900463ffffffff1693508592505050565b611fef612a42565b610b9e816136e0565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461202c906001906143c1565b8154811061203c5761203c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b6001600160a01b038316600090815260d360209081526040822090829061211e90860186613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600084602001602081019061215391906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008360008111156121815761218161455f565b801561218f5761218f61455f565b8152602081019190915260400160002054949350505050565b600054610100900460ff16158080156121c85750600054600160ff909116105b806121e25750303b1580156121e2575060005460ff166001145b6122455760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b8c565b6000805460ff191660011790558015612268576000805461ff0019166101001790555b61227061373c565b60c95561227d86866137d3565b6122868761368e565b61228f846136e0565b6122988361361d565b6122a1826138bd565b80156122e7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca8281548110612327576123276143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b61238a612a42565b610b9e816138bd565b60ca546000905b63ffffffff8116156123ff578260ca6123b46001846149b5565b63ffffffff16815481106123ca576123ca6143d8565b90600052602060002090600202016000015414156123ed57611dff6001826149b5565b806123f7816149da565b91505061239a565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e640000000000000000006064820152608401610b8c565b612476612a42565b6001600160a01b0381166124db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8c565b610b9e8161368e565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612515575060c95490565b61251d61373c565b905090565b60006001610cf06020840184613f70565b6066546003906008908116141561255c5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146125865760405162461bcd60e51b8152600401610b8c90614939565b60ca5463ffffffff8316106125f75760405162461bcd60e51b815260206004820152603160248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152700d2dcecc2d8d2c840e4dedee892dcc8caf607b1b6064820152608401610b8c565b600060ca8363ffffffff1681548110612612576126126143d8565b906000526020600020906002020190508060010160089054906101000a900460ff161561269f5760405162461bcd60e51b815260206004820152603560248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152741c9bdbdd08185b1c9958591e48191a5cd8589b1959605a1b6064820152608401610b8c565b6001810154600160201b900463ffffffff16421061271e5760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152751c9bdbdd08185b1c9958591e481858dd1a5d985d195960521b6064820152608401610b8c565b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190614405565b6001600160a01b0316336001600160a01b0316146128105760405162461bcd60e51b8152600401610b8c90614422565b60665419811960665419161461288e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610cd5565b606654600090600190811614156128ee5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156129115760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110612934576129346143d8565b905060200281019061294691906147a1565b33600081815260ce602090815260408083205490519495509391926129719290918591879101614836565b60408051601f1981840301815291905280516020909101209050612998611210848061472c565b33600090815260cf602090815260408083208484529091529020805460ff191660019081179091556129cb908390614776565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190612a1390889061485d565b60405180910390a4612a343330604086018035906110749060208901613f70565b836001019350505050612919565b6033546001600160a01b03163314611f7d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b8c565b6001600160a01b038116612b2a5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b8c565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b86612bf6576040805162461bcd60e51b8152602060048201526024810191909152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206e6f2073747261746567696573207365746064820152608401610b8c565b60008511612c645760405162461bcd60e51b81526020600482015260416024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a401610b8c565b6f4b3b4ca85a86c47a098a223fffffffff851115612cd85760405162461bcd60e51b815260206004820152603f6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c61726765006064820152608401610b8c565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168363ffffffff161115612d855760405162461bcd60e51b81526020600482015260546024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a401610b8c565b612daf7f000000000000000000000000000000000000000000000000000000000000000084614a10565b63ffffffff1615612e4f5760405162461bcd60e51b815260206004820152606a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c401610b8c565b612e797f000000000000000000000000000000000000000000000000000000000000000085614a10565b63ffffffff1615612f1f5760405162461bcd60e51b81526020600482015260706024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c401610b8c565b8363ffffffff168263ffffffff1642612f3891906143c1565b11158015612f5257508363ffffffff168163ffffffff1611155b612fcc5760405162461bcd60e51b81526020600482015260516024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a401610b8c565b612ffc63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001642614776565b8463ffffffff1611156130815760405162461bcd60e51b81526020600482015260536024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a401610b8c565b6000805b8881101561329f5760008a8a838181106130a1576130a16143d8565b6130b79260206040909202019081019150613f70565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015613122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613146919061446c565b8061316d57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b6131e05760405162461bcd60e51b815260206004820152604a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a401610b8c565b806001600160a01b0316836001600160a01b03161061328d5760405162461bcd60e51b81526020600482015260696024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c401610b8c565b91506132988161491e565b9050613085565b50505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526133169085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613928565b50505050565b8060600151156133755760405162461bcd60e51b81526020600482015260306024820152600080516020614b1483398151915260448201526f1c9bdbdd081a5cc8191a5cd8589b195960821b6064820152608401610b8c565b806040015163ffffffff164210156133dc5760405162461bcd60e51b81526020600482015260366024820152600080516020614b148339815191526044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b6064820152608401610b8c565b6133e960c08301836148d4565b90506133f860a08401846148d4565b9050146134705760405162461bcd60e51b815260206004820152604c6024820152600080516020614b1483398151915260448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a401610b8c565b61347d60e083018361472c565b905061348c60c08401846148d4565b9050146135025760405162461bcd60e51b815260206004820152604a6024820152600080516020614b1483398151915260448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610b8c565b805161352e9061351860408501602086016141f0565b6135256040860186614a33565b866060016139fa565b60005b61353e60a08401846148d4565b90508110156135e8576135d8608084013561355c60a08601866148d4565b8481811061356c5761356c6143d8565b905060200201602081019061358191906141f0565b61358e60c08701876148d4565b8581811061359e5761359e6143d8565b90506020028101906135b09190614a33565b6135bd60e089018961472c565b878181106135cd576135cd6143d8565b905060400201613b6e565b6135e18161491e565b9050613531565b505050565b6040516001600160a01b0383166024820152604481018290526135e890849063a9059cbb60e01b906064016132df565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156137f457506001600160a01b03821615155b6138765760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26138b982612a9c565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061397d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613cbf9092919063ffffffff16565b8051909150156135e8578080602001905181019061399b919061446c565b6135e85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b8c565b613a05602083614a7a565b6001901b8463ffffffff1610613a8f5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a401610b8c565b6000613a9a82610ce0565b9050613ae584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a401610b8c565b505050505050565b613b79602083614a7a565b6001901b8463ffffffff1610613bf75760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e646578000000006064820152608401610b8c565b6000613c0282612522565b9050613c4d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f66006064820152608401610b8c565b6060613cce8484600085613cee565b949350505050565b600083613ce4868585613e1f565b1495945050505050565b606082471015613d4f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b8c565b6001600160a01b0385163b613da65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b8c565b600080866001600160a01b03168587604051613dc29190614aba565b60006040518083038185875af1925050503d8060008114613dff576040519150601f19603f3d011682016040523d82523d6000602084013e613e04565b606091505b5091509150613e14828286613f22565b979650505050505050565b600060208451613e2f9190614acc565b15613eb65760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610b8c565b8260205b85518111613f1957613ecd600285614acc565b613eee57816000528086015160205260406000209150600284049350613f07565b8086015160005281602052604060002091506002840493505b613f12602082614776565b9050613eba565b50949350505050565b60608315613f31575081611dff565b825115613f415782518084602001fd5b8160405162461bcd60e51b8152600401610b8c9190614ae0565b6001600160a01b0381168114610b9e57600080fd5b600060208284031215613f8257600080fd5b8135611dff81613f5b565b8015158114610b9e57600080fd5b60008060408385031215613fae57600080fd5b8235613fb981613f5b565b91506020830135613fc981613f8d565b809150509250929050565b600060208284031215613fe657600080fd5b5035919050565b600060408284031215613fff57600080fd5b50919050565b60006040828403121561401757600080fd5b611dff8383613fed565b60008083601f84011261403357600080fd5b50813567ffffffffffffffff81111561404b57600080fd5b6020830191508360208260051b850101111561406657600080fd5b9250929050565b6000806020838503121561408057600080fd5b823567ffffffffffffffff81111561409757600080fd5b6140a385828601614021565b90969095509350505050565b8035600181106140be57600080fd5b919050565b803561ffff811681146140be57600080fd5b6000806000608084860312156140ea57600080fd5b6140f48585613fed565b9250614102604085016140af565b9150614110606085016140c3565b90509250925092565b60006101008284031215613fff57600080fd5b6000806040838503121561413f57600080fd5b823567ffffffffffffffff81111561415657600080fd5b61416285828601614119565b9250506020830135613fc981613f5b565b803563ffffffff811681146140be57600080fd5b6000806040838503121561419a57600080fd5b823591506141aa60208401614173565b90509250929050565b6000806000608084860312156141c857600080fd5b83356141d381613f5b565b92506141e28560208601613fed565b9150614110606085016140af565b60006020828403121561420257600080fd5b611dff82614173565b60006020828403121561421d57600080fd5b813560ff81168114611dff57600080fd5b60006020828403121561424057600080fd5b813567ffffffffffffffff81111561425757600080fd5b613cce84828501614119565b6000806040838503121561427657600080fd5b823561428181613f5b565b946020939093013593505050565b600080600080600060a086880312156142a757600080fd5b85356142b281613f5b565b945060208601356142c281613f5b565b93506142d060408701614173565b92506142de606087016140af565b949793965091946080013592915050565b6000806040838503121561430257600080fd5b823561430d81613f5b565b91506020830135613fc981613f5b565b60008060008060008060c0878903121561433657600080fd5b863561434181613f5b565b9550602087013561435181613f5b565b945060408701359350606087013561436881613f5b565b925061437660808801614173565b915061438460a088016140c3565b90509295509295509295565b6000602082840312156143a257600080fd5b611dff826140c3565b634e487b7160e01b600052601160045260246000fd5b6000828210156143d3576143d36143ab565b500390565b634e487b7160e01b600052603260045260246000fd5b6000816143fd576143fd6143ab565b506000190190565b60006020828403121561441757600080fd5b8151611dff81613f5b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561447e57600080fd5b8151611dff81613f8d565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000823560de1983360301811261455557600080fd5b9190910192915050565b634e487b7160e01b600052602160045260246000fd5b6001811061459357634e487b7160e01b600052602160045260246000fd5b9052565b6000808335601e198436030181126145ae57600080fd5b830160208101925035905067ffffffffffffffff8111156145ce57600080fd5b8060061b360383131561406657600080fd5b818352600060208085019450826000805b8681101561464557823561460481613f5b565b6001600160a01b03168852828401356bffffffffffffffffffffffff811680821461462d578384fd5b898601525060409788019792909201916001016145f1565b50959695505050505050565b6146638261465e836140af565b614575565b600061467160208301614173565b63ffffffff808216602086015261468b6040850185614597565b925060e060408701526146a260e0870184836145e0565b92505060608401356146b381613f5b565b6001600160a01b0316606086015260808481013590860152806146d860a08601614173565b1660a0860152806146eb60c08601614173565b1660c0860152508091505092915050565b60018060a01b03841681528260208201526060604082015260006147236060830184614651565b95945050505050565b6000808335601e1984360301811261474357600080fd5b83018035915067ffffffffffffffff82111561475e57600080fd5b6020019150600681901b360382131561406657600080fd5b60008219821115614789576147896143ab565b500190565b602081526000611dff6020830184614651565b60008235609e1983360301811261455557600080fd5b60006147c38283614597565b60a085526147d560a0860182846145e0565b91505060208301356147e681613f5b565b6001600160a01b031660208501526040838101359085015261480a60608401614173565b63ffffffff80821660608701528061482460808701614173565b16608087015250508091505092915050565b60018060a01b038416815282602082015260606040820152600061472360608301846147b7565b602081526000611dff60208301846147b7565b6000823561487d81613f5b565b6001600160a01b0316825263ffffffff61489960208501614173565b16602083015250604001919050565b606081016148b68286614575565b61ffff8416602083015263ffffffff83166040830152949350505050565b6000808335601e198436030181126148eb57600080fd5b83018035915067ffffffffffffffff82111561490657600080fd5b6020019150600581901b360382131561406657600080fd5b6000600019821415614932576149326143ab565b5060010190565b60208082526034908201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6040820152733a103a3432903932bbb0b93239aab83230ba32b960611b606082015260800190565b600063ffffffff8083168185168083038211156149ac576149ac6143ab565b01949350505050565b600063ffffffff838116908316818110156149d2576149d26143ab565b039392505050565b600063ffffffff8216806149f0576149f06143ab565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680614a2757614a276149fa565b92169190910692915050565b6000808335601e19843603018112614a4a57600080fd5b83018035915067ffffffffffffffff821115614a6557600080fd5b60200191503681900382131561406657600080fd5b600082614a8957614a896149fa565b500490565b60005b83811015614aa9578181015183820152602001614a91565b838111156133165750506000910152565b60008251614555818460208701614a8e565b600082614adb57614adb6149fa565b500690565b6020815260008251806020840152614aff816040850160208701614a8e565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2052657761726473436f6f7264696e61746f722e5f76616c696461746552657761a26469706673582212209fbf169b47bf96bbb3405672cc24dbc2e1d0fa3a971f3ebcf4a73b67b9764b2664736f6c634300080c0033", } // RewardsCoordinatorABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/SlashingConstants/binding.go b/pkg/bindings/SlashingConstants/binding.go new file mode 100644 index 000000000..0a9cb4c71 --- /dev/null +++ b/pkg/bindings/SlashingConstants/binding.go @@ -0,0 +1,327 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package SlashingConstants + +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 +) + +// SlashingConstantsMetaData contains all meta data concerning the SlashingConstants contract. +var SlashingConstantsMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"DEALLOCATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"INITIAL_TOTAL_MAGNITUDE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PRECISION_FACTOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PRECISION_FACTOR_SQUARED\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"}]", + Bin: "0x61010561003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060515760003560e01c806321afdf8e1460565780632981eb7714607e5780639a543ca414609b578063ccd34cd51460c1575b600080fd5b606b6ec097ce7bc90715b34b9f100000000081565b6040519081526020015b60405180910390f35b60876217124081565b60405163ffffffff90911681526020016075565b60a9670de0b6b3a764000081565b60405167ffffffffffffffff90911681526020016075565b606b670de0b6b3a76400008156fea264697066735822122051573b877db53ce7fd9202510ed740ac5b29774096c961210de6c69c249f537264736f6c634300080c0033", +} + +// SlashingConstantsABI is the input ABI used to generate the binding from. +// Deprecated: Use SlashingConstantsMetaData.ABI instead. +var SlashingConstantsABI = SlashingConstantsMetaData.ABI + +// SlashingConstantsBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SlashingConstantsMetaData.Bin instead. +var SlashingConstantsBin = SlashingConstantsMetaData.Bin + +// DeploySlashingConstants deploys a new Ethereum contract, binding an instance of SlashingConstants to it. +func DeploySlashingConstants(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SlashingConstants, error) { + parsed, err := SlashingConstantsMetaData.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(SlashingConstantsBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SlashingConstants{SlashingConstantsCaller: SlashingConstantsCaller{contract: contract}, SlashingConstantsTransactor: SlashingConstantsTransactor{contract: contract}, SlashingConstantsFilterer: SlashingConstantsFilterer{contract: contract}}, nil +} + +// SlashingConstants is an auto generated Go binding around an Ethereum contract. +type SlashingConstants struct { + SlashingConstantsCaller // Read-only binding to the contract + SlashingConstantsTransactor // Write-only binding to the contract + SlashingConstantsFilterer // Log filterer for contract events +} + +// SlashingConstantsCaller is an auto generated read-only Go binding around an Ethereum contract. +type SlashingConstantsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SlashingConstantsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SlashingConstantsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SlashingConstantsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SlashingConstantsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SlashingConstantsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SlashingConstantsSession struct { + Contract *SlashingConstants // 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 +} + +// SlashingConstantsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SlashingConstantsCallerSession struct { + Contract *SlashingConstantsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SlashingConstantsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SlashingConstantsTransactorSession struct { + Contract *SlashingConstantsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SlashingConstantsRaw is an auto generated low-level Go binding around an Ethereum contract. +type SlashingConstantsRaw struct { + Contract *SlashingConstants // Generic contract binding to access the raw methods on +} + +// SlashingConstantsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SlashingConstantsCallerRaw struct { + Contract *SlashingConstantsCaller // Generic read-only contract binding to access the raw methods on +} + +// SlashingConstantsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SlashingConstantsTransactorRaw struct { + Contract *SlashingConstantsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSlashingConstants creates a new instance of SlashingConstants, bound to a specific deployed contract. +func NewSlashingConstants(address common.Address, backend bind.ContractBackend) (*SlashingConstants, error) { + contract, err := bindSlashingConstants(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SlashingConstants{SlashingConstantsCaller: SlashingConstantsCaller{contract: contract}, SlashingConstantsTransactor: SlashingConstantsTransactor{contract: contract}, SlashingConstantsFilterer: SlashingConstantsFilterer{contract: contract}}, nil +} + +// NewSlashingConstantsCaller creates a new read-only instance of SlashingConstants, bound to a specific deployed contract. +func NewSlashingConstantsCaller(address common.Address, caller bind.ContractCaller) (*SlashingConstantsCaller, error) { + contract, err := bindSlashingConstants(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SlashingConstantsCaller{contract: contract}, nil +} + +// NewSlashingConstantsTransactor creates a new write-only instance of SlashingConstants, bound to a specific deployed contract. +func NewSlashingConstantsTransactor(address common.Address, transactor bind.ContractTransactor) (*SlashingConstantsTransactor, error) { + contract, err := bindSlashingConstants(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SlashingConstantsTransactor{contract: contract}, nil +} + +// NewSlashingConstantsFilterer creates a new log filterer instance of SlashingConstants, bound to a specific deployed contract. +func NewSlashingConstantsFilterer(address common.Address, filterer bind.ContractFilterer) (*SlashingConstantsFilterer, error) { + contract, err := bindSlashingConstants(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SlashingConstantsFilterer{contract: contract}, nil +} + +// bindSlashingConstants binds a generic wrapper to an already deployed contract. +func bindSlashingConstants(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := SlashingConstantsMetaData.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 (_SlashingConstants *SlashingConstantsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SlashingConstants.Contract.SlashingConstantsCaller.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 (_SlashingConstants *SlashingConstantsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SlashingConstants.Contract.SlashingConstantsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SlashingConstants *SlashingConstantsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SlashingConstants.Contract.SlashingConstantsTransactor.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 (_SlashingConstants *SlashingConstantsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SlashingConstants.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 (_SlashingConstants *SlashingConstantsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SlashingConstants.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SlashingConstants *SlashingConstantsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SlashingConstants.Contract.contract.Transact(opts, method, params...) +} + +// DEALLOCATIONDELAY is a free data retrieval call binding the contract method 0x2981eb77. +// +// Solidity: function DEALLOCATION_DELAY() view returns(uint32) +func (_SlashingConstants *SlashingConstantsCaller) DEALLOCATIONDELAY(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _SlashingConstants.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 (_SlashingConstants *SlashingConstantsSession) DEALLOCATIONDELAY() (uint32, error) { + return _SlashingConstants.Contract.DEALLOCATIONDELAY(&_SlashingConstants.CallOpts) +} + +// DEALLOCATIONDELAY is a free data retrieval call binding the contract method 0x2981eb77. +// +// Solidity: function DEALLOCATION_DELAY() view returns(uint32) +func (_SlashingConstants *SlashingConstantsCallerSession) DEALLOCATIONDELAY() (uint32, error) { + return _SlashingConstants.Contract.DEALLOCATIONDELAY(&_SlashingConstants.CallOpts) +} + +// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. +// +// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) +func (_SlashingConstants *SlashingConstantsCaller) INITIALTOTALMAGNITUDE(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _SlashingConstants.contract.Call(opts, &out, "INITIAL_TOTAL_MAGNITUDE") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. +// +// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) +func (_SlashingConstants *SlashingConstantsSession) INITIALTOTALMAGNITUDE() (uint64, error) { + return _SlashingConstants.Contract.INITIALTOTALMAGNITUDE(&_SlashingConstants.CallOpts) +} + +// INITIALTOTALMAGNITUDE is a free data retrieval call binding the contract method 0x9a543ca4. +// +// Solidity: function INITIAL_TOTAL_MAGNITUDE() view returns(uint64) +func (_SlashingConstants *SlashingConstantsCallerSession) INITIALTOTALMAGNITUDE() (uint64, error) { + return _SlashingConstants.Contract.INITIALTOTALMAGNITUDE(&_SlashingConstants.CallOpts) +} + +// PRECISIONFACTOR is a free data retrieval call binding the contract method 0xccd34cd5. +// +// Solidity: function PRECISION_FACTOR() view returns(uint256) +func (_SlashingConstants *SlashingConstantsCaller) PRECISIONFACTOR(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SlashingConstants.contract.Call(opts, &out, "PRECISION_FACTOR") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// PRECISIONFACTOR is a free data retrieval call binding the contract method 0xccd34cd5. +// +// Solidity: function PRECISION_FACTOR() view returns(uint256) +func (_SlashingConstants *SlashingConstantsSession) PRECISIONFACTOR() (*big.Int, error) { + return _SlashingConstants.Contract.PRECISIONFACTOR(&_SlashingConstants.CallOpts) +} + +// PRECISIONFACTOR is a free data retrieval call binding the contract method 0xccd34cd5. +// +// Solidity: function PRECISION_FACTOR() view returns(uint256) +func (_SlashingConstants *SlashingConstantsCallerSession) PRECISIONFACTOR() (*big.Int, error) { + return _SlashingConstants.Contract.PRECISIONFACTOR(&_SlashingConstants.CallOpts) +} + +// PRECISIONFACTORSQUARED is a free data retrieval call binding the contract method 0x21afdf8e. +// +// Solidity: function PRECISION_FACTOR_SQUARED() view returns(uint256) +func (_SlashingConstants *SlashingConstantsCaller) PRECISIONFACTORSQUARED(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SlashingConstants.contract.Call(opts, &out, "PRECISION_FACTOR_SQUARED") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// PRECISIONFACTORSQUARED is a free data retrieval call binding the contract method 0x21afdf8e. +// +// Solidity: function PRECISION_FACTOR_SQUARED() view returns(uint256) +func (_SlashingConstants *SlashingConstantsSession) PRECISIONFACTORSQUARED() (*big.Int, error) { + return _SlashingConstants.Contract.PRECISIONFACTORSQUARED(&_SlashingConstants.CallOpts) +} + +// PRECISIONFACTORSQUARED is a free data retrieval call binding the contract method 0x21afdf8e. +// +// Solidity: function PRECISION_FACTOR_SQUARED() view returns(uint256) +func (_SlashingConstants *SlashingConstantsCallerSession) PRECISIONFACTORSQUARED() (*big.Int, error) { + return _SlashingConstants.Contract.PRECISIONFACTORSQUARED(&_SlashingConstants.CallOpts) +} diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index c4e88be43..a3667feef 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -19,7 +19,7 @@ contract AVSDirectory is { using EnumerableSet for EnumerableSet.Bytes32Set; using EnumerableSet for EnumerableSet.AddressSet; - using Checkpoints for Checkpoints.History; + using Snapshots for Snapshots.History; /// @dev Index for flag that pauses operator register/deregister to avs when set. uint8 internal constant PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS = 0; @@ -384,7 +384,7 @@ contract AVSDirectory is /// TODO: add wrapping library for rounding up for slashing accounting slashedMagnitude = uint64(uint256(bipsToSlash) * uint256(currentMagnitude) / BIPS_FACTOR); - _magnitudeUpdate[operator][strategies[i]][operatorSetKey].decrementAtAndFutureCheckpoints({ + _magnitudeUpdate[operator][strategies[i]][operatorSetKey].decrementAtAndFutureSnapshots({ key: uint32(block.timestamp), decrementValue: slashedMagnitude }); @@ -761,7 +761,7 @@ contract AVSDirectory is /// @dev gets the latest total magnitude or overwrites it if it is not set function _getLatestTotalMagnitude(address operator, IStrategy strategy) internal returns (uint64) { - (bool exists,, uint224 totalMagnitude) = _totalMagnitudeUpdate[operator][strategy].latestCheckpoint(); + (bool exists,, uint224 totalMagnitude) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); if (!exists) { totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; _totalMagnitudeUpdate[operator][strategy].push({key: uint32(block.timestamp), value: totalMagnitude}); @@ -1061,7 +1061,7 @@ contract AVSDirectory is ) external view returns (uint64[] memory) { uint64[] memory totalMagnitudes = new uint64[](strategies.length); for (uint256 i = 0; i < strategies.length;) { - (bool exists, , uint224 value) = _totalMagnitudeUpdate[operator][strategies[i]].latestCheckpoint(); + (bool exists, , uint224 value) = _totalMagnitudeUpdate[operator][strategies[i]].latestSnapshot(); if (!exists) { totalMagnitudes[i] = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; } else { @@ -1092,7 +1092,7 @@ contract AVSDirectory is (uint224 value, uint256 pos, ) = _totalMagnitudeUpdate[operator][strategies[i]].upperLookupRecentWithPos(timestamp); - // if there is no existing total magnitude checkpoint + // if there is no existing total magnitude snapshot if (value == 0 && pos == 0) { totalMagnitudes[i] = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; } else { @@ -1117,7 +1117,7 @@ contract AVSDirectory is IStrategy strategy ) external view returns (uint64) { uint64 totalMagnitude; - (bool exists, , uint224 value) = _totalMagnitudeUpdate[operator][strategy].latestCheckpoint(); + (bool exists, , uint224 value) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); if (!exists) { totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; } else { @@ -1145,7 +1145,7 @@ contract AVSDirectory is uint256 pos, ) = _totalMagnitudeUpdate[operator][strategy].upperLookupRecentWithPos(timestamp); - // if there is no existing total magnitude checkpoint + // if there is no existing total magnitude snapshot if (value == 0 && pos == 0) { totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; } else { diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index e77bfc56f..c189541e8 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/AVSDirectoryStorage.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "../interfaces/IAVSDirectory.sol"; -import {Checkpoints} from "../libraries/Checkpoints.sol"; +import {Snapshots} from "../libraries/Snapshots.sol"; abstract contract AVSDirectoryStorage is IAVSDirectory { using EnumerableSet for EnumerableSet.Bytes32Set; @@ -65,12 +65,12 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { /// @notice Mapping: operator => avs => operatorSetId => operator registration status mapping(address => mapping(address => mapping(uint32 => OperatorSetRegistrationStatus))) public operatorSetStatus; - /// @notice Mapping: operator => strategy => checkpointed totalMagnitude + /// @notice Mapping: operator => strategy => snapshotted totalMagnitude /// Note that totalMagnitude is monotonically decreasing and only gets updated upon slashing - mapping(address => mapping(IStrategy => Checkpoints.History)) internal _totalMagnitudeUpdate; + mapping(address => mapping(IStrategy => Snapshots.History)) internal _totalMagnitudeUpdate; - /// @notice Mapping: operator => strategy => operatorSet (encoded) => checkpointed magnitude - mapping(address => mapping(IStrategy => mapping(bytes32 => Checkpoints.History))) internal _magnitudeUpdate; + /// @notice Mapping: operator => strategy => operatorSet (encoded) => snapshotted magnitude + mapping(address => mapping(IStrategy => mapping(bytes32 => Snapshots.History))) internal _magnitudeUpdate; /// @notice Mapping: operator => strategy => OperatorMagnitudeInfo to keep track of info regarding pending magnitude allocations. mapping(address => mapping(IStrategy => OperatorMagnitudeInfo)) public operatorMagnitudeInfo; diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 9e45bd650..2b6149281 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -308,10 +308,8 @@ contract DelegationManager is ); require(queuedWithdrawalParams[i].withdrawer == msg.sender, WithdrawerNotStaker()); - uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes( - operator, - queuedWithdrawalParams[i].strategies - ); + uint64[] memory totalMagnitudes = + avsDirectory.getTotalMagnitudes(operator, queuedWithdrawalParams[i].strategies); // Remove shares from staker's strategies and place strategies/shares in queue. // If the staker is delegated to an operator, the operator's delegated shares are also reduced @@ -371,7 +369,7 @@ contract DelegationManager is * The staker's scaling factor is updated here. * @param staker The address to increase the delegated shares for their operator. * @param strategy The strategy in which to increase the delegated shares. - * @param existingShares The number of shares the staker already has in the strategy. This is the shares amount stored in the + * @param existingShares The number of shares the staker already has in the strategy. This is the shares amount stored in the * StrategyManager/EigenPodManager for the staker's shares. * @param addedShares The number of shares to added to the staker's shares in the strategy. This amount will be scaled prior to adding * to the operator's scaled shares. @@ -522,10 +520,7 @@ contract DelegationManager is !_operatorAllocationDelay[msg.sender].isSet, "DelegationManager._initializeAllocationDelay: allocation delay already set" ); - _operatorAllocationDelay[msg.sender] = AllocationDelayDetails({ - isSet: true, - allocationDelay: delay - }); + _operatorAllocationDelay[msg.sender] = AllocationDelayDetails({isSet: true, allocationDelay: delay}); } /** @@ -618,7 +613,7 @@ contract DelegationManager is /** * @dev This function completes a queued withdrawal for a staker. * This will apply any slashing that has occurred since the scaledShares were initially set in the Withdrawal struct up - * until the totalMagnitude at completion time. + * until the totalMagnitude at completion time. * If receiveAsTokens is true, then these shares will be withdrawn as tokens. * If receiveAsTokens is false, then they will be redeposited according to the current operator the staker is delegated to, * and added back to the operator's scaledShares. @@ -656,18 +651,10 @@ contract DelegationManager is if (receiveAsTokens) { // complete the withdrawal by converting shares to tokens - _completeReceiveAsTokens( - withdrawal, - tokens, - totalMagnitudes - ); + _completeReceiveAsTokens(withdrawal, tokens, totalMagnitudes); } else { // Award shares back in StrategyManager/EigenPodManager. - _completeReceiveAsShares( - withdrawal, - tokens, - totalMagnitudes - ); + _completeReceiveAsShares(withdrawal, tokens, totalMagnitudes); } // Remove `withdrawalRoot` from pending roots @@ -696,7 +683,8 @@ contract DelegationManager is // Take already scaled staker shares and scale again according to current operator totalMagnitude // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares // are still susceptible to slashing - uint256 sharesToWithdraw = _calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); + uint256 sharesToWithdraw = + _calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); _withdrawSharesAsTokens({ staker: withdrawal.staker, @@ -750,10 +738,7 @@ contract DelegationManager is * Update shares amount depending upon the returned value. * The return value will be lower than the input value in the case where the staker has an existing share deficit */ - ( - shares, - existingShares - ) = eigenPodManager.addShares({podOwner: staker, shares: shares}); + (shares, existingShares) = eigenPodManager.addShares({podOwner: staker, shares: shares}); address podOwnerOperator = delegatedTo[staker]; // Similar to `isDelegated` logic if (podOwnerOperator != address(0)) { @@ -835,7 +820,7 @@ contract DelegationManager is uint256 shares, uint64 totalMagnitude ) internal { - // based on total magnitude, decrement operator's scaled shares + // based on total magnitude, decrement operator's scaled shares uint256 scaledShares = _scaleShares(shares, totalMagnitude); operatorScaledShares[operator][strategy] -= scaledShares; // TODO: What to do about event wrt scaling? @@ -863,7 +848,6 @@ contract DelegationManager is // Remove shares from staker and operator // Each of these operations fail if we attempt to remove more shares than exist for (uint256 i = 0; i < strategies.length;) { - // check sharesToWithdraw is valid // TODO maybe have a getter to get totalShares for all strategies, like getDelegatableShares // but for inputted strategies @@ -1026,9 +1010,7 @@ contract DelegationManager is // set the new withdrawal delay (in seconds) strategyWithdrawalDelays[strategy] = newStrategyWithdrawalDelay; - emit StrategyWithdrawalDelaySet( - strategy, prevStrategyWithdrawalDelay, newStrategyWithdrawalDelay - ); + emit StrategyWithdrawalDelaySet(strategy, prevStrategyWithdrawalDelay, newStrategyWithdrawalDelay); } } @@ -1048,10 +1030,11 @@ contract DelegationManager is uint64 totalMagnitude ) internal pure returns (uint256 sharesToDecrement, uint256 scaledStakerShares) { // TODO: DOUBLE CHECK THIS BEHAVIOR - // NOTE that to prevent numerator overflow, the max sharesToWithdraw is + // NOTE that to prevent numerator overflow, the max sharesToWithdraw is // x*1e36 <= 2^256-1 // => x <= 1.1579e41 - sharesToDecrement = (sharesToWithdraw * SlashingConstants.PRECISION_FACTOR_SQUARED) / (stakerScalingFactor * totalMagnitude); + sharesToDecrement = + (sharesToWithdraw * SlashingConstants.PRECISION_FACTOR_SQUARED) / (stakerScalingFactor * totalMagnitude); scaledStakerShares = sharesToWithdraw * stakerScalingFactor / SlashingConstants.PRECISION_FACTOR; return (sharesToDecrement, scaledStakerShares); } @@ -1111,7 +1094,7 @@ contract DelegationManager is if (existingShares == 0) { // existing shares are 0, meaning no existing delegated shares. In this case, the new staker scaling factor - // is re-initialized to + // is re-initialized to newStakerScalingFactor = SlashingConstants.PRECISION_FACTOR / (totalMagnitude); } else { uint256 currStakerScalingFactor = _getStakerScalingFactor(staker, strategy); @@ -1120,11 +1103,10 @@ contract DelegationManager is // staker scaling factor is initialized to PRECISION_FACTOR(1e18) and totalMagnitude is initialized to INITIAL_TOTAL_MAGNITUDE(1e18) // and is monotonically decreasing. You can deduce that the newStakerScalingFactor will never decrease to less than the PRECISION_FACTOR // so this won't round to 0. - newStakerScalingFactor = - (currStakerScalingFactor * existingShares * totalMagnitude / SlashingConstants.PRECISION_FACTOR + - addedShares * SlashingConstants.PRECISION_FACTOR) - / - ((existingShares + addedShares) * totalMagnitude); + newStakerScalingFactor = ( + currStakerScalingFactor * existingShares * totalMagnitude / SlashingConstants.PRECISION_FACTOR + + addedShares * SlashingConstants.PRECISION_FACTOR + ) / ((existingShares + addedShares) * totalMagnitude); } return newStakerScalingFactor; @@ -1139,7 +1121,7 @@ contract DelegationManager is IStrategy strategy, uint256 shares, uint64 currTotalMagnitude - ) internal view returns (uint256) { + ) internal view returns (uint256) { uint256 stakerScalingFactor = _getStakerScalingFactor(staker, strategy); return stakerScalingFactor * shares * currTotalMagnitude / SlashingConstants.PRECISION_FACTOR; } @@ -1257,7 +1239,7 @@ contract DelegationManager is /** * @notice Returns the number of actively-delegatable shares a staker has across all strategies. * NOTE: If you are delegated to an operator and have been slashed, these values won't be your real actual - * delegatable shares! + * delegatable shares! * @dev Returns two empty arrays in the case that the Staker has no actively-delegateable shares. */ function getDelegatableShares(address staker) public view returns (IStrategy[] memory, uint256[] memory) { @@ -1302,7 +1284,7 @@ contract DelegationManager is strategies[strategies.length - 1] = beaconChainETHStrategy; shares[strategies.length - 1] = uint256(podShares); } - + return (strategies, shares); } diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index 2dbc13ecf..0c8874d36 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -129,7 +129,12 @@ abstract contract DelegationManagerStorage is IDelegationManager { /// This determines how long it takes for allocations to take effect in the future. Can only be set one time for each operator mapping(address => AllocationDelayDetails) internal _operatorAllocationDelay; - constructor(IStrategyManager _strategyManager, ISlasher _slasher, IEigenPodManager _eigenPodManager, IAVSDirectory _avsDirectory) { + constructor( + IStrategyManager _strategyManager, + ISlasher _slasher, + IEigenPodManager _eigenPodManager, + IAVSDirectory _avsDirectory + ) { strategyManager = _strategyManager; eigenPodManager = _eigenPodManager; slasher = _slasher; diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index 6679cfcab..bb54eb172 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -290,7 +290,7 @@ contract StrategyManager is } // add the returned shares to their existing shares for this strategy - uint256 existingShares = stakerStrategyShares[staker][strategy]; + existingShares = stakerStrategyShares[staker][strategy]; stakerStrategyShares[staker][strategy] += shares; emit Deposit(staker, token, strategy, shares); @@ -333,24 +333,24 @@ contract StrategyManager is } /** - * @notice Decreases the shares that `staker` holds in `strategy` by `sharesAmount`. + * @notice Decreases the shares that `staker` holds in `strategy` by `shareAmount`. * @param staker The address to decrement shares from * @param strategy The strategy for which the `staker`'s shares are being decremented - * @param sharesAmount The amount of shares to decrement + * @param shareAmount The amount of shares to decrement * @dev If the amount of shares represents all of the staker`s shares in said strategy, * then the strategy is removed from stakerStrategyList[staker] and 'true' is returned. Otherwise 'false' is returned. */ - function _removeShares(address staker, IStrategy strategy, uint256 sharesAmount) internal returns (bool) { + function _removeShares(address staker, IStrategy strategy, uint256 shareAmount) internal returns (bool) { // sanity checks on inputs - require(sharesAmount != 0, "StrategyManager._removeShares: sharesAmount should not be zero!"); + require(shareAmount != 0, "StrategyManager._removeShares: shareAmount should not be zero!"); //check that the user has sufficient shares uint256 userShares = stakerStrategyShares[staker][strategy]; - require(sharesAmount <= userShares, "StrategyManager._removeShares: sharesAmount too high"); + require(shareAmount <= userShares, "StrategyManager._removeShares: shareAmount too high"); //unchecked arithmetic since we just checked this above unchecked { - userShares = userShares - sharesAmount; + userShares = userShares - shareAmount; } // subtract the shares from the staker's existing shares for this strategy diff --git a/src/contracts/libraries/Checkpoints.sol b/src/contracts/libraries/Snapshots.sol similarity index 53% rename from src/contracts/libraries/Checkpoints.sol rename to src/contracts/libraries/Snapshots.sol index 4c063b006..7fee975e8 100644 --- a/src/contracts/libraries/Checkpoints.sol +++ b/src/contracts/libraries/Snapshots.sol @@ -6,145 +6,145 @@ import "@openzeppelin-upgrades-v4.9.0/contracts/utils/math/MathUpgradeable.sol"; import "@openzeppelin-upgrades-v4.9.0/contracts/utils/math/SafeCastUpgradeable.sol"; /** - * @title Library for handling checkpoints as part of allocating and slashing. + * @title Library for handling snapshots as part of allocating and slashing. * @notice This library is using OpenZeppelin's CheckpointsUpgradeable library (v4.9.0) * and removes structs and functions that are unessential. * Interfaces and structs are renamed for clarity and usage (timestamps, etc). * Some additional functions have also been added for convenience. - * @dev This library defines the `History` struct, for checkpointing values as they change at different points in + * @dev This library defines the `History` struct, for snapshotting values as they change at different points in * time, and later looking up past values by block number. See {Votes} as an example. * - * To create a history of checkpoints define a variable type `Checkpoints.History` in your contract, and store a new - * checkpoint for the current transaction block using the {push} function. + * To create a history of snapshots define a variable type `Snapshots.History` in your contract, and store a new + * snapshot for the current transaction block using the {push} function. * * _Available since v4.5._ */ -library Checkpoints { +library Snapshots { struct History { - Checkpoint[] _checkpoints; + Snapshot[] _snapshots; } - struct Checkpoint { + struct Snapshot { uint32 _key; uint224 _value; } /** - * @dev Pushes a (`key`, `value`) pair into a History so that it is stored as the checkpoint. + * @dev Pushes a (`key`, `value`) pair into a History so that it is stored as the snapshot. * * Returns previous value and new value. */ function push(History storage self, uint32 key, uint224 value) internal returns (uint224, uint224) { - return _insert(self._checkpoints, key, value); + return _insert(self._snapshots, key, value); } /** - * @dev Returns the value in the first (oldest) checkpoint with key greater or equal than the search key, or zero if there is none. + * @dev Returns the value in the first (oldest) snapshot with key greater or equal than the search key, or zero if there is none. */ function lowerLookup(History storage self, uint32 key) internal view returns (uint224) { - uint256 len = self._checkpoints.length; - uint256 pos = _lowerBinaryLookup(self._checkpoints, key, 0, len); - return pos == len ? 0 : _unsafeAccess(self._checkpoints, pos)._value; + uint256 len = self._snapshots.length; + uint256 pos = _lowerBinaryLookup(self._snapshots, key, 0, len); + return pos == len ? 0 : _unsafeAccess(self._snapshots, pos)._value; } /** - * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero if there is none. + * @dev Returns the value in the last (most recent) snapshot with key lower or equal than the search key, or zero if there is none. */ function upperLookup(History storage self, uint32 key) internal view returns (uint224) { - uint256 len = self._checkpoints.length; - uint256 pos = _upperBinaryLookup(self._checkpoints, key, 0, len); - return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value; + uint256 len = self._snapshots.length; + uint256 pos = _upperBinaryLookup(self._snapshots, key, 0, len); + return pos == 0 ? 0 : _unsafeAccess(self._snapshots, pos - 1)._value; } /** - * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero if there is none. + * @dev Returns the value in the last (most recent) snapshot with key lower or equal than the search key, or zero if there is none. * - * NOTE: This is a variant of {upperLookup} that is optimised to find "recent" checkpoint (checkpoints with high keys). + * NOTE: This is a variant of {upperLookup} that is optimised to find "recent" snapshot (snapshots with high keys). */ function upperLookupRecent(History storage self, uint32 key) internal view returns (uint224) { - uint256 len = self._checkpoints.length; + uint256 len = self._snapshots.length; uint256 low = 0; uint256 high = len; if (len > 5) { uint256 mid = len - MathUpgradeable.sqrt(len); - if (key < _unsafeAccess(self._checkpoints, mid)._key) { + if (key < _unsafeAccess(self._snapshots, mid)._key) { high = mid; } else { low = mid + 1; } } - uint256 pos = _upperBinaryLookup(self._checkpoints, key, low, high); + uint256 pos = _upperBinaryLookup(self._snapshots, key, low, high); - return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value; + return pos == 0 ? 0 : _unsafeAccess(self._snapshots, pos - 1)._value; } /** - * @dev Returns the value in the most recent checkpoint, or zero if there are no checkpoints. + * @dev Returns the value in the most recent snapshot, or zero if there are no snapshots. */ function latest(History storage self) internal view returns (uint224) { - uint256 pos = self._checkpoints.length; - return pos == 0 ? 0 : _unsafeAccess(self._checkpoints, pos - 1)._value; + uint256 pos = self._snapshots.length; + return pos == 0 ? 0 : _unsafeAccess(self._snapshots, pos - 1)._value; } /** - * @dev Returns whether there is a checkpoint in the structure (i.e. it is not empty), and if so the key and value - * in the most recent checkpoint. + * @dev Returns whether there is a snapshot in the structure (i.e. it is not empty), and if so the key and value + * in the most recent snapshot. */ - function latestCheckpoint(History storage self) internal view returns (bool exists, uint32 _key, uint224 _value) { - uint256 pos = self._checkpoints.length; + function latestSnapshot(History storage self) internal view returns (bool exists, uint32 _key, uint224 _value) { + uint256 pos = self._snapshots.length; if (pos == 0) { return (false, 0, 0); } else { - Checkpoint memory ckpt = _unsafeAccess(self._checkpoints, pos - 1); + Snapshot memory ckpt = _unsafeAccess(self._snapshots, pos - 1); return (true, ckpt._key, ckpt._value); } } /** - * @dev Returns the number of checkpoint. + * @dev Returns the number of snapshot. */ function length(History storage self) internal view returns (uint256) { - return self._checkpoints.length; + return self._snapshots.length; } /** - * @dev Pushes a (`key`, `value`) pair into an ordered list of checkpoints, either by inserting a new checkpoint, + * @dev Pushes a (`key`, `value`) pair into an ordered list of snapshots, either by inserting a new snapshot, * or by updating the last one. */ - function _insert(Checkpoint[] storage self, uint32 key, uint224 value) private returns (uint224, uint224) { + function _insert(Snapshot[] storage self, uint32 key, uint224 value) private returns (uint224, uint224) { uint256 pos = self.length; if (pos > 0) { // Copying to memory is important here. - Checkpoint memory last = _unsafeAccess(self, pos - 1); + Snapshot memory last = _unsafeAccess(self, pos - 1); - // Checkpoint keys must be non-decreasing. - require(last._key <= key, "Checkpoint: decreasing keys"); + // Snapshot keys must be non-decreasing. + require(last._key <= key, "Snapshot: decreasing keys"); - // Update or push new checkpoint + // Update or push new snapshot if (last._key == key) { _unsafeAccess(self, pos - 1)._value = value; } else { - self.push(Checkpoint({_key: key, _value: value})); + self.push(Snapshot({_key: key, _value: value})); } return (last._value, value); } else { - self.push(Checkpoint({_key: key, _value: value})); + self.push(Snapshot({_key: key, _value: value})); return (0, value); } } /** - * @dev Return the index of the last (most recent) checkpoint with key lower or equal than the search key, or `high` if there is none. + * @dev Return the index of the last (most recent) snapshot with key lower or equal than the search key, or `high` if there is none. * `low` and `high` define a section where to do the search, with inclusive `low` and exclusive `high`. * * WARNING: `high` should not be greater than the array's length. */ function _upperBinaryLookup( - Checkpoint[] storage self, + Snapshot[] storage self, uint32 key, uint256 low, uint256 high @@ -161,13 +161,13 @@ library Checkpoints { } /** - * @dev Return the index of the first (oldest) checkpoint with key is greater or equal than the search key, or `high` if there is none. + * @dev Return the index of the first (oldest) snapshot with key is greater or equal than the search key, or `high` if there is none. * `low` and `high` define a section where to do the search, with inclusive `low` and exclusive `high`. * * WARNING: `high` should not be greater than the array's length. */ function _lowerBinaryLookup( - Checkpoint[] storage self, + Snapshot[] storage self, uint32 key, uint256 low, uint256 high @@ -187,9 +187,9 @@ library Checkpoints { * @dev Access an element of the array without performing bounds check. The position is assumed to be within bounds. */ function _unsafeAccess( - Checkpoint[] storage self, + Snapshot[] storage self, uint256 pos - ) private pure returns (Checkpoint storage result) { + ) private pure returns (Snapshot storage result) { assembly { mstore(0, self.slot) result.slot := add(keccak256(0, 0x20), pos) @@ -203,13 +203,13 @@ library Checkpoints { */ /** - * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero if there is none. + * @dev Returns the value in the last (most recent) snapshot with key lower or equal than the search key, or zero if there is none. * This function is a linear search for keys that are close to the end of the array. */ function upperLookupLinear(History storage self, uint32 key) internal view returns (uint224) { - uint256 len = self._checkpoints.length; + uint256 len = self._snapshots.length; for (uint256 i = len; i > 0; --i) { - Checkpoint storage current = _unsafeAccess(self._checkpoints, i - 1); + Snapshot storage current = _unsafeAccess(self._snapshots, i - 1); if (current._key <= key) { return current._value; } @@ -218,63 +218,63 @@ library Checkpoints { } /** - * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero if there is none. - * In addition, returns the position of the checkpoint in the array. + * @dev Returns the value in the last (most recent) snapshot with key lower or equal than the search key, or zero if there is none. + * In addition, returns the position of the snapshot in the array. * - * NOTE: That if value != 0 && pos == 0, then that means the value is the first checkpoint and actually exists - * a checkpoint DNE iff value == 0 && pos == 0 + * NOTE: That if value != 0 && pos == 0, then that means the value is the first snapshot and actually exists + * a snapshot DNE iff value == 0 && pos == 0 */ function upperLookupWithPos(History storage self, uint32 key) internal view returns (uint224, uint256) { - uint256 len = self._checkpoints.length; - uint256 pos = _upperBinaryLookup(self._checkpoints, key, 0, len); - return pos == 0 ? (0, 0) : (_unsafeAccess(self._checkpoints, pos - 1)._value, pos - 1); + uint256 len = self._snapshots.length; + uint256 pos = _upperBinaryLookup(self._snapshots, key, 0, len); + return pos == 0 ? (0, 0) : (_unsafeAccess(self._snapshots, pos - 1)._value, pos - 1); } /** - * @dev Returns the value in the last (most recent) checkpoint with key lower or equal than the search key, or zero if there is none. - * In addition, returns the position of the checkpoint in the array. + * @dev Returns the value in the last (most recent) snapshot with key lower or equal than the search key, or zero if there is none. + * In addition, returns the position of the snapshot in the array. * - * NOTE: This is a variant of {upperLookup} that is optimised to find "recent" checkpoint (checkpoints with high keys). - * NOTE: That if value != 0 && pos == 0, then that means the value is the first checkpoint and actually exists - * a checkpoint DNE iff value == 0 && pos == 0 => value == 0 + * NOTE: This is a variant of {upperLookup} that is optimised to find "recent" snapshot (snapshots with high keys). + * NOTE: That if value != 0 && pos == 0, then that means the value is the first snapshot and actually exists + * a snapshot DNE iff value == 0 && pos == 0 => value == 0 */ function upperLookupRecentWithPos(History storage self, uint32 key) internal view returns (uint224, uint256, uint256) { - uint256 len = self._checkpoints.length; + uint256 len = self._snapshots.length; uint256 low = 0; uint256 high = len; if (len > 5) { uint256 mid = len - MathUpgradeable.sqrt(len); - if (key < _unsafeAccess(self._checkpoints, mid)._key) { + if (key < _unsafeAccess(self._snapshots, mid)._key) { high = mid; } else { low = mid + 1; } } - uint256 pos = _upperBinaryLookup(self._checkpoints, key, low, high); + uint256 pos = _upperBinaryLookup(self._snapshots, key, low, high); - return pos == 0 ? (0, 0, len) : (_unsafeAccess(self._checkpoints, pos - 1)._value, pos - 1, len); + return pos == 0 ? (0, 0, len) : (_unsafeAccess(self._snapshots, pos - 1)._value, pos - 1, len); } /// @notice WARNING: this function is only used because of the invariant property - /// that from the current key, all future checkpointed magnitude values are strictly > current value. + /// that from the current key, all future snapshotted magnitude values are strictly > current value. /// Use function with extreme care for other situations. - function decrementAtAndFutureCheckpoints( + function decrementAtAndFutureSnapshots( History storage self, uint32 key, uint224 decrementValue ) internal { (uint224 value, uint256 pos, uint256 len) = upperLookupRecentWithPos(self, key); - // if there is no checkpoint, return + // if there is no snapshot, return if (value == 0 && pos == 0) { pos = type(uint256).max; } while (pos < len) { - Checkpoint storage current = _unsafeAccess(self._checkpoints, pos); + Snapshot storage current = _unsafeAccess(self._snapshots, pos); // reverts from underflow. Expected to never happen in our usage current._value -= decrementValue; diff --git a/src/contracts/pods/EigenPodManagerStorage.sol b/src/contracts/pods/EigenPodManagerStorage.sol index fd2ee8536..76b140846 100644 --- a/src/contracts/pods/EigenPodManagerStorage.sol +++ b/src/contracts/pods/EigenPodManagerStorage.sol @@ -69,9 +69,6 @@ abstract contract EigenPodManagerStorage is IEigenPodManager { // BEGIN STORAGE VARIABLES ADDED AFTER MAINNET DEPLOYMENT -- DO NOT SUGGEST REORDERING TO CONVENTIONAL ORDER /** * @notice Mapping from Pod owner owner to the number of shares they have in the virtual beacon chain ETH strategy. - * NOTE: This mapping was previously named `podOwnerShares` but will now store shares based on the currently delegated operator - * for the podOwner to account for Slashing in EigenLayer. There is a backwards compatible view function `podOwnerShares` that will convert - * shares to its actual ETH shares. * @dev The share amount can become negative. This is necessary to accommodate the fact that a pod owner's virtual beacon chain ETH shares can * decrease between the pod owner queuing and completing a withdrawal. * When the pod owner's shares would otherwise increase, this "deficit" is decreased first _instead_. From 7d1ce7296b382c20f4bac8cfa4ab23c6f3150b3d Mon Sep 17 00:00:00 2001 From: "clandestine.eth" <96172957+0xClandestine@users.noreply.github.com> Date: Mon, 9 Sep 2024 14:18:58 -0400 Subject: [PATCH 20/47] feat: split allocation logic to `AllocationManager` (#730) * feat: split to AllocationManager * chore: forge fmt src/contracts * fix: remove unused imports * fix: storage gap * fix: storage gap * fix: unused import --- .../devnet/M2_Deploy_From_Scratch.s.sol | 634 +++++++++++++++ .../holesky/M2_Deploy_From_Scratch.s.sol | 18 +- script/deploy/local/Deploy_From_Scratch.s.sol | 9 +- script/utils/ExistingDeploymentParser.sol | 10 + src/contracts/core/AVSDirectory.sol | 659 --------------- src/contracts/core/AVSDirectoryStorage.sol | 19 +- src/contracts/core/AllocationManager.sol | 754 ++++++++++++++++++ .../core/AllocationManagerStorage.sol | 63 ++ src/contracts/core/DelegationManager.sol | 52 +- .../core/DelegationManagerStorage.sol | 8 +- src/contracts/core/RewardsCoordinator.sol | 33 +- src/contracts/core/StrategyManager.sol | 5 +- src/contracts/interfaces/IAVSDirectory.sol | 275 +------ .../interfaces/IAllocationManager.sol | 268 +++++++ .../interfaces/IDelegationManager.sol | 18 +- .../interfaces/IRewardsCoordinator.sol | 24 +- src/contracts/interfaces/IStrategyManager.sol | 12 +- src/contracts/libraries/SlashingConstants.sol | 2 +- src/contracts/libraries/Snapshots.sol | 28 +- src/contracts/permissions/Pausable.sol | 7 +- src/contracts/permissions/PauserRegistry.sol | 2 +- src/contracts/pods/EigenPod.sol | 19 +- src/contracts/pods/EigenPodManager.sol | 2 +- src/contracts/strategies/StrategyBase.sol | 4 +- src/contracts/strategies/StrategyFactory.sol | 7 +- src/test/events/IAVSDirectoryEvents.sol | 6 +- src/test/events/IRewardsCoordinatorEvents.sol | 2 +- .../integration/IntegrationDeployer.t.sol | 6 +- src/test/mocks/AVSDirectoryMock.sol | 70 +- src/test/unit/AVSDirectoryUnit.t.sol | 115 ++- src/test/unit/RewardsCoordinatorUnit.t.sol | 10 +- 31 files changed, 1999 insertions(+), 1142 deletions(-) create mode 100644 script/deploy/devnet/M2_Deploy_From_Scratch.s.sol create mode 100644 src/contracts/core/AllocationManager.sol create mode 100644 src/contracts/core/AllocationManagerStorage.sol create mode 100644 src/contracts/interfaces/IAllocationManager.sol diff --git a/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol b/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol new file mode 100644 index 000000000..b0140e3cc --- /dev/null +++ b/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol @@ -0,0 +1,634 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; + +import "../../../src/contracts/interfaces/IETHPOSDeposit.sol"; + +import "../../../src/contracts/core/StrategyManager.sol"; +import "../../../src/contracts/core/Slasher.sol"; +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/strategies/StrategyBaseTVLLimits.sol"; + +import "../../../src/contracts/pods/EigenPod.sol"; +import "../../../src/contracts/pods/EigenPodManager.sol"; + +import "../../../src/contracts/permissions/PauserRegistry.sol"; + +import "../../../src/test/mocks/EmptyContract.sol"; +import "../../../src/test/mocks/ETHDepositMock.sol"; + +import "forge-std/Script.sol"; +import "forge-std/Test.sol"; + +// # To load the variables in the .env file +// source .env + +// # To deploy and verify our contract +// forge script script/deploy/devnet/M2_Deploy_From_Scratch.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast --sig "run(string memory configFile)" -- M2_deploy_from_scratch.anvil.config.json +contract Deployer_M2 is Script, Test { + Vm cheats = Vm(HEVM_ADDRESS); + + // struct used to encode token info in config file + struct StrategyConfig { + uint256 maxDeposits; + uint256 maxPerDeposit; + address tokenAddress; + string tokenSymbol; + } + + string public deployConfigPath; + + // EigenLayer Contracts + ProxyAdmin public eigenLayerProxyAdmin; + PauserRegistry public eigenLayerPauserReg; + Slasher public slasher; + Slasher public slasherImplementation; + DelegationManager public delegation; + DelegationManager public delegationImplementation; + StrategyManager public strategyManager; + StrategyManager public strategyManagerImplementation; + RewardsCoordinator public rewardsCoordinator; + RewardsCoordinator public rewardsCoordinatorImplementation; + AVSDirectory public avsDirectory; + AVSDirectory public avsDirectoryImplementation; + EigenPodManager public eigenPodManager; + EigenPodManager public eigenPodManagerImplementation; + UpgradeableBeacon public eigenPodBeacon; + EigenPod public eigenPodImplementation; + StrategyBase public baseStrategyImplementation; + AllocationManager public allocationManager; + AllocationManager public allocationManagerImplementation; + + EmptyContract public emptyContract; + + address executorMultisig; + address operationsMultisig; + address pauserMultisig; + + // the ETH2 deposit contract -- if not on mainnet, we deploy a mock as stand-in + IETHPOSDeposit public ethPOSDeposit; + + // strategies deployed + StrategyBaseTVLLimits[] public deployedStrategyArray; + + // IMMUTABLES TO SET + uint64 GOERLI_GENESIS_TIME = 1616508000; + + // OTHER DEPLOYMENT PARAMETERS + uint256 STRATEGY_MANAGER_INIT_PAUSED_STATUS; + uint256 SLASHER_INIT_PAUSED_STATUS; + uint256 DELEGATION_INIT_PAUSED_STATUS; + uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS; + uint256 REWARDS_COORDINATOR_INIT_PAUSED_STATUS; + + // RewardsCoordinator + uint32 REWARDS_COORDINATOR_MAX_REWARDS_DURATION; + uint32 REWARDS_COORDINATOR_MAX_RETROACTIVE_LENGTH; + uint32 REWARDS_COORDINATOR_MAX_FUTURE_LENGTH; + uint32 REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP; + address REWARDS_COORDINATOR_UPDATER; + uint32 REWARDS_COORDINATOR_ACTIVATION_DELAY; + uint32 REWARDS_COORDINATOR_CALCULATION_INTERVAL_SECONDS; + uint32 REWARDS_COORDINATOR_GLOBAL_OPERATOR_COMMISSION_BIPS; + uint32 REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP; + uint32 REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH; + + // one week in blocks -- 50400 + uint32 STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS; + uint256 DELEGATION_WITHDRAWAL_DELAY_BLOCKS; + + function run(string memory configFileName) external { + // read and log the chainID + uint256 chainId = block.chainid; + emit log_named_uint("You are deploying on ChainID", chainId); + + // READ JSON CONFIG DATA + deployConfigPath = string(bytes(string.concat("script/configs/devnet/", configFileName))); + string memory config_data = vm.readFile(deployConfigPath); + // bytes memory parsedData = vm.parseJson(config_data); + + STRATEGY_MANAGER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".strategyManager.init_paused_status"); + SLASHER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".slasher.init_paused_status"); + DELEGATION_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".delegation.init_paused_status"); + DELEGATION_WITHDRAWAL_DELAY_BLOCKS = stdJson.readUint(config_data, ".delegation.init_withdrawal_delay_blocks"); + EIGENPOD_MANAGER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".eigenPodManager.init_paused_status"); + REWARDS_COORDINATOR_INIT_PAUSED_STATUS = stdJson.readUint( + config_data, + ".rewardsCoordinator.init_paused_status" + ); + REWARDS_COORDINATOR_CALCULATION_INTERVAL_SECONDS = uint32( + stdJson.readUint(config_data, ".rewardsCoordinator.CALCULATION_INTERVAL_SECONDS") + ); + REWARDS_COORDINATOR_MAX_REWARDS_DURATION = uint32(stdJson.readUint(config_data, ".rewardsCoordinator.MAX_REWARDS_DURATION")); + REWARDS_COORDINATOR_MAX_RETROACTIVE_LENGTH = uint32(stdJson.readUint(config_data, ".rewardsCoordinator.MAX_RETROACTIVE_LENGTH")); + REWARDS_COORDINATOR_MAX_FUTURE_LENGTH = uint32(stdJson.readUint(config_data, ".rewardsCoordinator.MAX_FUTURE_LENGTH")); + REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP = uint32(stdJson.readUint(config_data, ".rewardsCoordinator.GENESIS_REWARDS_TIMESTAMP")); + REWARDS_COORDINATOR_UPDATER = stdJson.readAddress(config_data, ".rewardsCoordinator.rewards_updater_address"); + REWARDS_COORDINATOR_ACTIVATION_DELAY = uint32(stdJson.readUint(config_data, ".rewardsCoordinator.activation_delay")); + REWARDS_COORDINATOR_CALCULATION_INTERVAL_SECONDS = uint32( + stdJson.readUint(config_data, ".rewardsCoordinator.calculation_interval_seconds") + ); + REWARDS_COORDINATOR_GLOBAL_OPERATOR_COMMISSION_BIPS = uint32( + stdJson.readUint(config_data, ".rewardsCoordinator.global_operator_commission_bips") + ); + REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP = uint32( + stdJson.readUint(config_data, ".rewardsCoordinator.OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP") + ); + REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH = uint32( + stdJson.readUint(config_data, ".rewardsCoordinator.OPERATOR_SET_MAX_RETROACTIVE_LENGTH") + ); + + STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS = uint32( + stdJson.readUint(config_data, ".strategyManager.init_withdrawal_delay_blocks") + ); + + // tokens to deploy strategies for + StrategyConfig[] memory strategyConfigs; + + executorMultisig = stdJson.readAddress(config_data, ".multisig_addresses.executorMultisig"); + operationsMultisig = stdJson.readAddress(config_data, ".multisig_addresses.operationsMultisig"); + pauserMultisig = stdJson.readAddress(config_data, ".multisig_addresses.pauserMultisig"); + // load token list + bytes memory strategyConfigsRaw = stdJson.parseRaw(config_data, ".strategies"); + strategyConfigs = abi.decode(strategyConfigsRaw, (StrategyConfig[])); + + require(executorMultisig != address(0), "executorMultisig address not configured correctly!"); + require(operationsMultisig != address(0), "operationsMultisig address not configured correctly!"); + + // START RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.startBroadcast(); + + // deploy proxy admin for ability to upgrade proxy contracts + eigenLayerProxyAdmin = new ProxyAdmin(); + + //deploy pauser registry + { + address[] memory pausers = new address[](3); + pausers[0] = executorMultisig; + pausers[1] = operationsMultisig; + pausers[2] = pauserMultisig; + eigenLayerPauserReg = new PauserRegistry(pausers, executorMultisig); + } + + /** + * First, deploy upgradeable proxy contracts that **will point** to the implementations. Since the implementation contracts are + * not yet deployed, we give these proxies an empty contract as the initial implementation, to act as if they have no code. + */ + emptyContract = new EmptyContract(); + delegation = DelegationManager( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + strategyManager = StrategyManager( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + avsDirectory = AVSDirectory( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + slasher = Slasher( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + eigenPodManager = EigenPodManager( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + rewardsCoordinator = RewardsCoordinator( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + allocationManager = AllocationManager( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + + // 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, + GOERLI_GENESIS_TIME + ); + + eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); + + // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs + delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); + strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher, avsDirectory); + avsDirectoryImplementation = new AVSDirectory(delegation); + slasherImplementation = new Slasher(strategyManager, delegation); + eigenPodManagerImplementation = new EigenPodManager( + ethPOSDeposit, + eigenPodBeacon, + strategyManager, + slasher, + delegation + ); + rewardsCoordinatorImplementation = new RewardsCoordinator( + delegation, + strategyManager, + avsDirectory, + 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, + REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH + ); + + // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. + { + IStrategy[] memory _strategies; + uint256[] memory _withdrawalDelayBlocks; + eigenLayerProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(delegation))), + address(delegationImplementation), + abi.encodeWithSelector( + DelegationManager.initialize.selector, + executorMultisig, + eigenLayerPauserReg, + DELEGATION_INIT_PAUSED_STATUS, + DELEGATION_WITHDRAWAL_DELAY_BLOCKS, + _strategies, + _withdrawalDelayBlocks + ) + ); + } + eigenLayerProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(strategyManager))), + address(strategyManagerImplementation), + abi.encodeWithSelector( + StrategyManager.initialize.selector, + executorMultisig, + operationsMultisig, + eigenLayerPauserReg, + STRATEGY_MANAGER_INIT_PAUSED_STATUS + ) + ); + eigenLayerProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(slasher))), + address(slasherImplementation), + abi.encodeWithSelector( + Slasher.initialize.selector, + executorMultisig, + eigenLayerPauserReg, + SLASHER_INIT_PAUSED_STATUS + ) + ); + eigenLayerProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(avsDirectory))), + address(avsDirectoryImplementation), + abi.encodeWithSelector(AVSDirectory.initialize.selector, executorMultisig, eigenLayerPauserReg, 0) + ); + eigenLayerProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(eigenPodManager))), + address(eigenPodManagerImplementation), + abi.encodeWithSelector( + EigenPodManager.initialize.selector, + executorMultisig, + eigenLayerPauserReg, + EIGENPOD_MANAGER_INIT_PAUSED_STATUS + ) + ); + eigenLayerProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(rewardsCoordinator))), + address(rewardsCoordinatorImplementation), + abi.encodeWithSelector( + RewardsCoordinator.initialize.selector, + executorMultisig, + eigenLayerPauserReg, + REWARDS_COORDINATOR_INIT_PAUSED_STATUS, + REWARDS_COORDINATOR_UPDATER, + REWARDS_COORDINATOR_ACTIVATION_DELAY, + REWARDS_COORDINATOR_GLOBAL_OPERATOR_COMMISSION_BIPS + ) + ); + + // deploy StrategyBaseTVLLimits contract implementation + baseStrategyImplementation = new StrategyBaseTVLLimits(strategyManager); + // create upgradeable proxies that each point to the implementation and initialize them + for (uint256 i = 0; i < strategyConfigs.length; ++i) { + deployedStrategyArray.push( + StrategyBaseTVLLimits( + address( + new TransparentUpgradeableProxy( + address(baseStrategyImplementation), + address(eigenLayerProxyAdmin), + abi.encodeWithSelector( + StrategyBaseTVLLimits.initialize.selector, + strategyConfigs[i].maxPerDeposit, + strategyConfigs[i].maxDeposits, + IERC20(strategyConfigs[i].tokenAddress), + eigenLayerPauserReg + ) + ) + ) + ) + ); + } + + eigenLayerProxyAdmin.transferOwnership(executorMultisig); + eigenPodBeacon.transferOwnership(executorMultisig); + + // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.stopBroadcast(); + + // CHECK CORRECTNESS OF DEPLOYMENT + _verifyContractsPointAtOneAnother( + delegationImplementation, + strategyManagerImplementation, + slasherImplementation, + eigenPodManagerImplementation, + rewardsCoordinatorImplementation + ); + _verifyContractsPointAtOneAnother( + delegation, + strategyManager, + slasher, + eigenPodManager, + rewardsCoordinator + ); + _verifyImplementationsSetCorrectly(); + _verifyInitialOwners(); + _checkPauserInitializations(); + _verifyInitializationParams(); + + // WRITE JSON DATA + string memory parent_object = "parent object"; + + string memory deployed_strategies = "strategies"; + for (uint256 i = 0; i < strategyConfigs.length; ++i) { + vm.serializeAddress(deployed_strategies, strategyConfigs[i].tokenSymbol, address(deployedStrategyArray[i])); + } + string memory deployed_strategies_output = strategyConfigs.length == 0 + ? "" + : vm.serializeAddress( + deployed_strategies, + strategyConfigs[strategyConfigs.length - 1].tokenSymbol, + address(deployedStrategyArray[strategyConfigs.length - 1]) + ); + + string memory deployed_addresses = "addresses"; + vm.serializeAddress(deployed_addresses, "eigenLayerProxyAdmin", address(eigenLayerProxyAdmin)); + vm.serializeAddress(deployed_addresses, "eigenLayerPauserReg", address(eigenLayerPauserReg)); + vm.serializeAddress(deployed_addresses, "slasher", address(slasher)); + vm.serializeAddress(deployed_addresses, "slasherImplementation", address(slasherImplementation)); + vm.serializeAddress(deployed_addresses, "delegation", address(delegation)); + vm.serializeAddress(deployed_addresses, "delegationImplementation", address(delegationImplementation)); + vm.serializeAddress(deployed_addresses, "avsDirectory", address(avsDirectory)); + vm.serializeAddress(deployed_addresses, "avsDirectoryImplementation", address(avsDirectoryImplementation)); + vm.serializeAddress(deployed_addresses, "strategyManager", address(strategyManager)); + vm.serializeAddress( + deployed_addresses, + "strategyManagerImplementation", + address(strategyManagerImplementation) + ); + vm.serializeAddress(deployed_addresses, "eigenPodManager", address(eigenPodManager)); + vm.serializeAddress( + deployed_addresses, + "eigenPodManagerImplementation", + address(eigenPodManagerImplementation) + ); + vm.serializeAddress(deployed_addresses, "rewardsCoordinator", address(rewardsCoordinator)); + vm.serializeAddress( + deployed_addresses, + "rewardsCoordinatorImplementation", + address(rewardsCoordinatorImplementation) + ); + vm.serializeAddress(deployed_addresses, "eigenPodBeacon", address(eigenPodBeacon)); + vm.serializeAddress(deployed_addresses, "eigenPodImplementation", address(eigenPodImplementation)); + vm.serializeAddress(deployed_addresses, "baseStrategyImplementation", address(baseStrategyImplementation)); + vm.serializeAddress(deployed_addresses, "emptyContract", address(emptyContract)); + string memory deployed_addresses_output = vm.serializeString( + deployed_addresses, + "strategies", + deployed_strategies_output + ); + + string memory parameters = "parameters"; + vm.serializeAddress(parameters, "executorMultisig", executorMultisig); + string memory parameters_output = vm.serializeAddress(parameters, "operationsMultisig", operationsMultisig); + + string memory chain_info = "chainInfo"; + vm.serializeUint(chain_info, "deploymentBlock", block.number); + string memory chain_info_output = vm.serializeUint(chain_info, "chainId", chainId); + + // serialize all the data + vm.serializeString(parent_object, deployed_addresses, deployed_addresses_output); + vm.serializeString(parent_object, chain_info, chain_info_output); + string memory finalJson = vm.serializeString(parent_object, parameters, parameters_output); + // TODO: should output to different file depending on configFile passed to run() + // so that we don't override mainnet output by deploying to goerli for eg. + vm.writeJson(finalJson, "script/output/devnet/M2_from_scratch_deployment_data.json"); + } + + function _verifyContractsPointAtOneAnother( + DelegationManager delegationContract, + StrategyManager strategyManagerContract, + Slasher /*slasherContract*/, + EigenPodManager eigenPodManagerContract, + RewardsCoordinator rewardsCoordinatorContract + ) internal view { + require(delegationContract.slasher() == slasher, "delegation: slasher address not set correctly"); + require( + delegationContract.strategyManager() == strategyManager, + "delegation: strategyManager address not set correctly" + ); + + require(strategyManagerContract.slasher() == slasher, "strategyManager: slasher address not set correctly"); + require( + strategyManagerContract.delegation() == delegation, + "strategyManager: delegation address not set correctly" + ); + require( + strategyManagerContract.eigenPodManager() == eigenPodManager, + "strategyManager: eigenPodManager address not set correctly" + ); + + // removing slasher requirements because there is no slasher as part of m2-mainnet release + // require(slasherContract.strategyManager() == strategyManager, "slasher: strategyManager not set correctly"); + // require(slasherContract.delegation() == delegation, "slasher: delegation not set correctly"); + + require( + eigenPodManagerContract.ethPOS() == ethPOSDeposit, + " eigenPodManager: ethPOSDeposit contract address not set correctly" + ); + require( + eigenPodManagerContract.eigenPodBeacon() == eigenPodBeacon, + "eigenPodManager: eigenPodBeacon contract address not set correctly" + ); + require( + eigenPodManagerContract.strategyManager() == strategyManager, + "eigenPodManager: strategyManager contract address not set correctly" + ); + require( + eigenPodManagerContract.slasher() == slasher, + "eigenPodManager: slasher contract address not set correctly" + ); + + require( + rewardsCoordinatorContract.delegationManager() == delegation, + "rewardsCoordinator: delegation address not set correctly" + ); + + require( + rewardsCoordinatorContract.strategyManager() == strategyManager, + "rewardsCoordinator: strategyManager address not set correctly" + ); + } + + function _verifyImplementationsSetCorrectly() internal view { + require( + eigenLayerProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(delegation)))) == + address(delegationImplementation), + "delegation: implementation set incorrectly" + ); + require( + eigenLayerProxyAdmin.getProxyImplementation( + TransparentUpgradeableProxy(payable(address(strategyManager))) + ) == address(strategyManagerImplementation), + "strategyManager: implementation set incorrectly" + ); + require( + eigenLayerProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(slasher)))) == + address(slasherImplementation), + "slasher: implementation set incorrectly" + ); + require( + eigenLayerProxyAdmin.getProxyImplementation( + TransparentUpgradeableProxy(payable(address(eigenPodManager))) + ) == address(eigenPodManagerImplementation), + "eigenPodManager: implementation set incorrectly" + ); + require( + eigenLayerProxyAdmin.getProxyImplementation( + TransparentUpgradeableProxy(payable(address(rewardsCoordinator))) + ) == address(rewardsCoordinatorImplementation), + "rewardsCoordinator: implementation set incorrectly" + ); + + for (uint256 i = 0; i < deployedStrategyArray.length; ++i) { + require( + eigenLayerProxyAdmin.getProxyImplementation( + TransparentUpgradeableProxy(payable(address(deployedStrategyArray[i]))) + ) == address(baseStrategyImplementation), + "strategy: implementation set incorrectly" + ); + } + + require( + eigenPodBeacon.implementation() == address(eigenPodImplementation), + "eigenPodBeacon: implementation set incorrectly" + ); + } + + function _verifyInitialOwners() internal view { + require(strategyManager.owner() == executorMultisig, "strategyManager: owner not set correctly"); + require(delegation.owner() == executorMultisig, "delegation: owner not set correctly"); + // removing slasher requirements because there is no slasher as part of m2-mainnet release + // require(slasher.owner() == executorMultisig, "slasher: owner not set correctly"); + require(eigenPodManager.owner() == executorMultisig, "eigenPodManager: owner not set correctly"); + + require(eigenLayerProxyAdmin.owner() == executorMultisig, "eigenLayerProxyAdmin: owner not set correctly"); + require(eigenPodBeacon.owner() == executorMultisig, "eigenPodBeacon: owner not set correctly"); + } + + function _checkPauserInitializations() internal view { + require(delegation.pauserRegistry() == eigenLayerPauserReg, "delegation: pauser registry not set correctly"); + require( + strategyManager.pauserRegistry() == eigenLayerPauserReg, + "strategyManager: pauser registry not set correctly" + ); + // removing slasher requirements because there is no slasher as part of m2-mainnet release + // require(slasher.pauserRegistry() == eigenLayerPauserReg, "slasher: pauser registry not set correctly"); + require( + eigenPodManager.pauserRegistry() == eigenLayerPauserReg, + "eigenPodManager: pauser registry not set correctly" + ); + require( + rewardsCoordinator.pauserRegistry() == eigenLayerPauserReg, + "rewardsCoordinator: pauser registry not set correctly" + ); + + require(eigenLayerPauserReg.isPauser(operationsMultisig), "pauserRegistry: operationsMultisig is not pauser"); + require(eigenLayerPauserReg.isPauser(executorMultisig), "pauserRegistry: executorMultisig is not pauser"); + require(eigenLayerPauserReg.isPauser(pauserMultisig), "pauserRegistry: pauserMultisig is not pauser"); + require(eigenLayerPauserReg.unpauser() == executorMultisig, "pauserRegistry: unpauser not set correctly"); + + for (uint256 i = 0; i < deployedStrategyArray.length; ++i) { + require( + deployedStrategyArray[i].pauserRegistry() == eigenLayerPauserReg, + "StrategyBaseTVLLimits: pauser registry not set correctly" + ); + require( + deployedStrategyArray[i].paused() == 0, + "StrategyBaseTVLLimits: init paused status set incorrectly" + ); + } + + // // pause *nothing* + // uint256 STRATEGY_MANAGER_INIT_PAUSED_STATUS = 0; + // // pause *everything* + // uint256 SLASHER_INIT_PAUSED_STATUS = type(uint256).max; + // // pause *everything* + // uint256 DELEGATION_INIT_PAUSED_STATUS = type(uint256).max; + // // pause *all of the proof-related functionality* (everything that can be paused other than creation of EigenPods) + // uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS = (2**1) + (2**2) + (2**3) + (2**4); /* = 30 */ + // // pause *nothing* + // require(strategyManager.paused() == 0, "strategyManager: init paused status set incorrectly"); + // require(slasher.paused() == type(uint256).max, "slasher: init paused status set incorrectly"); + // require(delegation.paused() == type(uint256).max, "delegation: init paused status set incorrectly"); + // require(eigenPodManager.paused() == 30, "eigenPodManager: init paused status set incorrectly"); + } + + function _verifyInitializationParams() internal { + // // one week in blocks -- 50400 + // uint32 STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS = 7 days / 12 seconds; + // require(strategyManager.withdrawalDelayBlocks() == 7 days / 12 seconds, + // "strategyManager: withdrawalDelayBlocks initialized incorrectly"); + // uint256 MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR = 32 ether; + + require( + strategyManager.strategyWhitelister() == operationsMultisig, + "strategyManager: strategyWhitelister address not set correctly" + ); + + require( + baseStrategyImplementation.strategyManager() == strategyManager, + "baseStrategyImplementation: strategyManager set incorrectly" + ); + + require( + eigenPodImplementation.ethPOS() == ethPOSDeposit, + "eigenPodImplementation: ethPOSDeposit contract address not set correctly" + ); + require( + eigenPodImplementation.eigenPodManager() == eigenPodManager, + " eigenPodImplementation: eigenPodManager contract address not set correctly" + ); + + string memory config_data = vm.readFile(deployConfigPath); + for (uint i = 0; i < deployedStrategyArray.length; i++) { + uint256 maxPerDeposit = stdJson.readUint( + config_data, + string.concat(".strategies[", vm.toString(i), "].max_per_deposit") + ); + uint256 maxDeposits = stdJson.readUint( + config_data, + string.concat(".strategies[", vm.toString(i), "].max_deposits") + ); + (uint256 setMaxPerDeposit, uint256 setMaxDeposits) = deployedStrategyArray[i].getTVLLimits(); + require(setMaxPerDeposit == maxPerDeposit, "setMaxPerDeposit not set correctly"); + require(setMaxDeposits == maxDeposits, "setMaxDeposits not set correctly"); + } + } +} diff --git a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol index 0620d6877..69ee9a238 100644 --- a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol +++ b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol @@ -67,6 +67,10 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { eigenPodManager = EigenPodManager( address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) ); + allocationManager = AllocationManager( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + // Deploy EigenPod Contracts eigenPodImplementation = new EigenPod( IETHPOSDeposit(ETHPOSDepositAddress), @@ -76,7 +80,7 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); avsDirectoryImplementation = new AVSDirectory(delegationManager); - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory); + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( @@ -86,6 +90,7 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { slasher, delegationManager ); + allocationManagerImplementation = new AllocationManager(delegationManager, avsDirectory); // Third, upgrade the proxy contracts to point to the implementations IStrategy[] memory initializeStrategiesToSetDelayBlocks = new IStrategy[](0); @@ -149,6 +154,17 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { EIGENPOD_MANAGER_INIT_PAUSED_STATUS ) ); + // AllocationManager + eigenLayerProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(allocationManager))), + address(allocationManagerImplementation), + abi.encodeWithSelector( + AllocationManager.initialize.selector, + msg.sender, // initialOwner is msg.sender for now to set forktimestamp later + eigenLayerPauserReg, + ALLOCATION_MANAGER_INIT_PAUSED_STATUS + ) + ); // Deploy Strategies baseStrategyImplementation = new StrategyBaseTVLLimits(strategyManager); diff --git a/script/deploy/local/Deploy_From_Scratch.s.sol b/script/deploy/local/Deploy_From_Scratch.s.sol index e6ac94f83..818790f05 100644 --- a/script/deploy/local/Deploy_From_Scratch.s.sol +++ b/script/deploy/local/Deploy_From_Scratch.s.sol @@ -13,6 +13,7 @@ import "../../../src/contracts/core/Slasher.sol"; 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/strategies/StrategyBaseTVLLimits.sol"; @@ -63,6 +64,8 @@ contract DeployFromScratch is Script, Test { UpgradeableBeacon public eigenPodBeacon; EigenPod public eigenPodImplementation; StrategyBase public baseStrategyImplementation; + AllocationManager public allocationManagerImplementation; + AllocationManager public allocationManager; EmptyContract public emptyContract; @@ -198,6 +201,9 @@ contract DeployFromScratch is Script, Test { rewardsCoordinator = RewardsCoordinator( address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) ); + allocationManager = AllocationManager( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); // if on mainnet, use the ETH2 deposit contract address if (chainId == 1) { @@ -215,7 +221,7 @@ contract DeployFromScratch is Script, Test { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory); + delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher, avsDirectory); avsDirectoryImplementation = new AVSDirectory(delegation); slasherImplementation = new Slasher(strategyManager, delegation); @@ -238,6 +244,7 @@ contract DeployFromScratch is Script, Test { REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH ); + allocationManagerImplementation = new AllocationManager(delegation, avsDirectory); // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. { diff --git a/script/utils/ExistingDeploymentParser.sol b/script/utils/ExistingDeploymentParser.sol index 385a0028a..8cce266fc 100644 --- a/script/utils/ExistingDeploymentParser.sol +++ b/script/utils/ExistingDeploymentParser.sol @@ -10,6 +10,7 @@ import "../../src/contracts/core/Slasher.sol"; 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/strategies/StrategyFactory.sol"; import "../../src/contracts/strategies/StrategyBase.sol"; @@ -62,6 +63,8 @@ contract ExistingDeploymentParser is Script, Test { StrategyBase public baseStrategyImplementation; StrategyFactory public strategyFactory; StrategyFactory public strategyFactoryImplementation; + AllocationManager public allocationManager; + AllocationManager public allocationManagerImplementation; UpgradeableBeacon public strategyBeacon; StrategyBase public strategyFactoryBeaconImplementation; @@ -121,6 +124,8 @@ contract ExistingDeploymentParser is Script, Test { uint32 REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH; // EigenPodManager uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS; + // AllocaitonManager + uint256 ALLOCATION_MANAGER_INIT_PAUSED_STATUS; // EigenPod uint64 EIGENPOD_GENESIS_TIME; uint64 EIGENPOD_MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR; @@ -329,6 +334,11 @@ contract ExistingDeploymentParser is Script, Test { initialDeploymentData, ".eigenPodManager.init_paused_status" ); + // AllocationManager + ALLOCATION_MANAGER_INIT_PAUSED_STATUS = stdJson.readUint( + initialDeploymentData, + ".allocationManager.init_paused_status" + ); // EigenPod EIGENPOD_GENESIS_TIME = uint64(stdJson.readUint(initialDeploymentData, ".eigenPod.GENESIS_TIME")); ETHPOSDepositAddress = stdJson.readAddress(initialDeploymentData, ".ethPOSDepositAddress"); diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index a3667feef..9e1af88fd 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -7,7 +7,6 @@ import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol import "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; -import "../libraries/SlashingConstants.sol"; import "./AVSDirectoryStorage.sol"; contract AVSDirectory is @@ -19,19 +18,12 @@ contract AVSDirectory is { using EnumerableSet for EnumerableSet.Bytes32Set; using EnumerableSet for EnumerableSet.AddressSet; - using Snapshots for Snapshots.History; /// @dev Index for flag that pauses operator register/deregister to avs when set. uint8 internal constant PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS = 0; /// @dev Index for flag that pauses operator register/deregister to operator sets when set. uint8 internal constant PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS = 1; - /// @dev BIPS factor for slashable bips - uint256 internal constant BIPS_FACTOR = 10_000; - - /// @dev Maximum number of pending updates that can be queued for allocations/deallocations - uint256 public constant MAX_PENDING_UPDATES = 1; - /// @dev Returns the chain ID from the time the contract was deployed. uint256 internal immutable ORIGINAL_CHAIN_ID; @@ -262,172 +254,6 @@ contract AVSDirectory is _deregisterFromOperatorSets(msg.sender, operator, operatorSetIds); } - /** - * @notice Modifies the propotions of slashable stake allocated to a list of operatorSets for a set of strategies - * @param operator address to modify allocations for - * @param allocations array of magnitude adjustments for multiple strategies and corresponding operator sets - * @param operatorSignature signature of the operator if msg.sender is not the operator - * @dev Updates freeMagnitude for the updated strategies - * @dev Must be called by the operator or with a valid operator signature - * @dev For each allocation, allocation.operatorSets MUST be ordered in ascending order according to the - * encoding of the operatorSet. This is to prevent duplicate operatorSets being passed in. The easiest way to ensure - * ordering is to sort allocated operatorSets by address first, and then sort for each avs by ascending operatorSetIds. - */ - function modifyAllocations( - address operator, - MagnitudeAllocation[] calldata allocations, - SignatureWithSaltAndExpiry calldata operatorSignature - ) external { - if (msg.sender != operator) { - _verifyOperatorSignature(operator, allocations, operatorSignature); - } - require( - delegation.isOperator(operator), "AVSDirectory.modifyAllocations: operator not registered to EigenLayer yet" - ); - IDelegationManager.AllocationDelayDetails memory details = delegation.operatorAllocationDelay(operator); - require( - details.isSet, - "AVSDirectory.modifyAllocations: operator must initialize allocation delay before modifying allocations" - ); - // effect timestamp for allocations to take effect. This is configurable by operators - uint32 effectTimestamp = uint32(block.timestamp) + details.allocationDelay; - // completable timestamp for deallocations - uint32 completableTimestamp = uint32(block.timestamp) + SlashingConstants.DEALLOCATION_DELAY; - - for (uint256 i = 0; i < allocations.length; ++i) { - // 1. For the given (operator,strategy) clear all pending free magnitude for the strategy and update freeMagnitude - _updateFreeMagnitude({ - operator: operator, - strategy: allocations[i].strategy, - numToComplete: type(uint16).max - }); - - // 2. Check current totalMagnitude matches expected value. This is to check for slashing race conditions - // where an operator gets slashed from an operatorSet and as a result all the configured allocations have larger - // proprtional magnitudes relative to eachother. This check prevents any surprising behavior. - uint64 currentTotalMagnitude = _getLatestTotalMagnitude(operator, allocations[i].strategy); - require( - currentTotalMagnitude == allocations[i].expectedTotalMagnitude, - "AVSDirectory.modifyAllocations: current total magnitude does not match expected" - ); - - // 3. set allocations for the strategy after updating freeMagnitude - _modifyAllocations({ - operator: operator, - allocation: allocations[i], - allocationEffectTimestamp: effectTimestamp, - deallocationCompletableTimestamp: completableTimestamp - }); - } - } - - /** - * @notice For all pending deallocations that have become completable, their pending free magnitude can be - * added back to the free magnitude of the (operator, strategy) amount. This function takes a list of strategies - * and adds all completable deallocations for each strategy, updating the freeMagnitudes of the operator - * - * @param operator address to complete deallocations for - * @param strategies a list of strategies to complete deallocations for - * @param numToComplete a list of number of pending free magnitude deallocations to complete for each strategy - * - * @dev can be called permissionlessly by anyone - */ - function updateFreeMagnitude( - address operator, - IStrategy[] calldata strategies, - uint16[] calldata numToComplete - ) external { - require( - delegation.isOperator(operator), - "AVSDirectory.updateFreeMagnitude: operator not registered to EigenLayer yet" - ); - require(strategies.length == numToComplete.length, "AVSDirectory.updateFreeMagnitude: array length mismatch"); - for (uint256 i = 0; i < strategies.length; ++i) { - _updateFreeMagnitude({operator: operator, strategy: strategies[i], numToComplete: numToComplete[i]}); - } - } - - /** - * @notice Called by an AVS to slash an operator for given operatorSetId, list of strategies, and bipsToSlash. - * For each given (operator, operatorSetId, strategy) tuple, bipsToSlash - * bips of the operatorSet's slashable stake allocation will be slashed - * - * @param operator the address to slash - * @param operatorSetId the ID of the operatorSet the operator is being slashed on behalf of - * @param strategies the set of strategies to slash - * @param bipsToSlash the number of bips to slash, this will be proportional to the - * operator's slashable stake allocation for the operatorSet - */ - function slashOperator( - address operator, - uint32 operatorSetId, - IStrategy[] calldata strategies, - uint16 bipsToSlash - ) external { - OperatorSet memory operatorSet = OperatorSet({avs: msg.sender, operatorSetId: operatorSetId}); - bytes32 operatorSetKey = _encodeOperatorSet(operatorSet); - require( - isOperatorSlashable(operator, operatorSet), - "AVSDirectory.slashOperator: operator not slashable for operatorSet" - ); - - for (uint256 i = 0; i < strategies.length; ++i) { - // 1. calculate slashed magnitude from current allocation - // update current and all following queued magnitude updates for (operator, strategy, operatorSetId) tuple - uint64 slashedMagnitude; - { - uint64 currentMagnitude = uint64( - _magnitudeUpdate[operator][strategies[i]][operatorSetKey].upperLookupRecent(uint32(block.timestamp)) - ); - // slash nonzero current magnitude - if (currentMagnitude != 0) { - /// TODO: add wrapping library for rounding up for slashing accounting - slashedMagnitude = uint64(uint256(bipsToSlash) * uint256(currentMagnitude) / BIPS_FACTOR); - - _magnitudeUpdate[operator][strategies[i]][operatorSetKey].decrementAtAndFutureSnapshots({ - key: uint32(block.timestamp), - decrementValue: slashedMagnitude - }); - } - } - - // 2. if there are any pending deallocations then need to update and decrement if they fall within slashable window - // loop backwards through _queuedDeallocationIndices, each element contains an array index to - // corresponding deallocation to access in pendingFreeMagnitude - // if completable, then break - // (since ordered by completableTimestamps, older deallocations will also be completable and outside slashable window) - // if NOT completable, then add to slashed magnitude - { - uint256 queuedDeallocationIndicesLen = - _queuedDeallocationIndices[operator][strategies[i]][operatorSetKey].length; - for (uint256 j = queuedDeallocationIndicesLen; j > 0; --j) { - // index of pendingFreeMagnitude/deallocation to check for slashing - uint256 index = _queuedDeallocationIndices[operator][strategies[i]][operatorSetKey][j - 1]; - PendingFreeMagnitude storage pendingFreeMagnitude = - _pendingFreeMagnitude[operator][strategies[i]][index]; - - // Reached pendingFreeMagnitude/deallocation that is completable and not within slashability window, - // therefore older deallocations will also be completable. Since this is ordered by completableTimestamps break loop now - if (pendingFreeMagnitude.completableTimestamp >= uint32(block.timestamp)) { - break; - } - - // pending deallocation is still within slashable window, slash magnitudeDiff and add to slashedMagnitude - uint64 slashedAmount = - uint64(uint256(bipsToSlash) * uint256(pendingFreeMagnitude.magnitudeDiff) / BIPS_FACTOR); - pendingFreeMagnitude.magnitudeDiff -= slashedAmount; - slashedMagnitude += slashedAmount; - } - } - - // 3. update totalMagnitude, get total magnitude and subtract slashedMagnitude - _totalMagnitudeUpdate[operator][strategies[i]].push({ - key: uint32(block.timestamp), - value: _getLatestTotalMagnitude(operator, strategies[i]) - slashedMagnitude - }); - } - } - /** * @notice Called by an AVS to emit an `AVSMetadataURIUpdated` event indicating the information has updated. * @@ -616,214 +442,6 @@ contract AVSDirectory is } } - /** - * @notice For a single strategy, update freeMagnitude by adding completable pending free magnitudes - * @param operator address to update freeMagnitude for - * @param strategy the strategy to update freeMagnitude for - * @param numToComplete the number of pending free magnitudes deallocations to complete - * @dev read through pending free magnitudes and add to freeMagnitude if completableTimestamp is >= block timestamp - * In addition to updating freeMagnitude, updates next starting index to read from for pending free magnitudes after completing - */ - function _updateFreeMagnitude(address operator, IStrategy strategy, uint16 numToComplete) internal { - OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][strategy]; - (uint64 freeMagnitudeToAdd, uint192 completed) = - _getPendingFreeMagnitude(operator, strategy, numToComplete, info.nextPendingFreeMagnitudeIndex); - info.freeMagnitude += freeMagnitudeToAdd; - info.nextPendingFreeMagnitudeIndex += completed; - } - - /** - * @notice For a single strategy, modify magnitude allocations for each of the specified operatorSets - * @param operator address to modify allocations for - * @param allocation the magnitude allocations to modify for a single strategy - * @param allocationEffectTimestamp the timestamp when the allocations will take effect - * @param deallocationCompletableTimestamp the timestamp when the deallocations will be completable - * @dev For each allocation, allocation.operatorSets MUST be ordered in ascending order according to the - * encoding of the operatorSet. This is to prevent duplicate operatorSets being passed in. The easiest way to ensure - * ordering is to sort allocated operatorSets by address first, and then sort for each avs by ascending operatorSetIds. - */ - function _modifyAllocations( - address operator, - MagnitudeAllocation calldata allocation, - uint32 allocationEffectTimestamp, - uint32 deallocationCompletableTimestamp - ) internal { - require( - allocation.operatorSets.length == allocation.magnitudes.length, - "AVSDirectory._modifyAllocations: operatorSets and magnitudes length mismatch" - ); - - // OperatorSet[] calldata opSets = allocation.operatorSets; - - bytes32 prevOperatorSet = bytes32(0); - - for (uint256 i = 0; i < allocation.operatorSets.length; ++i) { - require( - isOperatorSet[allocation.operatorSets[i].avs][allocation.operatorSets[i].operatorSetId], - "AVSDirectory._modifyAllocations: operatorSet does not exist" - ); - // use encoding of operatorSet to ensure ordering and also used to use OperatorSet struct as key in mappings - bytes32 operatorSetKey = _encodeOperatorSet(allocation.operatorSets[i]); - require(prevOperatorSet < operatorSetKey, "AVSDirectory._modifyAllocations: operatorSets not ordered"); - prevOperatorSet = operatorSetKey; - - // Read current magnitude allocation including its respective array index and length. - // We'll use these values later to check the number of pending allocations/deallocations. - (uint224 currentMagnitude, uint256 pos, uint256 length) = _magnitudeUpdate[operator][allocation.strategy][operatorSetKey] - .upperLookupRecentWithPos(uint32(block.timestamp)); - - // Check that there is at MOST `MAX_PENDING_UPDATES` combined allocations & deallocations for the operator, operatorSet, strategy - { - uint256 numPendingAllocations; - // if no lookup found (currentMagnitude == 0 && pos == 0), then we are at the beginning of the array - // the number of pending allocations is simply length - if (currentMagnitude == 0 && pos == 0) { - numPendingAllocations = length; - // if lookup found, then we take the difference between length-1 and pos - } else { - numPendingAllocations = length - pos - 1; - } - uint256 numPendingDeallocations = - _getNumQueuedDeallocations(operator, allocation.strategy, operatorSetKey); - - require( - numPendingAllocations + numPendingDeallocations < MAX_PENDING_UPDATES, - "AVSDirectory._modifyAllocations: Cannot set magnitude with a pending allocation or deallocation" - ); - } - - if (allocation.magnitudes[i] < uint64(currentMagnitude)) { - // Newly configured magnitude is less than current value. - // Therefore we handle this as a deallocation - - // Note: MAX_PENDING_UPDATES == 1, so we do not have to decrement any allocations - - // 1. push PendingFreeMagnitude and respective array index into (op,opSet,Strategy) queued deallocations - uint256 index = _pendingFreeMagnitude[operator][allocation.strategy].length; - _pendingFreeMagnitude[operator][allocation.strategy].push( - PendingFreeMagnitude({ - magnitudeDiff: uint64(currentMagnitude) - allocation.magnitudes[i], - completableTimestamp: deallocationCompletableTimestamp - }) - ); - _queuedDeallocationIndices[operator][allocation.strategy][operatorSetKey].push(index); - } else if (allocation.magnitudes[i] > uint64(currentMagnitude)) { - // Newly configured magnitude is greater than current value. - // Therefore we handle this as an allocation - - // 1. allocate magnitude which will take effect in the future 21 days from now - _magnitudeUpdate[operator][allocation.strategy][operatorSetKey].push({ - key: allocationEffectTimestamp, - value: allocation.magnitudes[i] - }); - - // 2. decrement free magnitude by incremented amount - OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][allocation.strategy]; - require( - info.freeMagnitude >= allocation.magnitudes[i] - uint64(currentMagnitude), - "AVSDirectory._modifyAllocations: insufficient available free magnitude to allocate" - ); - info.freeMagnitude -= allocation.magnitudes[i] - uint64(currentMagnitude); - } - } - } - - /** - * @notice Get the number of queued dealloations for the given (operator, strategy, operatorSetKey) tuple - * @param operator address to get queued deallocations for - * @param strategy the strategy to get queued deallocations for - * @param operatorSetKey the encoded operatorSet to get queued deallocations for - */ - function _getNumQueuedDeallocations( - address operator, - IStrategy strategy, - bytes32 operatorSetKey - ) internal view returns (uint256) { - uint256 numQueuedDeallocations; - - uint256 length = _queuedDeallocationIndices[operator][strategy][operatorSetKey].length; - - for (uint256 i = length; i > 0; --i) { - // index of pendingFreeMagnitude/deallocation to check for slashing - uint256 index = _queuedDeallocationIndices[operator][strategy][operatorSetKey][i - 1]; - PendingFreeMagnitude memory pendingFreeMagnitude = _pendingFreeMagnitude[operator][strategy][index]; - - // If completableTimestamp is greater than completeUntilTimestamp, break - if (pendingFreeMagnitude.completableTimestamp < uint32(block.timestamp)) { - ++numQueuedDeallocations; - } else { - break; - } - } - - return numQueuedDeallocations; - } - - /// @dev gets the latest total magnitude or overwrites it if it is not set - function _getLatestTotalMagnitude(address operator, IStrategy strategy) internal returns (uint64) { - (bool exists,, uint224 totalMagnitude) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); - if (!exists) { - totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; - _totalMagnitudeUpdate[operator][strategy].push({key: uint32(block.timestamp), value: totalMagnitude}); - operatorMagnitudeInfo[operator][strategy].freeMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; - } - - return uint64(totalMagnitude); - } - - /// @dev gets the pending free magnitude available to add by completing numToComplete pending deallocations - /// and returns the next index to start from if completed. - function _getPendingFreeMagnitude( - address operator, - IStrategy strategy, - uint16 numToComplete, - uint192 nextIndex - ) internal view returns (uint64 freeMagnitudeToAdd, uint192 completed) { - uint256 pendingFreeMagnitudeLength = _pendingFreeMagnitude[operator][strategy].length; - uint16 completed = 0; - freeMagnitudeToAdd = 0; - while (nextIndex < pendingFreeMagnitudeLength && completed < numToComplete) { - PendingFreeMagnitude memory pendingFreeMagnitude = _pendingFreeMagnitude[operator][strategy][nextIndex]; - // pendingFreeMagnitude is ordered by completableTimestamp. If we reach one that is not completable yet, then break - // loop until completableTimestamp is < block.timestamp - if (pendingFreeMagnitude.completableTimestamp < uint32(block.timestamp)) { - break; - } - - // pending free magnitude can be added to freeMagnitude - freeMagnitudeToAdd += pendingFreeMagnitude.magnitudeDiff; - ++nextIndex; - ++completed; - } - return (freeMagnitudeToAdd, nextIndex); - } - - /// @dev Verify operator's signature and spend salt - function _verifyOperatorSignature( - address operator, - MagnitudeAllocation[] calldata allocations, - SignatureWithSaltAndExpiry calldata operatorSignature - ) internal { - // check the signature expiry - require( - operatorSignature.expiry >= block.timestamp, - "AVSDirectory._verifyOperatorSignature: operator signature expired" - ); - // Assert operator's signature cannot be replayed. - require( - !operatorSaltIsSpent[operator][operatorSignature.salt], "AVSDirectory._verifyOperatorSignature: salt spent" - ); - - bytes32 digestHash = calculateMagnitudeAllocationDigestHash( - operator, allocations, operatorSignature.salt, operatorSignature.expiry - ); - - // Assert operator's signature is valid. - EIP1271SignatureUtils.checkSignature_EIP1271(operator, digestHash, operatorSignature.signature); - // Spend salt. - operatorSaltIsSpent[operator][operatorSignature.salt] = true; - } - /** * * VIEW FUNCTIONS @@ -916,265 +534,6 @@ contract AVSDirectory is return _operatorSetsMemberOf[operator].contains(_encodeOperatorSet(operatorSet)); } - /** - * @param operator the operator to get the slashable magnitude for - * @param strategies the strategies to get the slashable magnitude for - * - * @return operatorSets the operator sets the operator is a member of and the current slashable magnitudes for each strategy - */ - function getCurrentSlashableMagnitudes( - address operator, - IStrategy[] calldata strategies - ) external view returns (OperatorSet[] memory, uint64[][] memory) { - OperatorSet[] memory operatorSets = - getOperatorSetsOfOperator(operator, 0, _operatorSetsMemberOf[operator].length()); - uint64[][] memory slashableMagnitudes = new uint64[][](strategies.length); - for (uint256 i = 0; i < strategies.length; ++i) { - slashableMagnitudes[i] = new uint64[](operatorSets.length); - for (uint256 j = 0; j < operatorSets.length; ++j) { - slashableMagnitudes[i][j] = uint64( - _magnitudeUpdate[operator][strategies[i]][_encodeOperatorSet(operatorSets[j])].upperLookupLinear( - uint32(block.timestamp) - ) - ); - } - } - return (operatorSets, slashableMagnitudes); - } - - /** - * @param operator the operator to get the slashable magnitude for - * @param strategies the strategies to get the slashable magnitude for - * @param timestamp the timestamp to get the slashable magnitude for - * - * @return operatorSets the operator sets the operator is a member of and the slashable magnitudes for each strategy - */ - function getSlashableMagnitudes( - address operator, - IStrategy[] calldata strategies, - uint32 timestamp - ) external view returns (OperatorSet[] memory, uint64[][] memory) { - OperatorSet[] memory operatorSets = - getOperatorSetsOfOperator(operator, 0, _operatorSetsMemberOf[operator].length()); - uint64[][] memory slashableMagnitudes = new uint64[][](strategies.length); - for (uint256 i = 0; i < strategies.length; ++i) { - slashableMagnitudes[i] = new uint64[](operatorSets.length); - for (uint256 j = 0; j < operatorSets.length; ++j) { - slashableMagnitudes[i][j] = uint64( - _magnitudeUpdate[operator][strategies[i]][_encodeOperatorSet(operatorSets[j])].upperLookupRecent( - timestamp - ) - ); - } - } - return (operatorSets, slashableMagnitudes); - } - - /** - * @param operator the operator to get the slashable ppm for - * @param operatorSet the operatorSet to get the slashable ppm for - * @param strategies the strategies to get the slashable ppm for - * @param timestamp the timestamp to get the slashable ppm for for - * @param linear whether the search should be linear (from the most recent) or binary - * - * @return slashablePPM the slashable ppm of the given list of strategies allocated to - * the given OperatorSet for the given operator and timestamp - */ - function getSlashablePPM( - address operator, - OperatorSet calldata operatorSet, - IStrategy[] calldata strategies, - uint32 timestamp, - bool linear - ) public view returns (uint24[] memory) { - uint24[] memory slashablePPM = new uint24[](strategies.length); - for (uint256 i = 0; i < strategies.length; ++i) { - slashablePPM[i] = _getSlashablePPM(operator, operatorSet, strategies[i], timestamp, linear); - } - return slashablePPM; - } - - function _getSlashablePPM( - address operator, - OperatorSet calldata operatorSet, - IStrategy strategy, - uint32 timestamp, - bool linear - ) public view returns (uint24) { - uint64 totalMagnitude; - if (linear) { - totalMagnitude = uint64(_totalMagnitudeUpdate[operator][strategy].upperLookupLinear(timestamp)); - } else { - totalMagnitude = uint64(_totalMagnitudeUpdate[operator][strategy].upperLookup(timestamp)); - } - // return early if totalMagnitude is 0 - if (totalMagnitude == 0) { - return 0; - } - - uint64 currentMagnitude; - bytes32 operatorSetKey = _encodeOperatorSet(operatorSet); - if (linear) { - currentMagnitude = uint64(_magnitudeUpdate[operator][strategy][operatorSetKey].upperLookupLinear(timestamp)); - } else { - currentMagnitude = uint64(_magnitudeUpdate[operator][strategy][operatorSetKey].upperLookup(timestamp)); - } - - return uint16(currentMagnitude * 1e6 / totalMagnitude); - } - - /** - * @notice Get the allocatable magnitude for an operator and strategy based on number of pending deallocations - * that could be completed at the same time. This is the sum of freeMagnitude and the sum of all pending completable deallocations. - * @param operator the operator to get the allocatable magnitude for - * @param strategy the strategy to get the allocatable magnitude for - * @param numToComplete the number of pending free magnitudes deallocations to complete - */ - function getAllocatableMagnitude( - address operator, - IStrategy strategy, - uint16 numToComplete - ) external view returns (uint64) { - OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][strategy]; - (uint64 freeMagnitudeToAdd, ) = - _getPendingFreeMagnitude(operator, strategy, numToComplete, info.nextPendingFreeMagnitudeIndex); - return info.freeMagnitude + freeMagnitudeToAdd; - } - - /// @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days - function isOperatorSlashable(address operator, OperatorSet memory operatorSet) public view returns (bool) { - OperatorSetRegistrationStatus memory registrationStatus = - operatorSetStatus[operatorSet.avs][operator][operatorSet.operatorSetId]; - return isMember(operator, operatorSet) - || registrationStatus.lastDeregisteredTimestamp + SlashingConstants.DEALLOCATION_DELAY >= block.timestamp; - } - - /** - * @notice Returns the current total magnitudes of an operator for a given set of strategies - * @param operator the operator to get the total magnitude for - * @param strategies the strategies to get the total magnitudes for - * @return totalMagnitudes the total magnitudes for each strategy - */ - function getTotalMagnitudes( - address operator, - IStrategy[] calldata strategies - ) external view returns (uint64[] memory) { - uint64[] memory totalMagnitudes = new uint64[](strategies.length); - for (uint256 i = 0; i < strategies.length;) { - (bool exists, , uint224 value) = _totalMagnitudeUpdate[operator][strategies[i]].latestSnapshot(); - if (!exists) { - totalMagnitudes[i] = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; - } else { - totalMagnitudes[i] = uint64(value); - } - - unchecked { - ++i; - } - } - return totalMagnitudes; - } - - /** - * @notice Returns the total magnitudes of an operator for a given set of strategies at a given timestamp - * @param operator the operator to get the total magnitude for - * @param strategies the strategies to get the total magnitudes for - * @param timestamp the timestamp to get the total magnitudes at - * @return totalMagnitudes the total magnitudes for each strategy - */ - function getTotalMagnitudesAtTimestamp( - address operator, - IStrategy[] calldata strategies, - uint32 timestamp - ) external view returns (uint64[] memory) { - uint64[] memory totalMagnitudes = new uint64[](strategies.length); - for (uint256 i = 0; i < strategies.length;) { - (uint224 value, uint256 pos, ) = - _totalMagnitudeUpdate[operator][strategies[i]].upperLookupRecentWithPos(timestamp); - - // if there is no existing total magnitude snapshot - if (value == 0 && pos == 0) { - totalMagnitudes[i] = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; - } else { - totalMagnitudes[i] = uint64(value); - } - - unchecked { - ++i; - } - } - return totalMagnitudes; - } - - /** - * @notice Returns the current total magnitude of an operator for a given strategy - * @param operator the operator to get the total magnitude for - * @param strategy the strategy to get the total magnitude for - * @return totalMagnitude the total magnitude for the strategy - */ - function getTotalMagnitude( - address operator, - IStrategy strategy - ) external view returns (uint64) { - uint64 totalMagnitude; - (bool exists, , uint224 value) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); - if (!exists) { - totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; - } else { - totalMagnitude = uint64(value); - } - - return totalMagnitude; - } - - /** - * @notice Returns the total magnitude of an operator for a given strategy at a given timestamp - * @param operator the operator to get the total magnitude for - * @param strategy the strategy to get the total magnitude for - * @param timestamp the timestamp to get the total magnitude at - * @return totalMagnitude the total magnitude for the strategy - */ - function getTotalMagnitudeAtTimestamp( - address operator, - IStrategy strategy, - uint32 timestamp - ) external view returns (uint64) { - uint64 totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; - ( - uint224 value, - uint256 pos, - ) = _totalMagnitudeUpdate[operator][strategy].upperLookupRecentWithPos(timestamp); - - // if there is no existing total magnitude snapshot - if (value == 0 && pos == 0) { - totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; - } else { - totalMagnitude = uint64(value); - } - - return totalMagnitude; - } - - // /** - // * @notice fetches the minimum slashable shares for a certain operator and operatorSet for a list of strategies - // * from the current timestamp until the given timestamp - // * - // * @param operator the operator to get the minimum slashable shares for - // * @param operatorSet the operatorSet to get the minimum slashable shares for - // * @param strategies the strategies to get the minimum slashable shares for - // * @param timestamp the timestamp to the minimum slashable shares before - // * - // * @dev used to get the slashable stakes of operators to weigh over a given slashability window - // * - // * @return the list of share amounts for each strategy - // */ - // function getMinimumSlashableSharesBefore( - // address operator, - // OperatorSet calldata operatorSet, - // IStrategy[] calldata strategies, - // uint32 timestamp - // ) external view returns (uint256[] calldata) {} - /** * @notice Calculates the digest hash to be signed by an operator to register with an AVS. * @@ -1231,24 +590,6 @@ contract AVSDirectory is ); } - /** - * @notice Calculates the digest hash to be signed by an operator to modify magnitude allocations - * @param operator The operator to allocate or deallocate magnitude for. - * @param allocations The magnitude allocations/deallocations to be made. - * @param salt A unique and single use value associated with the approver signature. - * @param expiry Time after which the approver's signature becomes invalid. - */ - function calculateMagnitudeAllocationDigestHash( - address operator, - MagnitudeAllocation[] calldata allocations, - bytes32 salt, - uint256 expiry - ) public view returns (bytes32) { - return _calculateDigestHash( - keccak256(abi.encode(MAGNITUDE_ADJUSTMENT_TYPEHASH, operator, allocations, salt, expiry)) - ); - } - /// @notice Getter function for the current EIP-712 domain separator for this contract. /// @dev The domain separator will change in the event of a fork that changes the ChainID. function domainSeparator() public view override returns (bytes32) { diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index c189541e8..46ced9b84 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/AVSDirectoryStorage.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "../interfaces/IAVSDirectory.sol"; -import {Snapshots} from "../libraries/Snapshots.sol"; abstract contract AVSDirectoryStorage is IAVSDirectory { using EnumerableSet for EnumerableSet.Bytes32Set; @@ -65,22 +64,6 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { /// @notice Mapping: operator => avs => operatorSetId => operator registration status mapping(address => mapping(address => mapping(uint32 => OperatorSetRegistrationStatus))) public operatorSetStatus; - /// @notice Mapping: operator => strategy => snapshotted totalMagnitude - /// Note that totalMagnitude is monotonically decreasing and only gets updated upon slashing - mapping(address => mapping(IStrategy => Snapshots.History)) internal _totalMagnitudeUpdate; - - /// @notice Mapping: operator => strategy => operatorSet (encoded) => snapshotted magnitude - mapping(address => mapping(IStrategy => mapping(bytes32 => Snapshots.History))) internal _magnitudeUpdate; - - /// @notice Mapping: operator => strategy => OperatorMagnitudeInfo to keep track of info regarding pending magnitude allocations. - mapping(address => mapping(IStrategy => OperatorMagnitudeInfo)) public operatorMagnitudeInfo; - - /// @notice Mapping: operator => strategy => PendingFreeMagnitude[] to keep track of pending free magnitude from deallocations - mapping(address => mapping(IStrategy => PendingFreeMagnitude[])) internal _pendingFreeMagnitude; - - /// @notice Mapping: operator => strategy => operatorSet (encoded) => list of queuedDeallocation indices - mapping(address => mapping(IStrategy => mapping(bytes32 => uint256[]))) internal _queuedDeallocationIndices; - constructor( IDelegationManager _delegation ) { @@ -92,5 +75,5 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ - uint256[35] private __gap; + uint256[42] private __gap; } diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol new file mode 100644 index 000000000..e88a7a8fe --- /dev/null +++ b/src/contracts/core/AllocationManager.sol @@ -0,0 +1,754 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; +import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; +import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol"; + +import "../permissions/Pausable.sol"; +import "../libraries/EIP1271SignatureUtils.sol"; +import "../libraries/SlashingConstants.sol"; +import "./AllocationManagerStorage.sol"; + +contract AllocationManager is + Initializable, + OwnableUpgradeable, + Pausable, + AllocationManagerStorage, + ReentrancyGuardUpgradeable +{ + using Snapshots for Snapshots.History; + + /// @dev BIPS factor for slashable bips + uint256 internal constant BIPS_FACTOR = 10_000; + + /// @dev Maximum number of pending updates that can be queued for allocations/deallocations + uint256 public constant MAX_PENDING_UPDATES = 1; + + /// @dev Returns the chain ID from the time the contract was deployed. + uint256 internal immutable ORIGINAL_CHAIN_ID; + + /** + * + * INITIALIZING FUNCTIONS + * + */ + + /** + * @dev Initializes the immutable addresses of the strategy mananger, delegationManager, slasher, + * and eigenpodManager contracts + */ + constructor( + IDelegationManager _delegation, + IAVSDirectory _avsDirectory + ) AllocationManagerStorage(_delegation, _avsDirectory) { + _disableInitializers(); + ORIGINAL_CHAIN_ID = block.chainid; + } + + /** + * @dev Initializes the addresses of the initial owner, pauser registry, and paused status. + * minWithdrawalDelayBlocks is set only once here + */ + function initialize( + address initialOwner, + IPauserRegistry _pauserRegistry, + uint256 initialPausedStatus + ) external initializer { + _initializePauser(_pauserRegistry, initialPausedStatus); + _DOMAIN_SEPARATOR = _calculateDomainSeparator(); + _transferOwnership(initialOwner); + } + + /** + * @notice For all pending deallocations that have become completable, their pending free magnitude can be + * added back to the free magnitude of the (operator, strategy) amount. This function takes a list of strategies + * and adds all completable deallocations for each strategy, updating the freeMagnitudes of the operator + * + * @param operator address to complete deallocations for + * @param strategies a list of strategies to complete deallocations for + * @param numToComplete a list of number of pending free magnitude deallocations to complete for each strategy + * + * @dev can be called permissionlessly by anyone + */ + function updateFreeMagnitude( + address operator, + IStrategy[] calldata strategies, + uint16[] calldata numToComplete + ) external { + require( + delegation.isOperator(operator), + "AllocationManager.updateFreeMagnitude: operator not registered to EigenLayer yet" + ); + require( + strategies.length == numToComplete.length, "AllocationManager.updateFreeMagnitude: array length mismatch" + ); + for (uint256 i = 0; i < strategies.length; ++i) { + _updateFreeMagnitude({operator: operator, strategy: strategies[i], numToComplete: numToComplete[i]}); + } + } + + /** + * @notice Modifies the propotions of slashable stake allocated to a list of operatorSets for a set of strategies + * @param operator address to modify allocations for + * @param allocations array of magnitude adjustments for multiple strategies and corresponding operator sets + * @param operatorSignature signature of the operator if msg.sender is not the operator + * @dev Updates freeMagnitude for the updated strategies + * @dev Must be called by the operator or with a valid operator signature + * @dev For each allocation, allocation.operatorSets MUST be ordered in ascending order according to the + * encoding of the operatorSet. This is to prevent duplicate operatorSets being passed in. The easiest way to ensure + * ordering is to sort allocated operatorSets by address first, and then sort for each avs by ascending operatorSetIds. + */ + function modifyAllocations( + address operator, + MagnitudeAllocation[] calldata allocations, + SignatureWithSaltAndExpiry calldata operatorSignature + ) external { + if (msg.sender != operator) { + _verifyOperatorSignature(operator, allocations, operatorSignature); + } + require( + delegation.isOperator(operator), + "AllocationManager.modifyAllocations: operator not registered to EigenLayer yet" + ); + IDelegationManager.AllocationDelayDetails memory details = delegation.operatorAllocationDelay(operator); + require( + details.isSet, + "AllocationManager.modifyAllocations: operator must initialize allocation delay before modifying allocations" + ); + // effect timestamp for allocations to take effect. This is configurable by operators + uint32 effectTimestamp = uint32(block.timestamp) + details.allocationDelay; + // completable timestamp for deallocations + uint32 completableTimestamp = uint32(block.timestamp) + SlashingConstants.DEALLOCATION_DELAY; + + for (uint256 i = 0; i < allocations.length; ++i) { + // 1. For the given (operator,strategy) clear all pending free magnitude for the strategy and update freeMagnitude + _updateFreeMagnitude({ + operator: operator, + strategy: allocations[i].strategy, + numToComplete: type(uint16).max + }); + + // 2. Check current totalMagnitude matches expected value. This is to check for slashing race conditions + // where an operator gets slashed from an operatorSet and as a result all the configured allocations have larger + // proprtional magnitudes relative to eachother. This check prevents any surprising behavior. + uint64 currentTotalMagnitude = _getLatestTotalMagnitude(operator, allocations[i].strategy); + require( + currentTotalMagnitude == allocations[i].expectedTotalMagnitude, + "AllocationManager.modifyAllocations: current total magnitude does not match expected" + ); + + // 3. set allocations for the strategy after updating freeMagnitude + _modifyAllocations({ + operator: operator, + allocation: allocations[i], + allocationEffectTimestamp: effectTimestamp, + deallocationCompletableTimestamp: completableTimestamp + }); + } + } + + /** + * @notice Called by an AVS to slash an operator for given operatorSetId, list of strategies, and bipsToSlash. + * For each given (operator, operatorSetId, strategy) tuple, bipsToSlash + * bips of the operatorSet's slashable stake allocation will be slashed + * + * @param operator the address to slash + * @param operatorSetId the ID of the operatorSet the operator is being slashed on behalf of + * @param strategies the set of strategies to slash + * @param bipsToSlash the number of bips to slash, this will be proportional to the + * operator's slashable stake allocation for the operatorSet + */ + function slashOperator( + address operator, + uint32 operatorSetId, + IStrategy[] calldata strategies, + uint16 bipsToSlash + ) external { + OperatorSet memory operatorSet = OperatorSet({avs: msg.sender, operatorSetId: operatorSetId}); + bytes32 operatorSetKey = _encodeOperatorSet(operatorSet); + require( + isOperatorSlashable(operator, operatorSet), + "AllocationManager.slashOperator: operator not slashable for operatorSet" + ); + + for (uint256 i = 0; i < strategies.length; ++i) { + // 1. calculate slashed magnitude from current allocation + // update current and all following queued magnitude updates for (operator, strategy, operatorSetId) tuple + uint64 slashedMagnitude; + { + uint64 currentMagnitude = uint64( + _magnitudeUpdate[operator][strategies[i]][operatorSetKey].upperLookupRecent(uint32(block.timestamp)) + ); + // slash nonzero current magnitude + if (currentMagnitude != 0) { + /// TODO: add wrapping library for rounding up for slashing accounting + slashedMagnitude = uint64(uint256(bipsToSlash) * uint256(currentMagnitude) / BIPS_FACTOR); + + _magnitudeUpdate[operator][strategies[i]][operatorSetKey].decrementAtAndFutureSnapshots({ + key: uint32(block.timestamp), + decrementValue: slashedMagnitude + }); + } + } + + // 2. if there are any pending deallocations then need to update and decrement if they fall within slashable window + // loop backwards through _queuedDeallocationIndices, each element contains an array index to + // corresponding deallocation to access in pendingFreeMagnitude + // if completable, then break + // (since ordered by completableTimestamps, older deallocations will also be completable and outside slashable window) + // if NOT completable, then add to slashed magnitude + { + uint256 queuedDeallocationIndicesLen = + _queuedDeallocationIndices[operator][strategies[i]][operatorSetKey].length; + for (uint256 j = queuedDeallocationIndicesLen; j > 0; --j) { + // index of pendingFreeMagnitude/deallocation to check for slashing + uint256 index = _queuedDeallocationIndices[operator][strategies[i]][operatorSetKey][j - 1]; + PendingFreeMagnitude storage pendingFreeMagnitude = + _pendingFreeMagnitude[operator][strategies[i]][index]; + + // Reached pendingFreeMagnitude/deallocation that is completable and not within slashability window, + // therefore older deallocations will also be completable. Since this is ordered by completableTimestamps break loop now + if (pendingFreeMagnitude.completableTimestamp >= uint32(block.timestamp)) { + break; + } + + // pending deallocation is still within slashable window, slash magnitudeDiff and add to slashedMagnitude + uint64 slashedAmount = + uint64(uint256(bipsToSlash) * uint256(pendingFreeMagnitude.magnitudeDiff) / BIPS_FACTOR); + pendingFreeMagnitude.magnitudeDiff -= slashedAmount; + slashedMagnitude += slashedAmount; + } + } + + // 3. update totalMagnitude, get total magnitude and subtract slashedMagnitude + _totalMagnitudeUpdate[operator][strategies[i]].push({ + key: uint32(block.timestamp), + value: _getLatestTotalMagnitude(operator, strategies[i]) - slashedMagnitude + }); + } + } + + /** + * @notice Called by an operator to cancel a salt that has been used to register with an AVS. + * + * @param salt A unique and single use value associated with the approver signature. + */ + function cancelSalt( + bytes32 salt + ) external override { + // Mutate `operatorSaltIsSpent` to `true` to prevent future spending. + operatorSaltIsSpent[msg.sender][salt] = true; + } + + /** + * @notice For a single strategy, update freeMagnitude by adding completable pending free magnitudes + * @param operator address to update freeMagnitude for + * @param strategy the strategy to update freeMagnitude for + * @param numToComplete the number of pending free magnitudes deallocations to complete + * @dev read through pending free magnitudes and add to freeMagnitude if completableTimestamp is >= block timestamp + * In addition to updating freeMagnitude, updates next starting index to read from for pending free magnitudes after completing + */ + function _updateFreeMagnitude(address operator, IStrategy strategy, uint16 numToComplete) internal { + OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][strategy]; + (uint64 freeMagnitudeToAdd, uint192 completed) = + _getPendingFreeMagnitude(operator, strategy, numToComplete, info.nextPendingFreeMagnitudeIndex); + info.freeMagnitude += freeMagnitudeToAdd; + info.nextPendingFreeMagnitudeIndex += completed; + } + + /** + * @notice For a single strategy, modify magnitude allocations for each of the specified operatorSets + * @param operator address to modify allocations for + * @param allocation the magnitude allocations to modify for a single strategy + * @param allocationEffectTimestamp the timestamp when the allocations will take effect + * @param deallocationCompletableTimestamp the timestamp when the deallocations will be completable + * @dev For each allocation, allocation.operatorSets MUST be ordered in ascending order according to the + * encoding of the operatorSet. This is to prevent duplicate operatorSets being passed in. The easiest way to ensure + * ordering is to sort allocated operatorSets by address first, and then sort for each avs by ascending operatorSetIds. + */ + function _modifyAllocations( + address operator, + MagnitudeAllocation calldata allocation, + uint32 allocationEffectTimestamp, + uint32 deallocationCompletableTimestamp + ) internal { + require( + allocation.operatorSets.length == allocation.magnitudes.length, + "AllocationManager._modifyAllocations: operatorSets and magnitudes length mismatch" + ); + + // OperatorSet[] calldata opSets = allocation.operatorSets; + + bytes32 prevOperatorSet = bytes32(0); + + for (uint256 i = 0; i < allocation.operatorSets.length; ++i) { + require( + avsDirectory.isOperatorSet(allocation.operatorSets[i].avs, allocation.operatorSets[i].operatorSetId), + "AllocationManager._modifyAllocations: operatorSet does not exist" + ); + // use encoding of operatorSet to ensure ordering and also used to use OperatorSet struct as key in mappings + bytes32 operatorSetKey = _encodeOperatorSet(allocation.operatorSets[i]); + require(prevOperatorSet < operatorSetKey, "AllocationManager._modifyAllocations: operatorSets not ordered"); + prevOperatorSet = operatorSetKey; + + // Read current magnitude allocation including its respective array index and length. + // We'll use these values later to check the number of pending allocations/deallocations. + (uint224 currentMagnitude, uint256 pos, uint256 length) = _magnitudeUpdate[operator][allocation.strategy][operatorSetKey] + .upperLookupRecentWithPos(uint32(block.timestamp)); + + // Check that there is at MOST `MAX_PENDING_UPDATES` combined allocations & deallocations for the operator, operatorSet, strategy + { + uint256 numPendingAllocations; + // if no lookup found (currentMagnitude == 0 && pos == 0), then we are at the beginning of the array + // the number of pending allocations is simply length + if (currentMagnitude == 0 && pos == 0) { + numPendingAllocations = length; + // if lookup found, then we take the difference between length-1 and pos + } else { + numPendingAllocations = length - pos - 1; + } + uint256 numPendingDeallocations = + _getNumQueuedDeallocations(operator, allocation.strategy, operatorSetKey); + + require( + numPendingAllocations + numPendingDeallocations < MAX_PENDING_UPDATES, + "AllocationManager._modifyAllocations: Cannot set magnitude with a pending allocation or deallocation" + ); + } + + if (allocation.magnitudes[i] < uint64(currentMagnitude)) { + // Newly configured magnitude is less than current value. + // Therefore we handle this as a deallocation + + // Note: MAX_PENDING_UPDATES == 1, so we do not have to decrement any allocations + + // 1. push PendingFreeMagnitude and respective array index into (op,opSet,Strategy) queued deallocations + uint256 index = _pendingFreeMagnitude[operator][allocation.strategy].length; + _pendingFreeMagnitude[operator][allocation.strategy].push( + PendingFreeMagnitude({ + magnitudeDiff: uint64(currentMagnitude) - allocation.magnitudes[i], + completableTimestamp: deallocationCompletableTimestamp + }) + ); + _queuedDeallocationIndices[operator][allocation.strategy][operatorSetKey].push(index); + } else if (allocation.magnitudes[i] > uint64(currentMagnitude)) { + // Newly configured magnitude is greater than current value. + // Therefore we handle this as an allocation + + // 1. allocate magnitude which will take effect in the future 21 days from now + _magnitudeUpdate[operator][allocation.strategy][operatorSetKey].push({ + key: allocationEffectTimestamp, + value: allocation.magnitudes[i] + }); + + // 2. decrement free magnitude by incremented amount + OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][allocation.strategy]; + require( + info.freeMagnitude >= allocation.magnitudes[i] - uint64(currentMagnitude), + "AllocationManager._modifyAllocations: insufficient available free magnitude to allocate" + ); + info.freeMagnitude -= allocation.magnitudes[i] - uint64(currentMagnitude); + } + } + } + + /** + * @notice Get the number of queued dealloations for the given (operator, strategy, operatorSetKey) tuple + * @param operator address to get queued deallocations for + * @param strategy the strategy to get queued deallocations for + * @param operatorSetKey the encoded operatorSet to get queued deallocations for + */ + function _getNumQueuedDeallocations( + address operator, + IStrategy strategy, + bytes32 operatorSetKey + ) internal view returns (uint256) { + uint256 numQueuedDeallocations; + + uint256 length = _queuedDeallocationIndices[operator][strategy][operatorSetKey].length; + + for (uint256 i = length; i > 0; --i) { + // index of pendingFreeMagnitude/deallocation to check for slashing + uint256 index = _queuedDeallocationIndices[operator][strategy][operatorSetKey][i - 1]; + PendingFreeMagnitude memory pendingFreeMagnitude = _pendingFreeMagnitude[operator][strategy][index]; + + // If completableTimestamp is greater than completeUntilTimestamp, break + if (pendingFreeMagnitude.completableTimestamp < uint32(block.timestamp)) { + ++numQueuedDeallocations; + } else { + break; + } + } + + return numQueuedDeallocations; + } + + /// @dev gets the latest total magnitude or overwrites it if it is not set + function _getLatestTotalMagnitude(address operator, IStrategy strategy) internal returns (uint64) { + (bool exists,, uint224 totalMagnitude) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); + if (!exists) { + totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + _totalMagnitudeUpdate[operator][strategy].push({key: uint32(block.timestamp), value: totalMagnitude}); + operatorMagnitudeInfo[operator][strategy].freeMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + } + + return uint64(totalMagnitude); + } + + /// @dev gets the pending free magnitude available to add by completing numToComplete pending deallocations + /// and returns the next index to start from if completed. + function _getPendingFreeMagnitude( + address operator, + IStrategy strategy, + uint16 numToComplete, + uint192 nextIndex + ) internal view returns (uint64 freeMagnitudeToAdd, uint192 completed) { + uint256 pendingFreeMagnitudeLength = _pendingFreeMagnitude[operator][strategy].length; + uint16 completed = 0; + freeMagnitudeToAdd = 0; + while (nextIndex < pendingFreeMagnitudeLength && completed < numToComplete) { + PendingFreeMagnitude memory pendingFreeMagnitude = _pendingFreeMagnitude[operator][strategy][nextIndex]; + // pendingFreeMagnitude is ordered by completableTimestamp. If we reach one that is not completable yet, then break + // loop until completableTimestamp is < block.timestamp + if (pendingFreeMagnitude.completableTimestamp < uint32(block.timestamp)) { + break; + } + + // pending free magnitude can be added to freeMagnitude + freeMagnitudeToAdd += pendingFreeMagnitude.magnitudeDiff; + ++nextIndex; + ++completed; + } + return (freeMagnitudeToAdd, nextIndex); + } + + /** + * @param operator the operator to get the slashable magnitude for + * @param strategies the strategies to get the slashable magnitude for + * + * @return operatorSets the operator sets the operator is a member of and the current slashable magnitudes for each strategy + */ + function getCurrentSlashableMagnitudes( + address operator, + IStrategy[] calldata strategies + ) external view returns (OperatorSet[] memory, uint64[][] memory) { + OperatorSet[] memory operatorSets = avsDirectory.getOperatorSetsOfOperator(operator, 0, type(uint256).max); + uint64[][] memory slashableMagnitudes = new uint64[][](strategies.length); + for (uint256 i = 0; i < strategies.length; ++i) { + slashableMagnitudes[i] = new uint64[](operatorSets.length); + for (uint256 j = 0; j < operatorSets.length; ++j) { + slashableMagnitudes[i][j] = uint64( + _magnitudeUpdate[operator][strategies[i]][_encodeOperatorSet(operatorSets[j])].upperLookupLinear( + uint32(block.timestamp) + ) + ); + } + } + return (operatorSets, slashableMagnitudes); + } + + /** + * @param operator the operator to get the slashable magnitude for + * @param strategies the strategies to get the slashable magnitude for + * @param timestamp the timestamp to get the slashable magnitude for + * + * @return operatorSets the operator sets the operator is a member of and the slashable magnitudes for each strategy + */ + function getSlashableMagnitudes( + address operator, + IStrategy[] calldata strategies, + uint32 timestamp + ) external view returns (OperatorSet[] memory, uint64[][] memory) { + OperatorSet[] memory operatorSets = avsDirectory.getOperatorSetsOfOperator(operator, 0, type(uint256).max); + uint64[][] memory slashableMagnitudes = new uint64[][](strategies.length); + for (uint256 i = 0; i < strategies.length; ++i) { + slashableMagnitudes[i] = new uint64[](operatorSets.length); + for (uint256 j = 0; j < operatorSets.length; ++j) { + slashableMagnitudes[i][j] = uint64( + _magnitudeUpdate[operator][strategies[i]][_encodeOperatorSet(operatorSets[j])].upperLookupRecent( + timestamp + ) + ); + } + } + return (operatorSets, slashableMagnitudes); + } + + /** + * @param operator the operator to get the slashable ppm for + * @param operatorSet the operatorSet to get the slashable ppm for + * @param strategies the strategies to get the slashable ppm for + * @param timestamp the timestamp to get the slashable ppm for for + * @param linear whether the search should be linear (from the most recent) or binary + * + * @return slashablePPM the slashable ppm of the given list of strategies allocated to + * the given OperatorSet for the given operator and timestamp + */ + function getSlashablePPM( + address operator, + OperatorSet calldata operatorSet, + IStrategy[] calldata strategies, + uint32 timestamp, + bool linear + ) public view returns (uint24[] memory) { + uint24[] memory slashablePPM = new uint24[](strategies.length); + for (uint256 i = 0; i < strategies.length; ++i) { + slashablePPM[i] = _getSlashablePPM(operator, operatorSet, strategies[i], timestamp, linear); + } + return slashablePPM; + } + + function _getSlashablePPM( + address operator, + OperatorSet calldata operatorSet, + IStrategy strategy, + uint32 timestamp, + bool linear + ) public view returns (uint24) { + uint64 totalMagnitude; + if (linear) { + totalMagnitude = uint64(_totalMagnitudeUpdate[operator][strategy].upperLookupLinear(timestamp)); + } else { + totalMagnitude = uint64(_totalMagnitudeUpdate[operator][strategy].upperLookup(timestamp)); + } + // return early if totalMagnitude is 0 + if (totalMagnitude == 0) { + return 0; + } + + uint64 currentMagnitude; + bytes32 operatorSetKey = _encodeOperatorSet(operatorSet); + if (linear) { + currentMagnitude = uint64(_magnitudeUpdate[operator][strategy][operatorSetKey].upperLookupLinear(timestamp)); + } else { + currentMagnitude = uint64(_magnitudeUpdate[operator][strategy][operatorSetKey].upperLookup(timestamp)); + } + + return uint16(currentMagnitude * 1e6 / totalMagnitude); + } + + /** + * @notice Get the allocatable magnitude for an operator and strategy based on number of pending deallocations + * that could be completed at the same time. This is the sum of freeMagnitude and the sum of all pending completable deallocations. + * @param operator the operator to get the allocatable magnitude for + * @param strategy the strategy to get the allocatable magnitude for + * @param numToComplete the number of pending free magnitudes deallocations to complete + */ + function getAllocatableMagnitude( + address operator, + IStrategy strategy, + uint16 numToComplete + ) external view returns (uint64) { + OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][strategy]; + (uint64 freeMagnitudeToAdd,) = + _getPendingFreeMagnitude(operator, strategy, numToComplete, info.nextPendingFreeMagnitudeIndex); + return info.freeMagnitude + freeMagnitudeToAdd; + } + + /// @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days + function isOperatorSlashable(address operator, OperatorSet memory operatorSet) public view returns (bool) { + (, uint32 lastDeregisteredTimestamp) = + avsDirectory.operatorSetStatus(operatorSet.avs, operator, operatorSet.operatorSetId); + return avsDirectory.isMember(operator, operatorSet) + || lastDeregisteredTimestamp + SlashingConstants.DEALLOCATION_DELAY >= block.timestamp; + } + + /** + * @notice Returns the current total magnitudes of an operator for a given set of strategies + * @param operator the operator to get the total magnitude for + * @param strategies the strategies to get the total magnitudes for + * @return totalMagnitudes the total magnitudes for each strategy + */ + function getTotalMagnitudes( + address operator, + IStrategy[] calldata strategies + ) external view returns (uint64[] memory) { + uint64[] memory totalMagnitudes = new uint64[](strategies.length); + for (uint256 i = 0; i < strategies.length; ++i) { + (bool exists,, uint224 value) = _totalMagnitudeUpdate[operator][strategies[i]].latestSnapshot(); + if (!exists) { + totalMagnitudes[i] = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + } else { + totalMagnitudes[i] = uint64(value); + } + } + return totalMagnitudes; + } + + /** + * @notice Returns the total magnitudes of an operator for a given set of strategies at a given timestamp + * @param operator the operator to get the total magnitude for + * @param strategies the strategies to get the total magnitudes for + * @param timestamp the timestamp to get the total magnitudes at + * @return totalMagnitudes the total magnitudes for each strategy + */ + function getTotalMagnitudesAtTimestamp( + address operator, + IStrategy[] calldata strategies, + uint32 timestamp + ) external view returns (uint64[] memory) { + uint64[] memory totalMagnitudes = new uint64[](strategies.length); + for (uint256 i = 0; i < strategies.length; ++i) { + (uint224 value, uint256 pos,) = + _totalMagnitudeUpdate[operator][strategies[i]].upperLookupRecentWithPos(timestamp); + // if there is no existing total magnitude snapshot + if (value == 0 && pos == 0) { + totalMagnitudes[i] = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + } else { + totalMagnitudes[i] = uint64(value); + } + } + return totalMagnitudes; + } + + /** + * @notice Returns the current total magnitude of an operator for a given strategy + * @param operator the operator to get the total magnitude for + * @param strategy the strategy to get the total magnitude for + * @return totalMagnitude the total magnitude for the strategy + */ + function getTotalMagnitude(address operator, IStrategy strategy) external view returns (uint64) { + uint64 totalMagnitude; + (bool exists,, uint224 value) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); + if (!exists) { + totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + } else { + totalMagnitude = uint64(value); + } + + return totalMagnitude; + } + + /** + * @notice Returns the total magnitude of an operator for a given strategy at a given timestamp + * @param operator the operator to get the total magnitude for + * @param strategy the strategy to get the total magnitude for + * @param timestamp the timestamp to get the total magnitude at + * @return totalMagnitude the total magnitude for the strategy + */ + function getTotalMagnitudeAtTimestamp( + address operator, + IStrategy strategy, + uint32 timestamp + ) external view returns (uint64) { + uint64 totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + (uint224 value, uint256 pos,) = _totalMagnitudeUpdate[operator][strategy].upperLookupRecentWithPos(timestamp); + + // if there is no existing total magnitude snapshot + if (value == 0 && pos == 0) { + totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + } else { + totalMagnitude = uint64(value); + } + + return totalMagnitude; + } + + // /** + // * @notice fetches the minimum slashable shares for a certain operator and operatorSet for a list of strategies + // * from the current timestamp until the given timestamp + // * + // * @param operator the operator to get the minimum slashable shares for + // * @param operatorSet the operatorSet to get the minimum slashable shares for + // * @param strategies the strategies to get the minimum slashable shares for + // * @param timestamp the timestamp to the minimum slashable shares before + // * + // * @dev used to get the slashable stakes of operators to weigh over a given slashability window + // * + // * @return the list of share amounts for each strategy + // */ + // function getMinimumSlashableSharesBefore( + // address operator, + // OperatorSet calldata operatorSet, + // IStrategy[] calldata strategies, + // uint32 timestamp + // ) external view returns (uint256[] calldata) {} + + /// @dev Verify operator's signature and spend salt + function _verifyOperatorSignature( + address operator, + MagnitudeAllocation[] calldata allocations, + SignatureWithSaltAndExpiry calldata operatorSignature + ) internal { + // check the signature expiry + require( + operatorSignature.expiry >= block.timestamp, + "AllocationManager._verifyOperatorSignature: operator signature expired" + ); + // Assert operator's signature cannot be replayed. + require( + !avsDirectory.operatorSaltIsSpent(operator, operatorSignature.salt), + "AllocationManager._verifyOperatorSignature: salt spent" + ); + + bytes32 digestHash = calculateMagnitudeAllocationDigestHash( + operator, allocations, operatorSignature.salt, operatorSignature.expiry + ); + + // Assert operator's signature is valid. + EIP1271SignatureUtils.checkSignature_EIP1271(operator, digestHash, operatorSignature.signature); + // Spend salt. + operatorSaltIsSpent[operator][operatorSignature.salt] = true; + } + + /** + * @notice Calculates the digest hash to be signed by an operator to modify magnitude allocations + * @param operator The operator to allocate or deallocate magnitude for. + * @param allocations The magnitude allocations/deallocations to be made. + * @param salt A unique and single use value associated with the approver signature. + * @param expiry Time after which the approver's signature becomes invalid. + */ + function calculateMagnitudeAllocationDigestHash( + address operator, + MagnitudeAllocation[] calldata allocations, + bytes32 salt, + uint256 expiry + ) public view returns (bytes32) { + return _calculateDigestHash( + keccak256(abi.encode(MAGNITUDE_ADJUSTMENT_TYPEHASH, operator, allocations, salt, expiry)) + ); + } + + /// @notice Getter function for the current EIP-712 domain separator for this contract. + /// @dev The domain separator will change in the event of a fork that changes the ChainID. + function domainSeparator() public view override returns (bytes32) { + return _calculateDomainSeparator(); + } + + /// @notice Internal function for calculating the current domain separator of this contract + function _calculateDomainSeparator() internal view returns (bytes32) { + if (block.chainid == ORIGINAL_CHAIN_ID) { + return _DOMAIN_SEPARATOR; + } else { + return keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes("EigenLayer")), block.chainid, address(this))); + } + } + + /// @notice Returns an EIP-712 encoded hash struct. + function _calculateDigestHash( + bytes32 structHash + ) internal view returns (bytes32) { + return keccak256(abi.encodePacked("\x19\x01", _calculateDomainSeparator(), structHash)); + } + + /// @dev Returns an `OperatorSet` encoded into a 32-byte value. + /// @param operatorSet The `OperatorSet` to encode. + function _encodeOperatorSet( + OperatorSet memory operatorSet + ) internal pure returns (bytes32) { + return bytes32(abi.encodePacked(operatorSet.avs, uint96(operatorSet.operatorSetId))); + } + + /// @dev Returns an `OperatorSet` decoded from an encoded 32-byte value. + /// @param encoded The encoded `OperatorSet` to decode. + /// @dev Assumes `encoded` is encoded via `_encodeOperatorSet(operatorSet)`. + function _decodeOperatorSet( + bytes32 encoded + ) internal pure returns (OperatorSet memory) { + return OperatorSet({ + avs: address(uint160(uint256(encoded) >> 96)), + operatorSetId: uint32(uint256(encoded) & type(uint96).max) + }); + } +} diff --git a/src/contracts/core/AllocationManagerStorage.sol b/src/contracts/core/AllocationManagerStorage.sol new file mode 100644 index 000000000..e327f82a9 --- /dev/null +++ b/src/contracts/core/AllocationManagerStorage.sol @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "../interfaces/IAVSDirectory.sol"; +import "../interfaces/IAllocationManager.sol"; +import {Snapshots} from "../libraries/Snapshots.sol"; + +abstract contract AllocationManagerStorage is IAllocationManager { + using Snapshots for Snapshots.History; + + /// @notice The EIP-712 typehash for the contract's domain + bytes32 public constant DOMAIN_TYPEHASH = + keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); + + /// @notice The EIP-712 typehash for the `MagnitudeAdjustments` struct used by the contract + bytes32 public constant MAGNITUDE_ADJUSTMENT_TYPEHASH = keccak256( + "MagnitudeAdjustments(address operator,MagnitudeAdjustment(address strategy, OperatorSet(address avs, uint32 operatorSetId)[], uint64[] magnitudeDiffs)[],bytes32 salt,uint256 expiry)" + ); + + /// @notice The DelegationManager contract for EigenLayer + IDelegationManager public immutable delegation; + + /// @notice The AVSDirectory contract for EigenLayer + IAVSDirectory public immutable avsDirectory; + + /** + * @notice Original EIP-712 Domain separator for this contract. + * @dev The domain separator may change in the event of a fork that modifies the ChainID. + * Use the getter function `domainSeparator` to get the current domain separator for this contract. + */ + bytes32 internal _DOMAIN_SEPARATOR; + + /// @notice Mapping: operator => salt => Whether the salt has been used or not. + mapping(address => mapping(bytes32 => bool)) public operatorSaltIsSpent; + + /// @notice Mapping: operator => strategy => snapshotted totalMagnitude + /// Note that totalMagnitude is monotonically decreasing and only gets updated upon slashing + mapping(address => mapping(IStrategy => Snapshots.History)) internal _totalMagnitudeUpdate; + + /// @notice Mapping: operator => strategy => operatorSet (encoded) => snapshotted magnitude + mapping(address => mapping(IStrategy => mapping(bytes32 => Snapshots.History))) internal _magnitudeUpdate; + + /// @notice Mapping: operator => strategy => OperatorMagnitudeInfo to keep track of info regarding pending magnitude allocations. + mapping(address => mapping(IStrategy => OperatorMagnitudeInfo)) public operatorMagnitudeInfo; + + /// @notice Mapping: operator => strategy => PendingFreeMagnitude[] to keep track of pending free magnitude from deallocations + mapping(address => mapping(IStrategy => PendingFreeMagnitude[])) internal _pendingFreeMagnitude; + + /// @notice Mapping: operator => strategy => operatorSet (encoded) => list of queuedDeallocation indices + mapping(address => mapping(IStrategy => mapping(bytes32 => uint256[]))) internal _queuedDeallocationIndices; + + constructor(IDelegationManager _delegation, IAVSDirectory _avsDirectory) { + delegation = _delegation; + avsDirectory = _avsDirectory; + } + + /** + * @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[43] private __gap; +} diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 2b6149281..6cf0a0b07 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -69,8 +69,9 @@ contract DelegationManager is IStrategyManager _strategyManager, ISlasher _slasher, IEigenPodManager _eigenPodManager, - IAVSDirectory _avsDirectory - ) DelegationManagerStorage(_strategyManager, _slasher, _eigenPodManager, _avsDirectory) { + IAVSDirectory _avsDirectory, + IAllocationManager _allocationManager + ) DelegationManagerStorage(_strategyManager, _slasher, _eigenPodManager, _avsDirectory, _allocationManager) { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; } @@ -132,7 +133,9 @@ contract DelegationManager is * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. * @param delay the allocation delay in seconds */ - function initializeAllocationDelay(uint32 delay) external { + function initializeAllocationDelay( + uint32 delay + ) external { _initializeAllocationDelay(delay); } @@ -145,7 +148,7 @@ contract DelegationManager is function modifyOperatorDetails( OperatorDetails calldata newOperatorDetails ) external { - require(isOperator(msg.sender), OperatorDoesNotExist()); + require(isOperator(msg.sender), "DelegationManager.modifyOperatorDetails: caller must be an operator"); _setOperatorDetails(msg.sender, newOperatorDetails); } @@ -156,7 +159,7 @@ contract DelegationManager is function updateOperatorMetadataURI( string calldata metadataURI ) external { - require(isOperator(msg.sender), OperatorDoesNotExist()); + require(isOperator(msg.sender), "DelegationManager.updateOperatorMetadataURI: caller must be an operator"); emit OperatorMetadataURIUpdated(msg.sender, metadataURI); } @@ -236,9 +239,9 @@ contract DelegationManager is function undelegate( address staker ) external onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) returns (bytes32[] memory withdrawalRoots) { - require(isDelegated(staker), NotCurrentlyDelegated()); - require(!isOperator(staker), OperatorsCannotUndelegate()); - require(staker != address(0), InputAddressZero()); + require(isDelegated(staker), "DelegationManager.undelegate: staker must be delegated to undelegate"); + require(!isOperator(staker), "DelegationManager.undelegate: operators cannot be undelegated"); + require(staker != address(0), "DelegationManager.undelegate: cannot undelegate zero address"); address operator = delegatedTo[staker]; require( msg.sender == staker || msg.sender == operator @@ -264,7 +267,7 @@ contract DelegationManager is withdrawalRoots = new bytes32[](0); } else { withdrawalRoots = new bytes32[](strategies.length); - uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); + uint64[] memory totalMagnitudes = allocationManager.getTotalMagnitudes(operator, strategies); for (uint256 i = 0; i < strategies.length; i++) { IStrategy[] memory singleStrategy = new IStrategy[](1); @@ -309,7 +312,7 @@ contract DelegationManager is require(queuedWithdrawalParams[i].withdrawer == msg.sender, WithdrawerNotStaker()); uint64[] memory totalMagnitudes = - avsDirectory.getTotalMagnitudes(operator, queuedWithdrawalParams[i].strategies); + allocationManager.getTotalMagnitudes(operator, queuedWithdrawalParams[i].strategies); // Remove shares from staker's strategies and place strategies/shares in queue. // If the staker is delegated to an operator, the operator's delegated shares are also reduced @@ -387,7 +390,7 @@ contract DelegationManager is // if the staker is delegated to an operator if (isDelegated(staker)) { address operator = delegatedTo[staker]; - uint64 totalMagnitude = avsDirectory.getTotalMagnitude(operator, strategy); + uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategy); // update stakers scaling deposit scaling factor uint256 newStakerScalingFactor = _calculateStakerScalingFactor({ @@ -431,7 +434,7 @@ contract DelegationManager is if (isDelegated(staker)) { address operator = delegatedTo[staker]; - uint64 totalMagnitude = avsDirectory.getTotalMagnitude(operator, strategy); + uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategy); // subtract strategy shares from delegated scaled shares _decreaseOperatorScaledShares({ @@ -511,7 +514,9 @@ contract DelegationManager is * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. * @param delay the allocation delay in seconds */ - function _initializeAllocationDelay(uint32 delay) internal { + function _initializeAllocationDelay( + uint32 delay + ) internal { require( isOperator(msg.sender), "DelegationManager._initializeAllocationDelay: operator not registered to EigenLayer yet" @@ -582,7 +587,7 @@ contract DelegationManager is // read staker's delegatable shares and strategies to add to operator's scaled shares // and also update the staker scaling factor for each strategy (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableShares(staker); - uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudes(operator, strategies); + uint64[] memory totalMagnitudes = allocationManager.getTotalMagnitudes(operator, strategies); for (uint256 i = 0; i < strategies.length;) { // update stakers scaling deposit scaling factor @@ -643,7 +648,7 @@ contract DelegationManager is // read delegated operator's totalMagnitudes at time of withdrawal to scale shares again if any slashing has occurred // during withdrawal delay period - uint64[] memory totalMagnitudes = avsDirectory.getTotalMagnitudesAtTimestamp({ + uint64[] memory totalMagnitudes = allocationManager.getTotalMagnitudesAtTimestamp({ operator: withdrawal.delegatedTo, strategies: withdrawal.strategies, timestamp: withdrawal.startTimestamp + SlashingConstants.DEALLOCATION_DELAY @@ -957,7 +962,10 @@ contract DelegationManager is function _setMinWithdrawalDelayBlocks( uint256 _minWithdrawalDelayBlocks ) internal { - require(_minWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, WithdrawalDelayExceedsMax()); + require( + _minWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, + "DelegationManager._setMinWithdrawalDelayBlocks: _minWithdrawalDelayBlocks cannot be > MAX_WITHDRAWAL_DELAY_BLOCKS" + ); emit MinWithdrawalDelayBlocksSet(minWithdrawalDelayBlocks, _minWithdrawalDelayBlocks); minWithdrawalDelayBlocks = _minWithdrawalDelayBlocks; } @@ -1178,7 +1186,9 @@ contract DelegationManager is * @notice Returns the AllocationDelayDetails struct associated with an `operator` * @dev If the operator has not set an allocation delay, then the `isSet` field will be `false`. */ - function operatorAllocationDelay(address operator) external view returns (AllocationDelayDetails memory) { + function operatorAllocationDelay( + address operator + ) external view returns (AllocationDelayDetails memory) { return _operatorAllocationDelay[operator]; } @@ -1202,7 +1212,7 @@ contract DelegationManager is /// @notice a legacy function that returns the total delegated shares for an operator and strategy function operatorShares(address operator, IStrategy strategy) public view returns (uint256) { - uint64 totalMagnitude = avsDirectory.getTotalMagnitude(operator, strategy); + uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategy); return _descaleShares(operatorScaledShares[operator][strategy], totalMagnitude); } @@ -1229,7 +1239,7 @@ contract DelegationManager is // 2. if the staker is delegated, actual withdrawable shares can be different from what is stored // in the StrategyManager/EigenPodManager because they could have been slashed if (operator != address(0)) { - uint64 totalMagnitude = avsDirectory.getTotalMagnitude(operator, strategies[i]); + uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategies[i]); shares[i] = _getWithdrawableShares(staker, strategies[i], shares[i], totalMagnitude); } } @@ -1242,7 +1252,9 @@ contract DelegationManager is * delegatable shares! * @dev Returns two empty arrays in the case that the Staker has no actively-delegateable shares. */ - function getDelegatableShares(address staker) public view returns (IStrategy[] memory, uint256[] memory) { + function getDelegatableShares( + address staker + ) public view returns (IStrategy[] memory, uint256[] memory) { // Get current StrategyManager/EigenPodManager shares and strategies for `staker` // If `staker` is already delegated, these may not be the full withdrawable amounts due to slashing int256 podShares = eigenPodManager.podOwnerShares(staker); diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index 0c8874d36..05764e388 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -6,6 +6,7 @@ import "../interfaces/IDelegationManager.sol"; import "../interfaces/ISlasher.sol"; import "../interfaces/IAVSDirectory.sol"; import "../interfaces/IEigenPodManager.sol"; +import "../interfaces/IAllocationManager.sol"; /** * @title Storage variables for the `DelegationManager` contract. @@ -46,6 +47,9 @@ abstract contract DelegationManagerStorage is IDelegationManager { /// @notice The EigenPodManager contract for EigenLayer IEigenPodManager public immutable eigenPodManager; + /// @notice The AllocationManager contract for EigenLayer + IAllocationManager public immutable allocationManager; + /** * @notice returns the total number of scaled shares (i.e. shares scaled down by a factor of the `operator`'s * totalMagnitude) in `strategy` that are delegated to `operator`. @@ -133,12 +137,14 @@ abstract contract DelegationManagerStorage is IDelegationManager { IStrategyManager _strategyManager, ISlasher _slasher, IEigenPodManager _eigenPodManager, - IAVSDirectory _avsDirectory + IAVSDirectory _avsDirectory, + IAllocationManager _allocationManager ) { strategyManager = _strategyManager; eigenPodManager = _eigenPodManager; slasher = _slasher; avsDirectory = _avsDirectory; + allocationManager = _allocationManager; } /** diff --git a/src/contracts/core/RewardsCoordinator.sol b/src/contracts/core/RewardsCoordinator.sol index fe626e91b..fef86e261 100644 --- a/src/contracts/core/RewardsCoordinator.sol +++ b/src/contracts/core/RewardsCoordinator.sol @@ -137,11 +137,9 @@ contract RewardsCoordinator is * @dev This function will revert if the `rewardsSubmission` is malformed, * e.g. if the `strategies` and `weights` arrays are of non-equal lengths */ - function createAVSRewardsSubmission(RewardsSubmission[] calldata rewardsSubmissions) - external - onlyWhenNotPaused(PAUSED_AVS_REWARDS_SUBMISSION) - nonReentrant - { + function createAVSRewardsSubmission( + RewardsSubmission[] calldata rewardsSubmissions + ) external onlyWhenNotPaused(PAUSED_AVS_REWARDS_SUBMISSION) nonReentrant { for (uint256 i = 0; i < rewardsSubmissions.length;) { RewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -175,12 +173,9 @@ contract RewardsCoordinator is * a permissioned call based on isRewardsForAllSubmitter mapping. * @param rewardsSubmissions The rewards submissions being created */ - function createRewardsForAllSubmission(RewardsSubmission[] calldata rewardsSubmissions) - external - onlyWhenNotPaused(PAUSED_REWARDS_FOR_ALL_SUBMISSION) - onlyRewardsForAllSubmitter - nonReentrant - { + function createRewardsForAllSubmission( + RewardsSubmission[] calldata rewardsSubmissions + ) external onlyWhenNotPaused(PAUSED_REWARDS_FOR_ALL_SUBMISSION) onlyRewardsForAllSubmitter nonReentrant { for (uint256 i = 0; i < rewardsSubmissions.length;) { RewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -221,11 +216,9 @@ contract RewardsCoordinator is * @dev The tokens in the rewards submissions are sent to the `RewardsCoordinator` contract * @dev Strategies of each rewards submission must be in ascending order of addresses to check for duplicates */ - function rewardOperatorSetForRange(OperatorSetRewardsSubmission[] calldata rewardsSubmissions) - external - onlyWhenNotPaused(PAUSED_REWARD_OPERATOR_SET) - nonReentrant - { + function rewardOperatorSetForRange( + OperatorSetRewardsSubmission[] calldata rewardsSubmissions + ) external onlyWhenNotPaused(PAUSED_REWARD_OPERATOR_SET) nonReentrant { for (uint256 i = 0; i < rewardsSubmissions.length;) { OperatorSetRewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -359,7 +352,7 @@ contract RewardsCoordinator is function disableRoot( uint32 rootIndex ) external onlyWhenNotPaused(PAUSED_SUBMIT_DISABLE_ROOTS) onlyRewardsUpdater { - require(rootIndex < _distributionRoots.length, InvalidRootIndex()); + require(rootIndex < _distributionRoots.length, "RewardsCoordinator.disableRoot: invalid rootIndex"); DistributionRoot storage root = _distributionRoots[rootIndex]; require(!root.disabled, RootDisabled()); require(block.timestamp < root.activatedAt, RootActivated()); @@ -392,7 +385,7 @@ contract RewardsCoordinator is * @dev The commission update takes effect after 7 days */ function setOperatorCommissionBips( - IAVSDirectory.OperatorSet calldata operatorSet, + OperatorSet calldata operatorSet, RewardType rewardType, uint16 commissionBips ) external returns (uint32 effectTimestamp) { @@ -663,7 +656,7 @@ contract RewardsCoordinator is /// NOTE: Currently unused and simply returns the globalOperatorCommissionBips value but will be used in future release function getOperatorCommissionBips( address operator, - IAVSDirectory.OperatorSet calldata operatorSet, + OperatorSet calldata operatorSet, RewardType rewardType ) external view returns (uint16) { // if no value set, default to globalOperatorCommissionBips @@ -725,7 +718,7 @@ contract RewardsCoordinator is /// @notice returns the length of the operator commission update history function getOperatorCommissionUpdateHistoryLength( address operator, - IAVSDirectory.OperatorSet calldata operatorSet, + OperatorSet calldata operatorSet, RewardType rewardType ) external view returns (uint256) { return operatorCommissionUpdates[operator][operatorSet.avs][operatorSet.operatorSetId][rewardType].length; diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index bb54eb172..943a361cb 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -42,7 +42,10 @@ contract StrategyManager is modifier onlyStrategiesWhitelistedForDeposit( IStrategy strategy ) { - require(strategyIsWhitelistedForDeposit[strategy], StrategyNotWhitelisted()); + require( + strategyIsWhitelistedForDeposit[strategy], + "StrategyManager.onlyStrategiesWhitelistedForDeposit: strategy not whitelisted" + ); _; } diff --git a/src/contracts/interfaces/IAVSDirectory.sol b/src/contracts/interfaces/IAVSDirectory.sol index 4df5edd4b..c619c5b29 100644 --- a/src/contracts/interfaces/IAVSDirectory.sol +++ b/src/contracts/interfaces/IAVSDirectory.sol @@ -4,12 +4,19 @@ pragma solidity >=0.5.0; import "./IDelegationManager.sol"; import "./ISignatureUtils.sol"; +/// @notice Struct representing an operator set +struct OperatorSet { + address avs; + uint32 operatorSetId; +} + interface IAVSDirectory is ISignatureUtils { /// @notice Enum representing the registration status of an operator with an AVS. /// @notice Only used by legacy M2 AVSs that have not integrated with operatorSets. enum OperatorAVSRegistrationStatus { UNREGISTERED, // Operator not registered to AVS REGISTERED // Operator registered to AVS + } /** @@ -23,47 +30,6 @@ interface IAVSDirectory is ISignatureUtils { uint32 lastDeregisteredTimestamp; } - /// @notice Struct representing an operator set - struct OperatorSet { - address avs; - uint32 operatorSetId; - } - - /** - * @notice struct used to modify the allocation of slashable magnitude to list of operatorSets - * @param strategy the strategy to allocate magnitude for - * @param expectedTotalMagnitude the expected total magnitude of the operator used to combat against race conditions with slashing - * @param operatorSets the operatorSets to allocate magnitude for - * @param magnitudes the magnitudes to allocate for each operatorSet - */ - struct MagnitudeAllocation { - IStrategy strategy; - uint64 expectedTotalMagnitude; - OperatorSet[] operatorSets; - uint64[] magnitudes; - } - - /** - * @notice struct used for pending free magnitude. Stored in (operator, strategy, operatorSet) mapping - * to be used in completeDeallocations. - * @param magnitudeDiff the amount of magnitude to deallocate - * @param completableTimestamp the timestamp at which the deallocation can be completed, 21 days from when queued - */ - struct PendingFreeMagnitude { - uint64 magnitudeDiff; - uint32 completableTimestamp; - } - - /** - * @notice Struct containing info regarding free allocatable magnitude. - * @param nextPendingFreeMagnitudeIndex The next available update index. - * @param freeMagnitude The total amount of free allocatable magnitude. - */ - struct OperatorMagnitudeInfo { - uint192 nextPendingFreeMagnitudeIndex; - uint64 freeMagnitude; - } - /// @notice Emitted when an operator set is created by an AVS. event OperatorSetCreated(OperatorSet operatorSet); @@ -91,33 +57,6 @@ interface IAVSDirectory is ISignatureUtils { /// @notice Emitted when an operator is migrated from M2 registration to operator sets. event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds); - /// @notice Emitted when an operator allocates slashable magnitude to an operator set - event MagnitudeAllocated( - address operator, - IStrategy strategy, - OperatorSet operatorSet, - uint64 magnitudeToAllocate, - uint32 effectTimestamp - ); - - /// @notice Emitted when an operator queues deallocations of slashable magnitude from an operator set - event MagnitudeQueueDeallocated( - address operator, - IStrategy strategy, - OperatorSet operatorSet, - uint64 magnitudeToDeallocate, - uint32 completableTimestamp - ); - - /// @notice Emitted when an operator completes deallocations of slashable magnitude from an operator set - /// and adds back magnitude to free allocatable magnitude - event MagnitudeDeallocationCompleted( - address operator, IStrategy strategy, OperatorSet operatorSet, uint64 freeMagnitudeAdded - ); - - /// @notice Emitted when an operator is slashed by an operator set for a strategy - event OperatorSlashed(address operator, uint32 operatorSetId, IStrategy strategy, uint16 bipsToSlash); - /** * * EXTERNAL FUNCTIONS @@ -132,7 +71,9 @@ interface IAVSDirectory is ISignatureUtils { * @dev msg.sender must be the AVS. * @dev The AVS may create operator sets before it becomes an operator set AVS. */ - function createOperatorSets(uint32[] calldata operatorSetIds) external; + function createOperatorSets( + uint32[] calldata operatorSetIds + ) external; /** * @notice Sets the AVS as an operator set AVS, preventing legacy M2 operator registrations. @@ -230,54 +171,6 @@ interface IAVSDirectory is ISignatureUtils { address operator ) external; - /** - * @notice Modifies the propotions of slashable stake allocated to a list of operatorSets for a set of strategies - * @param operator address to modify allocations for - * @param allocations array of magnitude adjustments for multiple strategies and corresponding operator sets - * @param operatorSignature signature of the operator if msg.sender is not the operator - * @dev updates freeMagnitude for the updated strategies - * @dev must be called by the operator - */ - function modifyAllocations( - address operator, - MagnitudeAllocation[] calldata allocations, - SignatureWithSaltAndExpiry calldata operatorSignature - ) external; - - /** - * @notice For all pending deallocations that have become completable, their pending free magnitude can be - * added back to the free magnitude of the (operator, strategy) amount. This function takes a list of strategies - * and adds all completable deallocations for each strategy, updating the freeMagnitudes of the operator - * - * @param operator address to complete deallocations for - * @param strategies a list of strategies to complete deallocations for - * - * @dev can be called permissionlessly by anyone - */ - function updateFreeMagnitude( - address operator, - IStrategy[] calldata strategies, - uint16[] calldata numToComplete - ) external; - - /** - * @notice Called by an AVS to slash an operator for given operatorSetId, list of strategies, and bipsToSlash. - * For each given (operator, operatorSetId, strategy) tuple, bipsToSlash - * bips of the operatorSet's slashable stake allocation will be slashed - * - * @param operator the address to slash - * @param operatorSetId the ID of the operatorSet the operator is being slashed on behalf of - * @param strategies the set of strategies to slash - * @param bipsToSlash the number of bips to slash, this will be proportional to the - * operator's slashable stake allocation for the operatorSet - */ - function slashOperator( - address operator, - uint32 operatorSetId, - IStrategy[] calldata strategies, - uint16 bipsToSlash - ) external; - /** * @notice Called by an AVS to emit an `AVSMetadataURIUpdated` event indicating the information has updated. * @@ -294,130 +187,22 @@ interface IAVSDirectory is ISignatureUtils { * * @param salt A unique and single use value associated with the approver signature. */ - function cancelSalt(bytes32 salt) external; + function cancelSalt( + bytes32 salt + ) external; /** * * VIEW FUNCTIONS * */ - - /** - * @notice Get the allocatable magnitude for an operator and strategy based on number of pending deallocations - * that could be completed at the same time. This is the sum of freeMagnitude and the sum of all pending completable deallocations. - * @param operator the operator to get the allocatable magnitude for - * @param strategy the strategy to get the allocatable magnitude for - * @param numToComplete the number of pending free magnitudes deallocations to complete, 0 to complete all (uint8 max 256) - */ - function getAllocatableMagnitude( - address operator, - IStrategy strategy, - uint16 numToComplete - ) external view returns (uint64); - - /** - * @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days - * @param operator the operator to check slashability for - * @param operatorSet the operatorSet to check slashability for - * @return bool if the operator is slashable by the operatorSet - */ - function isOperatorSlashable(address operator, OperatorSet memory operatorSet) external view returns (bool); - - /** - * @param operator the operator to get the slashable magnitude for - * @param strategies the strategies to get the slashable magnitude for - * - * @return operatorSets the operator sets the operator is a member of and the current slashable magnitudes for each strategy - */ - function getCurrentSlashableMagnitudes( - address operator, - IStrategy[] calldata strategies - ) external view returns (OperatorSet[] memory, uint64[][] memory); - - /** - * @param operator the operator to get the slashable magnitude for - * @param strategies the strategies to get the slashable magnitude for - * @param timestamp the timestamp to get the slashable magnitude for - * - * @return operatorSets the operator sets the operator is a member of and the slashable magnitudes for each strategy - */ - function getSlashableMagnitudes( - address operator, - IStrategy[] calldata strategies, - uint32 timestamp - ) external view returns (OperatorSet[] memory, uint64[][] memory); - - /** - * @param operator the operator to get the slashable ppm for - * @param operatorSet the operatorSet to get the slashable ppm for - * @param strategies the strategies to get the slashable ppm for - * @param timestamp the timestamp to get the slashable ppm for for - * @param linear whether the search should be linear (from the most recent) or binary - * - * @return slashablePPM the slashable ppm of the given list of strategies allocated to - * the given OperatorSet for the given operator and timestamp - */ - function getSlashablePPM( - address operator, - OperatorSet calldata operatorSet, - IStrategy[] calldata strategies, - uint32 timestamp, - bool linear - ) external view returns (uint24[] memory); - - /** - * @notice Returns the current total magnitudes of an operator for a given set of strategies - * @param operator the operator to get the total magnitude for - * @param strategies the strategies to get the total magnitudes for - * @return totalMagnitudes the total magnitudes for each strategy - */ - function getTotalMagnitudes( - address operator, - IStrategy[] calldata strategies - ) external view returns (uint64[] memory); - - /** - * @notice Returns the total magnitudes of an operator for a given set of strategies at a given timestamp - * @param operator the operator to get the total magnitude for - * @param strategies the strategies to get the total magnitudes for - * @param timestamp the timestamp to get the total magnitudes at - * @return totalMagnitudes the total magnitudes for each strategy - */ - function getTotalMagnitudesAtTimestamp( - address operator, - IStrategy[] calldata strategies, - uint32 timestamp - ) external view returns (uint64[] memory); - - /** - * @notice Returns the current total magnitude of an operator for a given strategy - * @param operator the operator to get the total magnitude for - * @param strategy the strategy to get the total magnitude for - * @return totalMagnitude the total magnitude for the strategy - */ - function getTotalMagnitude( - address operator, - IStrategy strategy - ) external view returns (uint64); - - /** - * @notice Returns the total magnitude of an operator for a given strategy at a given timestamp - * @param operator the operator to get the total magnitude for - * @param strategy the strategy to get the total magnitude for - * @param timestamp the timestamp to get the total magnitude at - * @return totalMagnitude the total magnitude for the strategy - */ - function getTotalMagnitudeAtTimestamp( - address operator, - IStrategy strategy, - uint32 timestamp - ) external view returns (uint64); - function operatorSaltIsSpent(address operator, bytes32 salt) external view returns (bool); function isMember(address operator, OperatorSet memory operatorSet) external view returns (bool); - function isOperatorSetAVS(address avs) external view returns (bool); + function isOperatorSetAVS( + address avs + ) external view returns (bool); function isOperatorSet(address avs, uint32 operatorSetId) external view returns (bool); @@ -463,13 +248,17 @@ interface IAVSDirectory is ISignatureUtils { * @notice Returns the number of operators registered to an operatorSet. * @param operatorSet The operatorSet to get the member count for */ - function getNumOperatorsInOperatorSet(OperatorSet memory operatorSet) external view returns (uint256); + function getNumOperatorsInOperatorSet( + OperatorSet memory operatorSet + ) external view returns (uint256); /** * @notice Returns the total number of operator sets an operator is registered to. * @param operator The operator address to query. */ - function inTotalOperatorSets(address operator) external view returns (uint256); + function inTotalOperatorSets( + address operator + ) external view returns (uint256); /** * @notice Calculates the digest hash to be signed by an operator to register with an AVS. @@ -516,20 +305,6 @@ interface IAVSDirectory is ISignatureUtils { uint256 expiry ) external view returns (bytes32); - /** - * @notice Calculates the digest hash to be signed by an operator to modify magnitude allocations - * @param operator The operator to allocate or deallocate magnitude for. - * @param allocations The magnitude allocations/deallocations to be made. - * @param salt A unique and single use value associated with the approver signature. - * @param expiry Time after which the approver's signature becomes invalid. - */ - function calculateMagnitudeAllocationDigestHash( - address operator, - MagnitudeAllocation[] calldata allocations, - bytes32 salt, - uint256 expiry - ) external view returns (bytes32); - /// @notice Getter function for the current EIP-712 domain separator for this contract. /// @dev The domain separator will change in the event of a fork that changes the ChainID. function domainSeparator() external view returns (bytes32); @@ -539,4 +314,10 @@ interface IAVSDirectory is ISignatureUtils { /// @notice The EIP-712 typehash for the OperatorSetRegistration struct used by the contract. function OPERATOR_SET_REGISTRATION_TYPEHASH() external view returns (bytes32); + + function operatorSetStatus( + address avs, + address operator, + uint32 operatorSetId + ) external view returns (bool registered, uint32 lastDeregisteredTimestamp); } diff --git a/src/contracts/interfaces/IAllocationManager.sol b/src/contracts/interfaces/IAllocationManager.sol new file mode 100644 index 000000000..b3449f5ff --- /dev/null +++ b/src/contracts/interfaces/IAllocationManager.sol @@ -0,0 +1,268 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity >=0.5.0; + +import {OperatorSet} from "./IAVSDirectory.sol"; +import "./IStrategy.sol"; +import "./ISignatureUtils.sol"; + +interface IAllocationManager is ISignatureUtils { + /** + * @notice struct used to modify the allocation of slashable magnitude to list of operatorSets + * @param strategy the strategy to allocate magnitude for + * @param expectedTotalMagnitude the expected total magnitude of the operator used to combat against race conditions with slashing + * @param operatorSets the operatorSets to allocate magnitude for + * @param magnitudes the magnitudes to allocate for each operatorSet + */ + struct MagnitudeAllocation { + IStrategy strategy; + uint64 expectedTotalMagnitude; + OperatorSet[] operatorSets; + uint64[] magnitudes; + } + + /** + * @notice struct used for pending free magnitude. Stored in (operator, strategy, operatorSet) mapping + * to be used in completeDeallocations. + * @param magnitudeDiff the amount of magnitude to deallocate + * @param completableTimestamp the timestamp at which the deallocation can be completed, 21 days from when queued + */ + struct PendingFreeMagnitude { + uint64 magnitudeDiff; + uint32 completableTimestamp; + } + + /** + * @notice Struct containing info regarding free allocatable magnitude. + * @param nextPendingFreeMagnitudeIndex The next available update index. + * @param freeMagnitude The total amount of free allocatable magnitude. + */ + struct OperatorMagnitudeInfo { + uint192 nextPendingFreeMagnitudeIndex; + uint64 freeMagnitude; + } + + /// @notice Emitted when an operator set is created by an AVS. + event OperatorSetCreated(OperatorSet operatorSet); + + /// @notice Emitted when an operator allocates slashable magnitude to an operator set + event MagnitudeAllocated( + address operator, + IStrategy strategy, + OperatorSet operatorSet, + uint64 magnitudeToAllocate, + uint32 effectTimestamp + ); + + /// @notice Emitted when an operator queues deallocations of slashable magnitude from an operator set + event MagnitudeQueueDeallocated( + address operator, + IStrategy strategy, + OperatorSet operatorSet, + uint64 magnitudeToDeallocate, + uint32 completableTimestamp + ); + + /// @notice Emitted when an operator completes deallocations of slashable magnitude from an operator set + /// and adds back magnitude to free allocatable magnitude + event MagnitudeDeallocationCompleted( + address operator, IStrategy strategy, OperatorSet operatorSet, uint64 freeMagnitudeAdded + ); + + /// @notice Emitted when an operator is slashed by an operator set for a strategy + event OperatorSlashed(address operator, uint32 operatorSetId, IStrategy strategy, uint16 bipsToSlash); + + /** + * + * EXTERNAL FUNCTIONS + * + */ + + /** + * @notice Modifies the propotions of slashable stake allocated to a list of operatorSets for a set of strategies + * @param operator address to modify allocations for + * @param allocations array of magnitude adjustments for multiple strategies and corresponding operator sets + * @param operatorSignature signature of the operator if msg.sender is not the operator + * @dev updates freeMagnitude for the updated strategies + * @dev must be called by the operator + */ + function modifyAllocations( + address operator, + MagnitudeAllocation[] calldata allocations, + SignatureWithSaltAndExpiry calldata operatorSignature + ) external; + + /** + * @notice For all pending deallocations that have become completable, their pending free magnitude can be + * added back to the free magnitude of the (operator, strategy) amount. This function takes a list of strategies + * and adds all completable deallocations for each strategy, updating the freeMagnitudes of the operator + * + * @param operator address to complete deallocations for + * @param strategies a list of strategies to complete deallocations for + * + * @dev can be called permissionlessly by anyone + */ + function updateFreeMagnitude( + address operator, + IStrategy[] calldata strategies, + uint16[] calldata numToComplete + ) external; + + /** + * @notice Called by an AVS to slash an operator for given operatorSetId, list of strategies, and bipsToSlash. + * For each given (operator, operatorSetId, strategy) tuple, bipsToSlash + * bips of the operatorSet's slashable stake allocation will be slashed + * + * @param operator the address to slash + * @param operatorSetId the ID of the operatorSet the operator is being slashed on behalf of + * @param strategies the set of strategies to slash + * @param bipsToSlash the number of bips to slash, this will be proportional to the + * operator's slashable stake allocation for the operatorSet + */ + function slashOperator( + address operator, + uint32 operatorSetId, + IStrategy[] calldata strategies, + uint16 bipsToSlash + ) external; + + /** + * @notice Called by an operator to cancel a salt that has been used to register with an AVS. + * + * @param salt A unique and single use value associated with the approver signature. + */ + function cancelSalt( + bytes32 salt + ) external; + + /** + * + * VIEW FUNCTIONS + * + */ + + /** + * @notice Get the allocatable magnitude for an operator and strategy based on number of pending deallocations + * that could be completed at the same time. This is the sum of freeMagnitude and the sum of all pending completable deallocations. + * @param operator the operator to get the allocatable magnitude for + * @param strategy the strategy to get the allocatable magnitude for + * @param numToComplete the number of pending free magnitudes deallocations to complete, 0 to complete all (uint8 max 256) + */ + function getAllocatableMagnitude( + address operator, + IStrategy strategy, + uint16 numToComplete + ) external view returns (uint64); + + /** + * @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days + * @param operator the operator to check slashability for + * @param operatorSet the operatorSet to check slashability for + * @return bool if the operator is slashable by the operatorSet + */ + function isOperatorSlashable(address operator, OperatorSet memory operatorSet) external view returns (bool); + + /** + * @param operator the operator to get the slashable magnitude for + * @param strategies the strategies to get the slashable magnitude for + * + * @return operatorSets the operator sets the operator is a member of and the current slashable magnitudes for each strategy + */ + function getCurrentSlashableMagnitudes( + address operator, + IStrategy[] calldata strategies + ) external view returns (OperatorSet[] memory, uint64[][] memory); + + /** + * @param operator the operator to get the slashable magnitude for + * @param strategies the strategies to get the slashable magnitude for + * @param timestamp the timestamp to get the slashable magnitude for + * + * @return operatorSets the operator sets the operator is a member of and the slashable magnitudes for each strategy + */ + function getSlashableMagnitudes( + address operator, + IStrategy[] calldata strategies, + uint32 timestamp + ) external view returns (OperatorSet[] memory, uint64[][] memory); + + /** + * @param operator the operator to get the slashable ppm for + * @param operatorSet the operatorSet to get the slashable ppm for + * @param strategies the strategies to get the slashable ppm for + * @param timestamp the timestamp to get the slashable ppm for for + * @param linear whether the search should be linear (from the most recent) or binary + * + * @return slashablePPM the slashable ppm of the given list of strategies allocated to + * the given OperatorSet for the given operator and timestamp + */ + function getSlashablePPM( + address operator, + OperatorSet calldata operatorSet, + IStrategy[] calldata strategies, + uint32 timestamp, + bool linear + ) external view returns (uint24[] memory); + + /** + * @notice Returns the current total magnitudes of an operator for a given set of strategies + * @param operator the operator to get the total magnitude for + * @param strategies the strategies to get the total magnitudes for + * @return totalMagnitudes the total magnitudes for each strategy + */ + function getTotalMagnitudes( + address operator, + IStrategy[] calldata strategies + ) external view returns (uint64[] memory); + + /** + * @notice Returns the total magnitudes of an operator for a given set of strategies at a given timestamp + * @param operator the operator to get the total magnitude for + * @param strategies the strategies to get the total magnitudes for + * @param timestamp the timestamp to get the total magnitudes at + * @return totalMagnitudes the total magnitudes for each strategy + */ + function getTotalMagnitudesAtTimestamp( + address operator, + IStrategy[] calldata strategies, + uint32 timestamp + ) external view returns (uint64[] memory); + + /** + * @notice Returns the current total magnitude of an operator for a given strategy + * @param operator the operator to get the total magnitude for + * @param strategy the strategy to get the total magnitude for + * @return totalMagnitude the total magnitude for the strategy + */ + function getTotalMagnitude(address operator, IStrategy strategy) external view returns (uint64); + + /** + * @notice Returns the total magnitude of an operator for a given strategy at a given timestamp + * @param operator the operator to get the total magnitude for + * @param strategy the strategy to get the total magnitude for + * @param timestamp the timestamp to get the total magnitude at + * @return totalMagnitude the total magnitude for the strategy + */ + function getTotalMagnitudeAtTimestamp( + address operator, + IStrategy strategy, + uint32 timestamp + ) external view returns (uint64); + + /** + * @notice Calculates the digest hash to be signed by an operator to modify magnitude allocations + * @param operator The operator to allocate or deallocate magnitude for. + * @param allocations The magnitude allocations/deallocations to be made. + * @param salt A unique and single use value associated with the approver signature. + * @param expiry Time after which the approver's signature becomes invalid. + */ + function calculateMagnitudeAllocationDigestHash( + address operator, + MagnitudeAllocation[] calldata allocations, + bytes32 salt, + uint256 expiry + ) external view returns (bytes32); + + /// @notice Getter function for the current EIP-712 domain separator for this contract. + /// @dev The domain separator will change in the event of a fork that changes the ChainID. + function domainSeparator() external view returns (bytes32); +} diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index 3155072ae..cc2be85aa 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -223,7 +223,9 @@ interface IDelegationManager is ISignatureUtils { * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. * @param delay the allocation delay in seconds */ - function initializeAllocationDelay(uint32 delay) external; + function initializeAllocationDelay( + uint32 delay + ) external; /** * @notice Updates an operator's stored `OperatorDetails`. @@ -350,7 +352,7 @@ interface IDelegationManager is ISignatureUtils { * The staker's scaling factor is updated here. * @param staker The address to increase the delegated shares for their operator. * @param strategy The strategy in which to increase the delegated shares. - * @param existingShares The number of shares the staker already has in the strategy. This is the shares amount stored in the + * @param existingShares The number of shares the staker already has in the strategy. This is the shares amount stored in the * StrategyManager/EigenPodManager for the staker's shares. * @param addedShares The number of shares to added to the staker's shares in the strategy. This amount will be scaled prior to adding * to the operator's scaled shares. @@ -365,7 +367,7 @@ interface IDelegationManager is ISignatureUtils { uint256 existingShares, uint256 addedShares ) external; - + /** * @notice Decreases a staker's delegated share balance in a strategy. Note that before removing from operator shares, * the delegated shares are scaled according to the operator's total magnitude as part of slashing accounting. Unlike @@ -378,11 +380,7 @@ interface IDelegationManager is ISignatureUtils { * @dev *If the staker is actively delegated*, then decreases the `staker`'s delegated scaled shares in `strategy` by `scaledShares`. Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ - function decreaseDelegatedShares( - address staker, - IStrategy strategy, - uint256 removedShares - ) external; + function decreaseDelegatedShares(address staker, IStrategy strategy, uint256 removedShares) external; /** * @notice returns the address of the operator that `staker` is delegated to. @@ -404,7 +402,9 @@ interface IDelegationManager is ISignatureUtils { * @notice Returns the AllocationDelayDetails struct associated with an `operator` * @dev If the operator has not set an allocation delay, then the `isSet` field will be `false`. */ - function operatorAllocationDelay(address operator) external view returns (AllocationDelayDetails memory); + function operatorAllocationDelay( + address operator + ) external view returns (AllocationDelayDetails memory); /** * @notice Returns the delegationApprover account for an operator diff --git a/src/contracts/interfaces/IRewardsCoordinator.sol b/src/contracts/interfaces/IRewardsCoordinator.sol index eefe1c6fe..a265c26cf 100644 --- a/src/contracts/interfaces/IRewardsCoordinator.sol +++ b/src/contracts/interfaces/IRewardsCoordinator.sol @@ -137,6 +137,7 @@ interface IRewardsCoordinator { * using `OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP` instead of `GENESIS_REWARDS_TIMESTAMP` and * `OPERATOR_SET_MAX_RETROACTIVE_LENGTH` instead of `MAX_RETROACTIVE_LENGTH` */ + struct OperatorSetRewardsSubmission { RewardType rewardType; uint32 operatorSetId; @@ -265,7 +266,7 @@ interface IRewardsCoordinator { /// @notice emitted when an operator commission is set for a specific OperatorSet and RewardType event OperatorCommissionUpdated( address indexed operator, - IAVSDirectory.OperatorSet indexed operatorSet, + OperatorSet indexed operatorSet, RewardType rewardType, uint16 newCommissionBips, uint32 effectTimestamp @@ -337,7 +338,7 @@ interface IRewardsCoordinator { /// NOTE: Currently unused and simply returns the globalOperatorCommissionBips value but will be used in future release function getOperatorCommissionBips( address operator, - IAVSDirectory.OperatorSet calldata operatorSet, + OperatorSet calldata operatorSet, RewardType rewardType ) external view returns (uint16); @@ -383,7 +384,7 @@ interface IRewardsCoordinator { /// @notice returns the length of the operator commission update history function getOperatorCommissionUpdateHistoryLength( address operator, - IAVSDirectory.OperatorSet calldata operatorSet, + OperatorSet calldata operatorSet, RewardType rewardType ) external view returns (uint256); @@ -423,7 +424,9 @@ interface IRewardsCoordinator { * @dev The tokens in the rewards submissions are sent to the `RewardsCoordinator` contract * @dev Strategies of each rewards submission must be in ascending order of addresses to check for duplicates */ - function rewardOperatorSetForRange(OperatorSetRewardsSubmission[] calldata rewardsSubmissions) external; + function rewardOperatorSetForRange( + OperatorSetRewardsSubmission[] calldata rewardsSubmissions + ) external; /** * @notice similar to `createAVSRewardsSubmission` except the rewards are split amongst *all* stakers @@ -434,17 +437,6 @@ interface IRewardsCoordinator { RewardsSubmission[] calldata rewardsSubmission ) external; - /** - * @notice Creates a new rewards submission for all earners across all AVSs. - * Earners in this case indicating all operators and their delegated stakers. Undelegated stake - * is not rewarded from this RewardsSubmission. This interface is only callable - * by the token hopper contract from the Eigen Foundation - * @param rewardsSubmissions The rewards submissions being created - */ - function createRewardsForAllEarners( - RewardsSubmission[] calldata rewardsSubmissions - ) external; - /** * @notice Claim rewards against a given root (read from _distributionRoots[claim.rootIndex]). * Earnings are cumulative so earners don't have to claim against all distribution roots they have earnings for, @@ -529,7 +521,7 @@ interface IRewardsCoordinator { * @dev The commission update takes effect after 7 days */ function setOperatorCommissionBips( - IAVSDirectory.OperatorSet calldata operatorSet, + OperatorSet calldata operatorSet, RewardType rewardType, uint16 commissionBips ) external returns (uint32); diff --git a/src/contracts/interfaces/IStrategyManager.sol b/src/contracts/interfaces/IStrategyManager.sol index e99c6981d..dd9183819 100644 --- a/src/contracts/interfaces/IStrategyManager.sol +++ b/src/contracts/interfaces/IStrategyManager.sol @@ -105,16 +105,18 @@ interface IStrategyManager { function removeShares(address staker, IStrategy strategy, uint256 shares) external; /// @notice Used by the DelegationManager to award a Staker some shares that have passed through the withdrawal queue - function addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external returns (uint256 existingShares); + function addShares( + address staker, + IERC20 token, + IStrategy strategy, + uint256 shares + ) external returns (uint256 existingShares); /// @notice Used by the DelegationManager to convert withdrawn descaled shares to tokens and send them to a recipient function withdrawSharesAsTokens(address recipient, IStrategy strategy, uint256 shares, IERC20 token) external; /// @notice Returns the current shares of `user` in `strategy` - function stakerStrategyShares( - address user, - IStrategy strategy - ) external view returns (uint256 shares); + function stakerStrategyShares(address user, IStrategy strategy) external view returns (uint256 shares); /** * @notice Get all details on the staker's deposits and corresponding shares diff --git a/src/contracts/libraries/SlashingConstants.sol b/src/contracts/libraries/SlashingConstants.sol index 3d501d409..cb92ae69b 100644 --- a/src/contracts/libraries/SlashingConstants.sol +++ b/src/contracts/libraries/SlashingConstants.sol @@ -6,7 +6,7 @@ import "../interfaces/IAVSDirectory.sol"; library SlashingConstants { /// @dev The initial total magnitude for an operator uint64 public constant INITIAL_TOTAL_MAGNITUDE = 1e18; - + /// @notice that stakerScalingFactor and totalMagnitude have initial default values to 1e18 as "1" /// to preserve precision with uint256 math. We use `PRECISION_FACTOR` where these variables are used /// and divide to represent as 1 diff --git a/src/contracts/libraries/Snapshots.sol b/src/contracts/libraries/Snapshots.sol index 7fee975e8..2938065bd 100644 --- a/src/contracts/libraries/Snapshots.sol +++ b/src/contracts/libraries/Snapshots.sol @@ -84,7 +84,9 @@ library Snapshots { /** * @dev Returns the value in the most recent snapshot, or zero if there are no snapshots. */ - function latest(History storage self) internal view returns (uint224) { + function latest( + History storage self + ) internal view returns (uint224) { uint256 pos = self._snapshots.length; return pos == 0 ? 0 : _unsafeAccess(self._snapshots, pos - 1)._value; } @@ -93,7 +95,9 @@ library Snapshots { * @dev Returns whether there is a snapshot in the structure (i.e. it is not empty), and if so the key and value * in the most recent snapshot. */ - function latestSnapshot(History storage self) internal view returns (bool exists, uint32 _key, uint224 _value) { + function latestSnapshot( + History storage self + ) internal view returns (bool exists, uint32 _key, uint224 _value) { uint256 pos = self._snapshots.length; if (pos == 0) { return (false, 0, 0); @@ -106,7 +110,9 @@ library Snapshots { /** * @dev Returns the number of snapshot. */ - function length(History storage self) internal view returns (uint256) { + function length( + History storage self + ) internal view returns (uint256) { return self._snapshots.length; } @@ -186,10 +192,7 @@ library Snapshots { /** * @dev Access an element of the array without performing bounds check. The position is assumed to be within bounds. */ - function _unsafeAccess( - Snapshot[] storage self, - uint256 pos - ) private pure returns (Snapshot storage result) { + function _unsafeAccess(Snapshot[] storage self, uint256 pos) private pure returns (Snapshot storage result) { assembly { mstore(0, self.slot) result.slot := add(keccak256(0, 0x20), pos) @@ -238,7 +241,10 @@ library Snapshots { * NOTE: That if value != 0 && pos == 0, then that means the value is the first snapshot and actually exists * a snapshot DNE iff value == 0 && pos == 0 => value == 0 */ - function upperLookupRecentWithPos(History storage self, uint32 key) internal view returns (uint224, uint256, uint256) { + function upperLookupRecentWithPos( + History storage self, + uint32 key + ) internal view returns (uint224, uint256, uint256) { uint256 len = self._snapshots.length; uint256 low = 0; @@ -261,11 +267,7 @@ library Snapshots { /// @notice WARNING: this function is only used because of the invariant property /// that from the current key, all future snapshotted magnitude values are strictly > current value. /// Use function with extreme care for other situations. - function decrementAtAndFutureSnapshots( - History storage self, - uint32 key, - uint224 decrementValue - ) internal { + function decrementAtAndFutureSnapshots(History storage self, uint32 key, uint224 decrementValue) internal { (uint224 value, uint256 pos, uint256 len) = upperLookupRecentWithPos(self, key); // if there is no snapshot, return diff --git a/src/contracts/permissions/Pausable.sol b/src/contracts/permissions/Pausable.sol index 99182c601..5b4aec5fc 100644 --- a/src/contracts/permissions/Pausable.sol +++ b/src/contracts/permissions/Pausable.sol @@ -51,7 +51,7 @@ contract Pausable is IPausable { modifier onlyWhenNotPaused( uint8 index ) { - require(!paused(index), CurrentlyPaused()); + require(!paused(index), "Pausable: index is paused"); _; } @@ -125,7 +125,10 @@ contract Pausable is IPausable { function _setPauserRegistry( IPauserRegistry newPauserRegistry ) internal { - require(address(newPauserRegistry) != address(0), InputAddressZero()); + require( + address(newPauserRegistry) != address(0), + "Pausable._setPauserRegistry: newPauserRegistry cannot be the zero address" + ); emit PauserRegistrySet(pauserRegistry, newPauserRegistry); pauserRegistry = newPauserRegistry; } diff --git a/src/contracts/permissions/PauserRegistry.sol b/src/contracts/permissions/PauserRegistry.sol index cc86944af..eaf4c9637 100644 --- a/src/contracts/permissions/PauserRegistry.sol +++ b/src/contracts/permissions/PauserRegistry.sol @@ -50,7 +50,7 @@ contract PauserRegistry is IPauserRegistry { function _setUnpauser( address newUnpauser ) internal { - require(newUnpauser != address(0), InputAddressZero()); + require(newUnpauser != address(0), "PauserRegistry._setUnpauser: zero address input"); emit UnpauserChanged(unpauser, newUnpauser); unpauser = newUnpauser; } diff --git a/src/contracts/pods/EigenPod.sol b/src/contracts/pods/EigenPod.sol index a1040ca66..5ed19d6c5 100644 --- a/src/contracts/pods/EigenPod.sol +++ b/src/contracts/pods/EigenPod.sol @@ -85,7 +85,10 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC modifier onlyWhenNotPaused( uint8 index ) { - require(!IPausable(address(eigenPodManager)).paused(index), CurrentlyPaused()); + require( + !IPausable(address(eigenPodManager)).paused(index), + "EigenPod.onlyWhenNotPaused: index is paused in EigenPodManager" + ); _; } @@ -105,7 +108,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC function initialize( address _podOwner ) external initializer { - require(_podOwner != address(0), InputAddressZero()); + require(_podOwner != address(0), "EigenPod.initialize: podOwner cannot be zero address"); podOwner = _podOwner; } @@ -568,7 +571,10 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC function _startCheckpoint( bool revertIfNoBalance ) internal { - require(currentCheckpointTimestamp == 0, IncompletePreviousCheckpoint()); + require( + currentCheckpointTimestamp == 0, + "EigenPod._startCheckpoint: must finish previous checkpoint before starting another" + ); // Prevent a checkpoint being completable twice in the same block. This prevents an edge case // where the second checkpoint would not be completable. @@ -651,7 +657,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC function _calculateValidatorPubkeyHash( bytes memory validatorPubkey ) internal pure returns (bytes32) { - require(validatorPubkey.length == 48, InvalidValidatorPubKeyLength()); + require(validatorPubkey.length == 48, "EigenPod._calculateValidatorPubkeyHash must be a 48-byte BLS public key"); return sha256(abi.encodePacked(validatorPubkey, bytes16(0))); } @@ -706,7 +712,10 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC function getParentBlockRoot( uint64 timestamp ) public view returns (bytes32) { - require(block.timestamp - timestamp < BEACON_ROOTS_HISTORY_BUFFER_LENGTH * 12, TimestampOutOfRange()); + require( + block.timestamp - timestamp < BEACON_ROOTS_HISTORY_BUFFER_LENGTH * 12, + "EigenPod.getParentBlockRoot: timestamp out of range" + ); (bool success, bytes memory result) = BEACON_ROOTS_ADDRESS.staticcall(abi.encode(timestamp)); diff --git a/src/contracts/pods/EigenPodManager.sol b/src/contracts/pods/EigenPodManager.sol index f55d6642f..88390c2cc 100644 --- a/src/contracts/pods/EigenPodManager.sol +++ b/src/contracts/pods/EigenPodManager.sol @@ -31,7 +31,7 @@ contract EigenPodManager is modifier onlyEigenPod( address podOwner ) { - require(address(ownerToPod[podOwner]) == msg.sender, OnlyEigenPod()); + require(address(ownerToPod[podOwner]) == msg.sender, "EigenPodManager.onlyEigenPod: not a pod"); _; } diff --git a/src/contracts/strategies/StrategyBase.sol b/src/contracts/strategies/StrategyBase.sol index 3e72d1848..c907daa7a 100644 --- a/src/contracts/strategies/StrategyBase.sol +++ b/src/contracts/strategies/StrategyBase.sol @@ -301,7 +301,9 @@ contract StrategyBase is Initializable, Pausable, IStrategy { * @notice convenience function for fetching the current total shares of `user` in this strategy, by * querying the `strategyManager` contract */ - function shares(address user) public view virtual returns (uint256) { + function shares( + address user + ) public view virtual returns (uint256) { return strategyManager.stakerStrategyShares(user, IStrategy(address(this))); } diff --git a/src/contracts/strategies/StrategyFactory.sol b/src/contracts/strategies/StrategyFactory.sol index 6486f1be1..fdb6bf7d1 100644 --- a/src/contracts/strategies/StrategyFactory.sol +++ b/src/contracts/strategies/StrategyFactory.sol @@ -48,8 +48,11 @@ contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable function deployNewStrategy( IERC20 token ) external onlyWhenNotPaused(PAUSED_NEW_STRATEGIES) returns (IStrategy newStrategy) { - require(!isBlacklisted[token], BlacklistedToken()); - require(deployedStrategies[token] == IStrategy(address(0)), StrategyAlreadyExists()); + require(!isBlacklisted[token], "StrategyFactory.deployNewStrategy: Token is blacklisted"); + require( + deployedStrategies[token] == IStrategy(address(0)), + "StrategyFactory.deployNewStrategy: Strategy already exists for token" + ); IStrategy strategy = IStrategy( address( new BeaconProxy( diff --git a/src/test/events/IAVSDirectoryEvents.sol b/src/test/events/IAVSDirectoryEvents.sol index eb76d867f..c176c0177 100644 --- a/src/test/events/IAVSDirectoryEvents.sol +++ b/src/test/events/IAVSDirectoryEvents.sol @@ -5,7 +5,7 @@ import "src/contracts/interfaces/IAVSDirectory.sol"; interface IAVSDirectoryEvents { /// @notice Emitted when an operator set is created by an AVS. - event OperatorSetCreated(IAVSDirectory.OperatorSet operatorSet); + event OperatorSetCreated(OperatorSet operatorSet); /** * @notice Emitted when an operator's registration status with an AVS id udpated @@ -14,10 +14,10 @@ interface IAVSDirectoryEvents { event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, IAVSDirectory.OperatorAVSRegistrationStatus status); /// @notice Emitted when an operator is added to an operator set. - event OperatorAddedToOperatorSet(address indexed operator, IAVSDirectory.OperatorSet operatorSet); + event OperatorAddedToOperatorSet(address indexed operator, OperatorSet operatorSet); /// @notice Emitted when an operator is removed from an operator set. - event OperatorRemovedFromOperatorSet(address indexed operator, IAVSDirectory.OperatorSet operatorSet); + event OperatorRemovedFromOperatorSet(address indexed operator, OperatorSet operatorSet); /// @notice Emitted when an AVS updates their metadata URI (Uniform Resource Identifier). /// @dev The URI is never stored; it is simply emitted through an event for off-chain indexing. diff --git a/src/test/events/IRewardsCoordinatorEvents.sol b/src/test/events/IRewardsCoordinatorEvents.sol index 9664ac4dc..30894a91b 100644 --- a/src/test/events/IRewardsCoordinatorEvents.sol +++ b/src/test/events/IRewardsCoordinatorEvents.sol @@ -39,7 +39,7 @@ interface IRewardsCoordinatorEvents { /// @notice emitted when an operator commission is set for a specific OperatorSet event OperatorCommissionUpdated( address indexed operator, - IAVSDirectory.OperatorSet indexed operatorSet, + OperatorSet indexed operatorSet, IRewardsCoordinator.RewardType rewardType, uint16 newCommissionBips, uint32 effectTimestamp diff --git a/src/test/integration/IntegrationDeployer.t.sol b/src/test/integration/IntegrationDeployer.t.sol index 016202060..2c573995b 100644 --- a/src/test/integration/IntegrationDeployer.t.sol +++ b/src/test/integration/IntegrationDeployer.t.sol @@ -256,7 +256,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory); + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( @@ -399,7 +399,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { ); // First, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory); + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( @@ -493,7 +493,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { ); // First, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory); + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( diff --git a/src/test/mocks/AVSDirectoryMock.sol b/src/test/mocks/AVSDirectoryMock.sol index a7219ef46..97dbac5e6 100644 --- a/src/test/mocks/AVSDirectoryMock.sol +++ b/src/test/mocks/AVSDirectoryMock.sol @@ -36,12 +36,6 @@ contract AVSDirectoryMock is IAVSDirectory, Test { function deregisterOperatorFromAVS(address operator) external {} - function modifyAllocations( - address operator, - MagnitudeAllocation[] calldata allocations, - SignatureWithSaltAndExpiry calldata operatorSignature - ) external {} - function updateFreeMagnitude( address operator, IStrategy[] calldata strategies, @@ -71,55 +65,6 @@ contract AVSDirectoryMock is IAVSDirectory, Test { function operatorSetMemberCount(address avs, uint32 operatorSetId) external view returns (uint256) {} - function getCurrentSlashableMagnitudes( - address operator, - IStrategy[] calldata strategies - ) external view returns (OperatorSet[] memory, uint64[][] memory) {} - - function getSlashableMagnitudes( - address operator, - IStrategy[] calldata strategies, - uint32 timestamp - ) external view returns (OperatorSet[] memory, uint64[][] memory) {} - - function getSlashablePPM( - address operator, - OperatorSet calldata operatorSet, - IStrategy[] calldata strategies, - uint32 timestamp, - bool linear - ) public view returns (uint24[] memory) {} - - function getAllocatableMagnitude( - address operator, - IStrategy strategy, - uint16 numToComplete - ) external view returns (uint64) {} - - function DEALLOCATION_DELAY() external view returns (uint32) {} - - function getTotalMagnitudes( - address operator, - IStrategy[] calldata strategies - ) external view returns (uint64[] memory) {} - - function getTotalMagnitudesAtTimestamp( - address operator, - IStrategy[] calldata strategies, - uint32 timestamp - ) external view returns (uint64[] memory) {} - - function getTotalMagnitude( - address operator, - IStrategy strategy - ) external view returns (uint64) {} - - function getTotalMagnitudeAtTimestamp( - address operator, - IStrategy strategy, - uint32 timestamp - ) external view returns (uint64) {} - function calculateOperatorAVSRegistrationDigestHash( address operator, address avs, @@ -141,13 +86,6 @@ contract AVSDirectoryMock is IAVSDirectory, Test { uint256 expiry ) external view returns (bytes32) {} - function calculateMagnitudeAllocationDigestHash( - address operator, - MagnitudeAllocation[] calldata allocations, - bytes32 salt, - uint256 expiry - ) external view returns (bytes32) {} - /// @notice Getter function for the current EIP-712 domain separator for this contract. /// @dev The domain separator will change in the event of a fork that changes the ChainID. function domainSeparator() external view returns (bytes32) {} @@ -158,7 +96,7 @@ contract AVSDirectoryMock is IAVSDirectory, Test { /// @notice The EIP-712 typehash for the OperatorSetRegistration struct used by the contract. function OPERATOR_SET_REGISTRATION_TYPEHASH() external view returns (bytes32) {} - function isMember(address operator, IAVSDirectory.OperatorSet memory operatorSet) external view returns (bool) {} + function isMember(address operator, OperatorSet memory operatorSet) external view returns (bool) {} function operatorSetsMemberOfAtIndex(address operator, uint256 index) external view returns (OperatorSet memory) {} @@ -179,4 +117,10 @@ contract AVSDirectoryMock is IAVSDirectory, Test { function getNumOperatorsInOperatorSet(OperatorSet memory operatorSet) external view returns (uint256) {} function inTotalOperatorSets(address operator) external view returns (uint256) {} + + function operatorSetStatus( + address avs, + address operator, + uint32 operatorSetId + ) external view returns (bool registered, uint32 lastDeregisteredTimestamp) {} } \ No newline at end of file diff --git a/src/test/unit/AVSDirectoryUnit.t.sol b/src/test/unit/AVSDirectoryUnit.t.sol index 27c3211bf..38007ff08 100644 --- a/src/test/unit/AVSDirectoryUnit.t.sol +++ b/src/test/unit/AVSDirectoryUnit.t.sol @@ -4,11 +4,14 @@ pragma solidity ^0.8.27; import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; import "src/contracts/core/DelegationManager.sol"; +import "src/contracts/core/AllocationManager.sol"; import "src/contracts/core/AVSDirectory.sol"; import "src/test/events/IAVSDirectoryEvents.sol"; import "src/test/utils/EigenLayerUnitTestSetup.sol"; +contract EmptyContract {} + /** * @notice Unit testing of the AVSDirectory contract. An AVSs' service manager contract will * call this to register an operator with the AVS. @@ -18,6 +21,8 @@ import "src/test/utils/EigenLayerUnitTestSetup.sol"; contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { uint256 internal constant MAX_PRIVATE_KEY = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140; + EmptyContract emptyContract; + // Contract under test AVSDirectory avsDirectory; AVSDirectory avsDirectoryImplementation; @@ -25,6 +30,8 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { // Contract dependencies DelegationManager delegationManager; DelegationManager delegationManagerImplementation; + AllocationManager allocationManager; + AllocationManager allocationManagerImplementation; // Delegation signer uint256 delegationSignerPrivateKey = uint256(0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80); @@ -52,7 +59,31 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { // Deploy DelegationManager implmentation and proxy initializeStrategiesToSetDelayBlocks = new IStrategy[](0); initializeWithdrawalDelayBlocks = new uint256[](0); - delegationManagerImplementation = new DelegationManager(strategyManagerMock, slasherMock, eigenPodManagerMock, avsDirectory); // TODO: fix + + emptyContract = new EmptyContract(); + + avsDirectory = AVSDirectory( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + delegationManager = DelegationManager( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + allocationManager = AllocationManager( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); + + allocationManagerImplementation = new AllocationManager(delegationManager, avsDirectory); + + delegationManagerImplementation = new DelegationManager( + strategyManagerMock, + slasherMock, + eigenPodManagerMock, + avsDirectory, + allocationManager + ); + + avsDirectoryImplementation = new AVSDirectory(delegationManager); + delegationManager = DelegationManager( address( new TransparentUpgradeableProxy( @@ -71,8 +102,6 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { ) ); - // Deploy AVSDirectory implmentation and proxy - avsDirectoryImplementation = new AVSDirectory(delegationManager); avsDirectory = AVSDirectory( address( new TransparentUpgradeableProxy( @@ -489,25 +518,25 @@ contract AVSDirectoryUnitTests_registerOperatorToOperatorSet is AVSDirectoryUnit for (uint256 i; i < oids.length; ++i) { cheats.expectEmit(true, false, false, false, address(avsDirectory)); - emit OperatorAddedToOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), oids[i])); + emit OperatorAddedToOperatorSet(operator, OperatorSet(address(this), oids[i])); } avsDirectory.registerOperatorToOperatorSets( operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) ); - IAVSDirectory.OperatorSet[] memory operatorSets = + OperatorSet[] memory operatorSets = avsDirectory.getOperatorSetsOfOperator(operator, 0, type(uint256).max); for (uint256 i; i < oids.length; ++i) { - assertTrue(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), oids[i]))); - assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), oids[i])), 1); + assertTrue(avsDirectory.isMember(operator, OperatorSet(address(this), oids[i]))); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(OperatorSet(address(this), oids[i])), 1); assertEq(operatorSets[i].avs, address(this)); assertEq(operatorSets[i].operatorSetId, oids[i]); } for (uint256 i; i < oids.length; ++i) { - address[] memory operators = avsDirectory.getOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), oids[i]), 0, type(uint256).max); + address[] memory operators = avsDirectory.getOperatorsInOperatorSet(OperatorSet(address(this), oids[i]), 0, type(uint256).max); assertEq(operators.length, 1); assertEq(operators[0], operator); } @@ -542,24 +571,24 @@ contract AVSDirectoryUnitTests_registerOperatorToOperatorSet is AVSDirectoryUnit _registerOperatorWithBaseDetails(operator); cheats.expectEmit(true, false, false, false, address(avsDirectory)); - emit OperatorAddedToOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), operatorSetId)); + emit OperatorAddedToOperatorSet(operator, OperatorSet(address(this), operatorSetId)); avsDirectory.registerOperatorToOperatorSets( operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) ); - assertTrue(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), operatorSetId))); + assertTrue(avsDirectory.isMember(operator, OperatorSet(address(this), operatorSetId))); - IAVSDirectory.OperatorSet memory operatorSet = avsDirectory.operatorSetsMemberOfAtIndex(operator, 0); + OperatorSet memory operatorSet = avsDirectory.operatorSetsMemberOfAtIndex(operator, 0); assertEq(operatorSet.avs, address(this)); assertEq(operatorSet.operatorSetId, oids[0]); - address operatorInSet = avsDirectory.operatorSetMemberAtIndex(IAVSDirectory.OperatorSet(address(this), operatorSetId), 0); + address operatorInSet = avsDirectory.operatorSetMemberAtIndex(OperatorSet(address(this), operatorSetId), 0); assertEq(operator, operatorInSet); assertEq(avsDirectory.inTotalOperatorSets(operator), 1); assertTrue(avsDirectory.operatorSaltIsSpent(operator, salt)); - assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), operatorSetId)), 1); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(OperatorSet(address(this), operatorSetId)), 1); } function testFuzz_Correctness_MultipleSets( @@ -591,26 +620,26 @@ contract AVSDirectoryUnitTests_registerOperatorToOperatorSet is AVSDirectoryUnit for (uint32 i = 1; i < totalSets + 1; ++i) { cheats.expectEmit(true, false, false, false, address(avsDirectory)); - emit OperatorAddedToOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), i)); + emit OperatorAddedToOperatorSet(operator, OperatorSet(address(this), i)); } avsDirectory.registerOperatorToOperatorSets( operator, oids, ISignatureUtils.SignatureWithSaltAndExpiry(abi.encodePacked(r, s, v), salt, expiry) ); - IAVSDirectory.OperatorSet[] memory operatorSets = + OperatorSet[] memory operatorSets = avsDirectory.getOperatorSetsOfOperator(operator, 0, type(uint256).max); for (uint32 i = 1; i < totalSets + 1; ++i) { - assertTrue(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), i))); - assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), i)), 1); + assertTrue(avsDirectory.isMember(operator, OperatorSet(address(this), i))); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(OperatorSet(address(this), i)), 1); assertEq(operatorSets[i - 1].avs, address(this)); assertEq(operatorSets[i - 1].operatorSetId, i); } for(uint32 i = 1; i < totalSets + 1; ++i) { - address[] memory operators = avsDirectory.getOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), i), 0, type(uint256).max); + address[] memory operators = avsDirectory.getOperatorsInOperatorSet(OperatorSet(address(this), i), 0, type(uint256).max); assertEq(operators.length, 1); assertEq(operators[0], operator); } @@ -676,33 +705,33 @@ contract AVSDirectoryUnitTests_forceDeregisterFromOperatorSets is AVSDirectoryUn // Register operator to operator sets _registerOperatorToOperatorSets(operatorPk, oids, salt, type(uint256).max); - assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), operatorSetId)), 1); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(OperatorSet(address(this), operatorSetId)), 1); // Deregister operator from operator sets ISignatureUtils.SignatureWithSaltAndExpiry memory emptySig; cheats.prank(operator); for (uint256 i = 0; i < oids.length; i++) { cheats.expectEmit(true, true, true, true, address(avsDirectory)); - emit OperatorRemovedFromOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), oids[i])); + emit OperatorRemovedFromOperatorSet(operator, OperatorSet(address(this), oids[i])); } avsDirectory.forceDeregisterFromOperatorSets(operator, address(this), oids, emptySig); for (uint32 i = 0; i < operatorSetsToAdd; i++) { assertFalse( - avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), oids[i])), + avsDirectory.isMember(operator, OperatorSet(address(this), oids[i])), "operator still in operator set" ); - address[] memory operators = avsDirectory.getOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), oids[i]), 0, type(uint256).max); + address[] memory operators = avsDirectory.getOperatorsInOperatorSet(OperatorSet(address(this), oids[i]), 0, type(uint256).max); assertEq(operators.length, 0); } - IAVSDirectory.OperatorSet[] memory operatorSets = + OperatorSet[] memory operatorSets = avsDirectory.getOperatorSetsOfOperator(operator, 0, type(uint256).max); assertEq(operatorSets.length, 0); assertEq(avsDirectory.inTotalOperatorSets(operator), 0); - assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), operatorSetId)), 0); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(OperatorSet(address(this), operatorSetId)), 0); } function testFuzz_revert_sigExpired(uint256 operatorPk, uint32 operatorSetId, bytes32 salt) public { @@ -770,13 +799,13 @@ contract AVSDirectoryUnitTests_forceDeregisterFromOperatorSets is AVSDirectoryUn for (uint256 i = 0; i < oids.length; i++) { cheats.expectEmit(true, true, true, true, address(avsDirectory)); - emit OperatorRemovedFromOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), oids[i])); + emit OperatorRemovedFromOperatorSet(operator, OperatorSet(address(this), oids[i])); } avsDirectory.forceDeregisterFromOperatorSets(operator, address(this), oids, operatorSig); for (uint32 i = 0; i < operatorSetsToAdd; i++) { - assertFalse(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), oids[i]))); + assertFalse(avsDirectory.isMember(operator, OperatorSet(address(this), oids[i]))); } } @@ -830,10 +859,10 @@ contract AVSDirectoryUnitTests_deregisterOperatorFromOperatorSets is AVSDirector // sanity assertEq(avsDirectory.inTotalOperatorSets(operator), 1); - assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), operatorSetId)), 1); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(OperatorSet(address(this), operatorSetId)), 1); cheats.expectEmit(true, false, false, false, address(avsDirectory)); - emit OperatorRemovedFromOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), operatorSetId)); + emit OperatorRemovedFromOperatorSet(operator, OperatorSet(address(this), operatorSetId)); avsDirectory.deregisterOperatorFromOperatorSets(operator, oids); @@ -842,8 +871,8 @@ contract AVSDirectoryUnitTests_deregisterOperatorFromOperatorSets is AVSDirector avsDirectory.operatorSetsMemberOfAtIndex(operator, 0); assertEq(avsDirectory.inTotalOperatorSets(operator), 0); - assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), operatorSetId)), 0); - assertEq(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), operatorSetId)), false); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(OperatorSet(address(this), operatorSetId)), 0); + assertEq(avsDirectory.isMember(operator, OperatorSet(address(this), operatorSetId)), false); } function testFuzz_Correctness_MultipleSets( @@ -865,7 +894,7 @@ contract AVSDirectoryUnitTests_deregisterOperatorFromOperatorSets is AVSDirector _registerOperatorToOperatorSets(operatorPk, oids, salt, expiry); for (uint32 i = 1; i < totalSets + 1; ++i) { - assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), i)), 1); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(OperatorSet(address(this), i)), 1); } address operator = cheats.addr(operatorPk); @@ -875,17 +904,17 @@ contract AVSDirectoryUnitTests_deregisterOperatorFromOperatorSets is AVSDirector for (uint32 i = 1; i < totalSets + 1; ++i) { cheats.expectEmit(true, false, false, false, address(avsDirectory)); - emit OperatorRemovedFromOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), i)); + emit OperatorRemovedFromOperatorSet(operator, OperatorSet(address(this), i)); } avsDirectory.deregisterOperatorFromOperatorSets(operator, oids); for (uint32 i = 1; i < totalSets + 1; ++i) { - assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), i)), 0); - assertEq(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), i)), false); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(OperatorSet(address(this), i)), 0); + assertEq(avsDirectory.isMember(operator, OperatorSet(address(this), i)), false); } - IAVSDirectory.OperatorSet[] memory operatorSets = + OperatorSet[] memory operatorSets = avsDirectory.getOperatorSetsOfOperator(operator, 0, type(uint256).max); assertEq(operatorSets.length, 0); @@ -902,7 +931,7 @@ contract AVSDirectoryUnitTests_createOperatorSet is AVSDirectoryUnitTests { for (uint32 i; i < totalSets; ++i) { oids[i] = i + 1; cheats.expectEmit(true, true, true, true, address(avsDirectory)); - emit OperatorSetCreated(IAVSDirectory.OperatorSet({avs: address(this), operatorSetId: i + 1})); + emit OperatorSetCreated(OperatorSet({avs: address(this), operatorSetId: i + 1})); } avsDirectory.createOperatorSets(oids); @@ -1087,7 +1116,7 @@ contract AVSDirectoryUnitTests_migrateOperatorsToOperatorSets is AVSDirectoryUni // Expect Emits cheats.expectEmit(true, true, true, true, address(avsDirectory)); - emit OperatorAddedToOperatorSet(operator, IAVSDirectory.OperatorSet(address(this), 1)); + emit OperatorAddedToOperatorSet(operator, OperatorSet(address(this), 1)); cheats.expectEmit(true, true, true, true, address(avsDirectory)); emit OperatorAVSRegistrationStatusUpdated( operator, address(this), IAVSDirectory.OperatorAVSRegistrationStatus.UNREGISTERED @@ -1099,12 +1128,12 @@ contract AVSDirectoryUnitTests_migrateOperatorsToOperatorSets is AVSDirectoryUni avsDirectory.migrateOperatorsToOperatorSets(operators, operatorSetIds); // Checks - assertTrue(avsDirectory.isMember(operator, IAVSDirectory.OperatorSet(address(this), 1))); + assertTrue(avsDirectory.isMember(operator, OperatorSet(address(this), 1))); assertTrue( avsDirectory.avsOperatorStatus(address(this), operator) == IAVSDirectory.OperatorAVSRegistrationStatus.UNREGISTERED ); - assertEq(avsDirectory.getNumOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), 1)), 1); + assertEq(avsDirectory.getNumOperatorsInOperatorSet(OperatorSet(address(this), 1)), 1); } function testFuzz_correctness_multiple( @@ -1140,7 +1169,7 @@ contract AVSDirectoryUnitTests_migrateOperatorsToOperatorSets is AVSDirectoryUni for (uint256 i = 0; i < numOperators; i++) { for (uint256 j = 0; j < oids.length; j++) { cheats.expectEmit(true, true, true, true, address(avsDirectory)); - emit OperatorAddedToOperatorSet(operators[i], IAVSDirectory.OperatorSet(address(this), oids[j])); + emit OperatorAddedToOperatorSet(operators[i], OperatorSet(address(this), oids[j])); } cheats.expectEmit(true, true, true, true, address(avsDirectory)); emit OperatorAVSRegistrationStatusUpdated( @@ -1156,19 +1185,19 @@ contract AVSDirectoryUnitTests_migrateOperatorsToOperatorSets is AVSDirectoryUni // Checks for (uint256 i = 0; i < numOperators; i++) { for (uint256 j = 0; j < oids.length; j++) { - assertTrue(avsDirectory.isMember(operators[i], IAVSDirectory.OperatorSet(address(this), oids[j]))); + assertTrue(avsDirectory.isMember(operators[i], OperatorSet(address(this), oids[j]))); } assertTrue( avsDirectory.avsOperatorStatus(address(this), operators[i]) == IAVSDirectory.OperatorAVSRegistrationStatus.UNREGISTERED ); - IAVSDirectory.OperatorSet[] memory opSets = avsDirectory.getOperatorSetsOfOperator(operators[i], 0, type(uint256).max); + OperatorSet[] memory opSets = avsDirectory.getOperatorSetsOfOperator(operators[i], 0, type(uint256).max); assertEq(oids.length, opSets.length); } for(uint256 i = 0; i < oids.length; i++) { - address[] memory operatorsInSet = avsDirectory.getOperatorsInOperatorSet(IAVSDirectory.OperatorSet(address(this), oids[i]), 0, type(uint256).max); + address[] memory operatorsInSet = avsDirectory.getOperatorsInOperatorSet(OperatorSet(address(this), oids[i]), 0, type(uint256).max); assertEq(operatorsInSet.length, operators.length); } } diff --git a/src/test/unit/RewardsCoordinatorUnit.t.sol b/src/test/unit/RewardsCoordinatorUnit.t.sol index eeccce9ae..198458ee2 100644 --- a/src/test/unit/RewardsCoordinatorUnit.t.sol +++ b/src/test/unit/RewardsCoordinatorUnit.t.sol @@ -2367,7 +2367,7 @@ contract RewardsCoordinatorUnitTests_operatorCommission is RewardsCoordinatorUni function testFuzz_operatorCommissionBips_EmptyHistory( address operator, - IAVSDirectory.OperatorSet calldata operatorSet, + OperatorSet calldata operatorSet, uint8 rewardTypeEnum ) public { rewardTypeEnum = uint8(bound(rewardTypeEnum, 0, numberOfRewardTypes - 1)); @@ -2384,7 +2384,7 @@ contract RewardsCoordinatorUnitTests_operatorCommission is RewardsCoordinatorUni function testFuzz_setOperatorCommissionBips_Reverts_WhenBipsGreaterThanMax( address operator, - IAVSDirectory.OperatorSet calldata operatorSet, + OperatorSet calldata operatorSet, uint8 rewardTypeEnum, uint16 newOperatorCommissionBips ) public filterFuzzedAddressInputs(operator) { @@ -2399,7 +2399,7 @@ contract RewardsCoordinatorUnitTests_operatorCommission is RewardsCoordinatorUni /// @notice test setting operator commission bips to a new value with empty history function testFuzz_setOperatorCommissionBips_EmptyHistory( address operator, - IAVSDirectory.OperatorSet calldata operatorSet, + OperatorSet calldata operatorSet, uint8 rewardTypeEnum, uint16 newOperatorCommissionBips, uint256 randSalt @@ -2444,7 +2444,7 @@ contract RewardsCoordinatorUnitTests_operatorCommission is RewardsCoordinatorUni /// @notice test setting operator commission bips to a new value with non empty history function testFuzz_setOperatorCommissionBips_WithHistory( address operator, - IAVSDirectory.OperatorSet calldata operatorSet, + OperatorSet calldata operatorSet, uint8 rewardTypeEnum, uint16 newOperatorCommissionBips, uint256 randSalt @@ -2515,7 +2515,7 @@ contract RewardsCoordinatorUnitTests_operatorCommission is RewardsCoordinatorUni /// has same effectTimestamp. Should overrwrite previous value function testFuzz_setOperatorCommissionBips_SameBlockUpdate( address operator, - IAVSDirectory.OperatorSet calldata operatorSet, + OperatorSet calldata operatorSet, uint8 rewardTypeEnum, uint16 pendingCommissionBips, uint16 overwriteCommissionBips From 9d967b71ee6ba67b4a6e7cc955b8058d02bb9439 Mon Sep 17 00:00:00 2001 From: "clandestine.eth" <96172957+0xClandestine@users.noreply.github.com> Date: Wed, 11 Sep 2024 10:46:15 -0400 Subject: [PATCH 21/47] feat: slashing magnitudes custom errors (#733) * wip: strings -> custom errors * chore: upgrade solc -> 0.8.27 * fix: compile warnings * refactor: alphabetical order errors * wip: strings -> custom errors * refactor: alphabetical order errors * wip: strings -> custom errors * wip: strings -> custom errors * chore: bump pragma -> ^0.8.27 * feat: review reconciliations * feat: review reconciliations * chore: forge fmt src/contracts * feat: review reconciliations * feat: review reconciliations --- .../devnet/M2_Deploy_From_Scratch.s.sol | 2 +- .../operatorSets/DeployStrategies.s.sol | 2 +- .../v040-rc0-holesky-preprod-pepe.s.sol | 69 +++++++++ .../v040-rc1-holesky-preprod-pepe.s.sol | 58 ++++++++ .../v040-rc2-holesky-preprod-pepe.s.sol | 58 ++++++++ .../v040-rc3-holesky-preprod-pepe.s.sol | 58 ++++++++ .../v040-rc4-holesky-preprod-pepe.s.sol | 79 ++++++++++ .../v040-rc5-holesky-preprod-pepe.s.sol | 79 ++++++++++ script/deploy/local/Deploy_From_Scratch.s.sol | 2 +- script/deploy/local/Upgrade.s.sol | 2 +- .../mainnet/Deploy_Strategy_Factory.s.sol | 2 +- script/deploy/mainnet/M1_Deploy.s.sol | 2 +- script/deploy/mainnet/M2Deploy.s.sol | 2 +- .../deploy/mainnet/M2_Mainnet_Upgrade.s.sol | 2 +- src/contracts/core/AVSDirectory.sol | 140 ++++++------------ src/contracts/core/AVSDirectoryStorage.sol | 1 + src/contracts/core/AllocationManager.sol | 54 ++----- .../core/AllocationManagerStorage.sol | 3 +- src/contracts/core/DelegationManager.sol | 111 +++++--------- src/contracts/core/RewardsCoordinator.sol | 49 ++---- src/contracts/core/StrategyManager.sol | 45 ++---- src/contracts/interfaces/IAVSDirectory.sol | 14 +- .../interfaces/IAllocationManager.sol | 23 +++ .../interfaces/IDelegationManager.sol | 56 ++++--- src/contracts/libraries/SlashingConstants.sol | 2 +- src/contracts/permissions/Pausable.sol | 7 +- src/contracts/permissions/PauserRegistry.sol | 2 +- src/contracts/pods/EigenPod.sol | 19 +-- src/contracts/pods/EigenPodManager.sol | 34 ++--- src/contracts/strategies/StrategyFactory.sol | 7 +- src/test/mocks/AVSDirectoryMock.sol | 1 + src/test/unit/DelegationUnit.t.sol | 4 +- src/test/unit/EigenPodManagerUnit.t.sol | 8 +- 33 files changed, 626 insertions(+), 371 deletions(-) create mode 100644 script/deploy/holesky/v040-rc0-holesky-preprod-pepe.s.sol create mode 100644 script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol create mode 100644 script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol create mode 100644 script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol create mode 100644 script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol create mode 100644 script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol diff --git a/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol b/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol index b0140e3cc..6aa80bfa1 100644 --- a/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol +++ b/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; diff --git a/script/deploy/devnet/operatorSets/DeployStrategies.s.sol b/script/deploy/devnet/operatorSets/DeployStrategies.s.sol index da3222c33..fbb127074 100644 --- a/script/deploy/devnet/operatorSets/DeployStrategies.s.sol +++ b/script/deploy/devnet/operatorSets/DeployStrategies.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "../../../utils/ExistingDeploymentParser.sol"; diff --git a/script/deploy/holesky/v040-rc0-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc0-holesky-preprod-pepe.s.sol new file mode 100644 index 000000000..dcda13066 --- /dev/null +++ b/script/deploy/holesky/v040-rc0-holesky-preprod-pepe.s.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "../../utils/ExistingDeploymentParser.sol"; + +/** + * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod + * anvil --fork-url $RPC_HOLESKY + * forge script script/deploy/holesky/EigenPod_Checkpoint_Deploy_Preprod.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv + * forge script script/deploy/holesky/EigenPod_Checkpoint_Deploy_Preprod.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv + */ +contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { + + address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + + function run() external virtual { + _parseInitialDeploymentParams( + "script/configs/holesky/eigenlayer_preprod.config.json" + ); + _parseDeployedContracts( + "script/configs/holesky/eigenlayer_addresses_preprod.config.json" + ); + + // START RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.startBroadcast(); + + emit log_named_address("Deployer Address", msg.sender); + + _upgradeEigenPodAndEPM(); + + // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.stopBroadcast(); + + // Sanity Checks + _verifyContractPointers(); + _verifyImplementations(); + _verifyContractsInitialized(); + _verifyInitializationParams(); + + logAndOutputContractAddresses("script/output/holesky/v040-rc0.output.json"); + } + + /** + * @notice Deploy EigenPod and EPM Implementation for Holesky preprod and upgrade the beacon/proxy + */ + function _upgradeEigenPodAndEPM() internal { + // Deploy implementations + eigenPodManagerImplementation = new EigenPodManager( + IETHPOSDeposit(ETHPOSDepositAddress), + eigenPodBeacon, + strategyManager, + slasher, + delegationManager + ); + eigenPodImplementation = new EigenPod( + IETHPOSDeposit(ETHPOSDepositAddress), + eigenPodManager, + EIGENPOD_GENESIS_TIME + ); + + // upgrade TUPS and UpgradeableBeacon + eigenLayerProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(eigenPodManager))), + address(eigenPodManagerImplementation) + ); + eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); + } +} diff --git a/script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol new file mode 100644 index 000000000..689dd59da --- /dev/null +++ b/script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "../../utils/ExistingDeploymentParser.sol"; + +/** + * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod + * anvil --fork-url $RPC_HOLESKY + * forge script script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv + * forge script script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv + */ +contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { + + address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + + function run() external virtual { + _parseInitialDeploymentParams( + "script/configs/holesky/eigenlayer_preprod.config.json" + ); + _parseDeployedContracts( + "script/configs/holesky/eigenlayer_addresses_preprod.config.json" + ); + + emit log_named_address("Deployer Address", msg.sender); + + // START RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.startBroadcast(); + + _upgradeEigenPods(); + + // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.stopBroadcast(); + + // Sanity Checks + _verifyContractPointers(); + _verifyImplementations(); + _verifyContractsInitialized(); + _verifyInitializationParams(); + + logAndOutputContractAddresses("script/output/holesky/v040-rc1.output.json"); + } + + /** + * @notice Deploy EigenPod Implementation for Holesky preprod and upgrade the beacon + */ + function _upgradeEigenPods() internal { + // Deploy implementation + eigenPodImplementation = new EigenPod( + IETHPOSDeposit(ETHPOSDepositAddress), + eigenPodManager, + EIGENPOD_GENESIS_TIME + ); + + // upgrade UpgradeableBeacon + eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); + } +} diff --git a/script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol new file mode 100644 index 000000000..eaac79fff --- /dev/null +++ b/script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "../../utils/ExistingDeploymentParser.sol"; + +/** + * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod + * anvil --fork-url $RPC_HOLESKY + * forge script script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv + * forge script script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv + */ +contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { + + address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + + function run() external virtual { + _parseInitialDeploymentParams( + "script/configs/holesky/eigenlayer_preprod.config.json" + ); + _parseDeployedContracts( + "script/configs/holesky/eigenlayer_addresses_preprod.config.json" + ); + + emit log_named_address("Deployer Address", msg.sender); + + // START RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.startBroadcast(); + + _upgradeEigenPods(); + + // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.stopBroadcast(); + + // Sanity Checks + _verifyContractPointers(); + _verifyImplementations(); + _verifyContractsInitialized(); + _verifyInitializationParams(); + + logAndOutputContractAddresses("script/output/holesky/v040-rc2.output.json"); + } + + /** + * @notice Deploy EigenPod Implementation for Holesky preprod and upgrade the beacon + */ + function _upgradeEigenPods() internal { + // Deploy implementation + eigenPodImplementation = new EigenPod( + IETHPOSDeposit(ETHPOSDepositAddress), + eigenPodManager, + EIGENPOD_GENESIS_TIME + ); + + // upgrade UpgradeableBeacon + eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); + } +} diff --git a/script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol new file mode 100644 index 000000000..7124f097f --- /dev/null +++ b/script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "../../utils/ExistingDeploymentParser.sol"; + +/** + * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod + * anvil --fork-url $RPC_HOLESKY + * forge script script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv + * forge script script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv + */ +contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { + + address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + + function run() external virtual { + _parseInitialDeploymentParams( + "script/configs/holesky/eigenlayer_preprod.config.json" + ); + _parseDeployedContracts( + "script/configs/holesky/eigenlayer_addresses_preprod.config.json" + ); + + emit log_named_address("Deployer Address", msg.sender); + + // START RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.startBroadcast(); + + _upgradeEigenPods(); + + // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.stopBroadcast(); + + // Sanity Checks + _verifyContractPointers(); + _verifyImplementations(); + _verifyContractsInitialized(); + _verifyInitializationParams(); + + logAndOutputContractAddresses("script/output/holesky/v040-rc3.output.json"); + } + + /** + * @notice Deploy EigenPod Implementation for Holesky preprod and upgrade the beacon + */ + function _upgradeEigenPods() internal { + // Deploy implementation + eigenPodImplementation = new EigenPod( + IETHPOSDeposit(ETHPOSDepositAddress), + eigenPodManager, + EIGENPOD_GENESIS_TIME + ); + + // upgrade UpgradeableBeacon + eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); + } +} diff --git a/script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol new file mode 100644 index 000000000..20243dd8b --- /dev/null +++ b/script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "../../utils/ExistingDeploymentParser.sol"; + +/** + * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod + * anvil --fork-url $RPC_HOLESKY + * forge script script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv + * forge script script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv + */ +contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { + + address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + + function run() external virtual { + _parseInitialDeploymentParams( + "script/configs/holesky/eigenlayer_preprod.config.json" + ); + _parseDeployedContracts( + "script/configs/holesky/eigenlayer_addresses_preprod.config.json" + ); + + emit log_named_address("Deployer Address", msg.sender); + + // START RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.startBroadcast(); + + _upgradeEigenPods(); + _upgradeEigenPodManager(); + + // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.stopBroadcast(); + + // Sanity Checks + _verifyContractPointers(); + _verifyImplementations(); + _verifyContractsInitialized(); + _verifyInitializationParams(); + + logAndOutputContractAddresses("script/output/holesky/v040-rc4.output.json"); + } + + /** + * @notice Deploy EigenPod Implementation for Holesky preprod and upgrade the beacon + */ + function _upgradeEigenPods() internal { + // Deploy implementation + eigenPodImplementation = new EigenPod( + IETHPOSDeposit(ETHPOSDepositAddress), + eigenPodManager, + EIGENPOD_GENESIS_TIME + ); + + // upgrade UpgradeableBeacon + eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); + } + + /** + * @notice Deploy EPM Implementation for Holesky preprod and upgrade its proxy + */ + function _upgradeEigenPodManager() internal { + // Deploy implementation + eigenPodManagerImplementation = new EigenPodManager( + IETHPOSDeposit(ETHPOSDepositAddress), + eigenPodBeacon, + strategyManager, + slasher, + delegationManager + ); + + // upgrade TUPS + eigenLayerProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(eigenPodManager))), + address(eigenPodManagerImplementation) + ); + } +} diff --git a/script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol new file mode 100644 index 000000000..849da6a29 --- /dev/null +++ b/script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "../../utils/ExistingDeploymentParser.sol"; + +/** + * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod + * anvil --fork-url $RPC_HOLESKY + * forge script script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv + * forge script script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv + */ +contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { + + address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; + + function run() external virtual { + _parseInitialDeploymentParams( + "script/configs/holesky/eigenlayer_preprod.config.json" + ); + _parseDeployedContracts( + "script/configs/holesky/eigenlayer_addresses_preprod.config.json" + ); + + emit log_named_address("Deployer Address", msg.sender); + + // START RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.startBroadcast(); + + _upgradeEigenPods(); + _upgradeEigenPodManager(); + + // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.stopBroadcast(); + + // Sanity Checks + _verifyContractPointers(); + _verifyImplementations(); + _verifyContractsInitialized(); + _verifyInitializationParams(); + + logAndOutputContractAddresses("script/output/holesky/v040-rc5.output.json"); + } + + /** + * @notice Deploy EigenPod Implementation for Holesky preprod and upgrade the beacon + */ + function _upgradeEigenPods() internal { + // Deploy implementation + eigenPodImplementation = new EigenPod( + IETHPOSDeposit(ETHPOSDepositAddress), + eigenPodManager, + EIGENPOD_GENESIS_TIME + ); + + // upgrade UpgradeableBeacon + eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); + } + + /** + * @notice Deploy EPM Implementation for Holesky preprod and upgrade its proxy + */ + function _upgradeEigenPodManager() internal { + // Deploy implementation + eigenPodManagerImplementation = new EigenPodManager( + IETHPOSDeposit(ETHPOSDepositAddress), + eigenPodBeacon, + strategyManager, + slasher, + delegationManager + ); + + // upgrade TUPS + eigenLayerProxyAdmin.upgrade( + TransparentUpgradeableProxy(payable(address(eigenPodManager))), + address(eigenPodManagerImplementation) + ); + } +} diff --git a/script/deploy/local/Deploy_From_Scratch.s.sol b/script/deploy/local/Deploy_From_Scratch.s.sol index 818790f05..2c507c7f3 100644 --- a/script/deploy/local/Deploy_From_Scratch.s.sol +++ b/script/deploy/local/Deploy_From_Scratch.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; diff --git a/script/deploy/local/Upgrade.s.sol b/script/deploy/local/Upgrade.s.sol index 22f038899..8127d4420 100644 --- a/script/deploy/local/Upgrade.s.sol +++ b/script/deploy/local/Upgrade.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "../../utils/ExistingDeploymentParser.sol"; diff --git a/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol b/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol index a056291c2..fa5d93707 100644 --- a/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol +++ b/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/Create2.sol"; import "../../utils/ExistingDeploymentParser.sol"; diff --git a/script/deploy/mainnet/M1_Deploy.s.sol b/script/deploy/mainnet/M1_Deploy.s.sol index 546b6f31d..cd0af7a58 100644 --- a/script/deploy/mainnet/M1_Deploy.s.sol +++ b/script/deploy/mainnet/M1_Deploy.s.sol @@ -1,5 +1,5 @@ // // SPDX-License-Identifier: BUSL-1.1 -// pragma solidity ^0.8.12; +// pragma solidity ^0.8.27; // import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; // import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; diff --git a/script/deploy/mainnet/M2Deploy.s.sol b/script/deploy/mainnet/M2Deploy.s.sol index d0a64dcd1..9c712d1cd 100644 --- a/script/deploy/mainnet/M2Deploy.s.sol +++ b/script/deploy/mainnet/M2Deploy.s.sol @@ -1,5 +1,5 @@ // // SPDX-License-Identifier: BUSL-1.1 -// pragma solidity ^0.8.12; +// pragma solidity ^0.8.27; // import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; // import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; diff --git a/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol b/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol index 7192f442c..21a9ab05f 100644 --- a/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol +++ b/script/deploy/mainnet/M2_Mainnet_Upgrade.s.sol @@ -1,5 +1,5 @@ // // SPDX-License-Identifier: BUSL-1.1 -// pragma solidity ^0.8.12; +// pragma solidity ^0.8.27; // import "../../utils/ExistingDeploymentParser.sol"; // import "../../utils/TimelockEncoding.sol"; diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 9e1af88fd..13b35f114 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -76,10 +76,7 @@ contract AVSDirectory is uint32[] calldata operatorSetIds ) external { for (uint256 i = 0; i < operatorSetIds.length; ++i) { - require( - !isOperatorSet[msg.sender][operatorSetIds[i]], - "AVSDirectory.createOperatorSet: operator set already exists" - ); + require(!isOperatorSet[msg.sender][operatorSetIds[i]], InvalidOperatorSet()); isOperatorSet[msg.sender][operatorSetIds[i]] = true; emit OperatorSetCreated(OperatorSet({avs: msg.sender, operatorSetId: operatorSetIds[i]})); } @@ -91,7 +88,7 @@ contract AVSDirectory is * @dev msg.sender must be the AVS. */ function becomeOperatorSetAVS() external { - require(!isOperatorSetAVS[msg.sender], "AVSDirectory.becomeOperatorSetAVS: already an operator set AVS"); + require(!isOperatorSetAVS[msg.sender], InvalidAVS()); isOperatorSetAVS[msg.sender] = true; emit AVSMigratedToOperatorSets(msg.sender); } @@ -112,15 +109,13 @@ contract AVSDirectory is uint32[][] calldata operatorSetIds ) external override onlyWhenNotPaused(PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS) { // Assert that the AVS is an operator set AVS. - require( - isOperatorSetAVS[msg.sender], "AVSDirectory.migrateOperatorsToOperatorSets: AVS is not an operator set AVS" - ); + require(isOperatorSetAVS[msg.sender], InvalidAVS()); for (uint256 i = 0; i < operators.length; i++) { // Assert that the operator is registered & has not been migrated. require( avsOperatorStatus[msg.sender][operators[i]] == OperatorAVSRegistrationStatus.REGISTERED, - "AVSDirectory.migrateOperatorsToOperatorSets: operator already migrated or not a legacy registered operator" + InvalidOperator() ); // Migrate operator to operator sets. @@ -152,24 +147,13 @@ contract AVSDirectory is ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature ) external override onlyWhenNotPaused(PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS) { // Assert operator's signature has not expired. - require( - operatorSignature.expiry >= block.timestamp, - "AVSDirectory.registerOperatorToOperatorSets: operator signature expired" - ); + require(operatorSignature.expiry >= block.timestamp, SignatureExpired()); // Assert `operator` is actually an operator. - require( - delegation.isOperator(operator), - "AVSDirectory.registerOperatorToOperatorSets: operator not registered to EigenLayer yet" - ); + require(delegation.isOperator(operator), OperatorNotRegistered()); // Assert that the AVS is an operator set AVS. - require( - isOperatorSetAVS[msg.sender], "AVSDirectory.registerOperatorToOperatorSets: AVS is not an operator set AVS" - ); + require(isOperatorSetAVS[msg.sender], InvalidAVS()); // Assert operator's signature `salt` has not already been spent. - require( - !operatorSaltIsSpent[operator][operatorSignature.salt], - "AVSDirectory.registerOperatorToOperatorSets: salt already spent" - ); + require(!operatorSaltIsSpent[operator][operatorSignature.salt], SaltSpent()); // Assert that `operatorSignature.signature` is a valid signature for operator set registrations. EIP1271SignatureUtils.checkSignature_EIP1271( @@ -206,37 +190,30 @@ contract AVSDirectory is uint32[] calldata operatorSetIds, ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature ) external override onlyWhenNotPaused(PAUSER_OPERATOR_REGISTER_DEREGISTER_TO_OPERATOR_SETS) { - // COMMENTED FOR CODESIZE - // if (operatorSignature.signature.length == 0) { - // require(msg.sender == operator, "AVSDirectory.forceDeregisterFromOperatorSets: caller must be operator"); - // } else { - // // Assert operator's signature has not expired. - // require( - // operatorSignature.expiry >= block.timestamp, - // "AVSDirectory.forceDeregisterFromOperatorSets: operator signature expired" - // ); - // // Assert operator's signature `salt` has not already been spent. - // require( - // !operatorSaltIsSpent[operator][operatorSignature.salt], - // "AVSDirectory.forceDeregisterFromOperatorSets: salt already spent" - // ); - - // // Assert that `operatorSignature.signature` is a valid signature for operator set deregistrations. - // EIP1271SignatureUtils.checkSignature_EIP1271( - // operator, - // calculateOperatorSetForceDeregistrationTypehash({ - // avs: avs, - // operatorSetIds: operatorSetIds, - // salt: operatorSignature.salt, - // expiry: operatorSignature.expiry - // }), - // operatorSignature.signature - // ); - - // // Mutate `operatorSaltIsSpent` to `true` to prevent future respending. - // operatorSaltIsSpent[operator][operatorSignature.salt] = true; - // } - // _deregisterFromOperatorSets(avs, operator, operatorSetIds); + if (operatorSignature.signature.length == 0) { + require(msg.sender == operator, InvalidOperator()); + } else { + // Assert operator's signature has not expired. + require(operatorSignature.expiry >= block.timestamp, SignatureExpired()); + // Assert operator's signature `salt` has not already been spent. + require(!operatorSaltIsSpent[operator][operatorSignature.salt], SaltSpent()); + + // Assert that `operatorSignature.signature` is a valid signature for operator set deregistrations. + EIP1271SignatureUtils.checkSignature_EIP1271( + operator, + calculateOperatorSetForceDeregistrationTypehash({ + avs: avs, + operatorSetIds: operatorSetIds, + salt: operatorSignature.salt, + expiry: operatorSignature.expiry + }), + operatorSignature.signature + ); + + // Mutate `operatorSaltIsSpent` to `true` to prevent future respending. + operatorSaltIsSpent[operator][operatorSignature.salt] = true; + } + _deregisterFromOperatorSets(avs, operator, operatorSetIds); } /** @@ -301,31 +278,19 @@ contract AVSDirectory is ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature ) external override onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { // Assert `operatorSignature.expiry` has not elapsed. - require( - operatorSignature.expiry >= block.timestamp, - "AVSDirectory.registerOperatorToAVS: operator signature expired" - ); + require(operatorSignature.expiry >= block.timestamp, SignatureExpired()); // Assert that the AVS is not an operator set AVS. - require(!isOperatorSetAVS[msg.sender], "AVSDirectory.registerOperatorToAVS: AVS is an operator set AVS"); + require(!isOperatorSetAVS[msg.sender], InvalidAVS()); // Assert that the `operator` is not actively registered to the AVS. - require( - avsOperatorStatus[msg.sender][operator] != OperatorAVSRegistrationStatus.REGISTERED, - "AVSDirectory.registerOperatorToAVS: operator already registered" - ); + require(avsOperatorStatus[msg.sender][operator] != OperatorAVSRegistrationStatus.REGISTERED, InvalidOperator()); // Assert `operator` has not already spent `operatorSignature.salt`. - require( - !operatorSaltIsSpent[operator][operatorSignature.salt], - "AVSDirectory.registerOperatorToAVS: salt already spent" - ); + require(!operatorSaltIsSpent[operator][operatorSignature.salt], SaltSpent()); // Assert `operator` is a registered operator. - require( - delegation.isOperator(operator), - "AVSDirectory.registerOperatorToAVS: operator not registered to EigenLayer yet" - ); + require(delegation.isOperator(operator), OperatorNotRegistered()); // Assert that `operatorSignature.signature` is a valid signature for the operator AVS registration. EIP1271SignatureUtils.checkSignature_EIP1271({ @@ -360,13 +325,10 @@ contract AVSDirectory is function deregisterOperatorFromAVS( address operator ) external override onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { - require( - avsOperatorStatus[msg.sender][operator] == OperatorAVSRegistrationStatus.REGISTERED, - "AVSDirectory.deregisterOperatorFromAVS: operator not registered" - ); - + // Assert that operator is registered for the AVS. + require(avsOperatorStatus[msg.sender][operator] == OperatorAVSRegistrationStatus.REGISTERED, InvalidOperator()); // Assert that the AVS is not an operator set AVS. - require(!isOperatorSetAVS[msg.sender], "AVSDirectory.deregisterOperatorFromAVS: AVS is an operator set AVS"); + require(!isOperatorSetAVS[msg.sender], InvalidAVS()); // Set the operator as deregistered avsOperatorStatus[msg.sender][operator] = OperatorAVSRegistrationStatus.UNREGISTERED; @@ -391,26 +353,19 @@ contract AVSDirectory is for (uint256 i = 0; i < operatorSetIds.length; ++i) { OperatorSet memory operatorSet = OperatorSet(avs, operatorSetIds[i]); - require( - isOperatorSet[avs][operatorSetIds[i]], - "AVSDirectory._registerOperatorToOperatorSets: invalid operator set" - ); + require(isOperatorSet[avs][operatorSetIds[i]], InvalidOperatorSet()); bytes32 encodedOperatorSet = _encodeOperatorSet(operatorSet); - require( - _operatorSetsMemberOf[operator].add(encodedOperatorSet), - "AVSDirectory._registerOperatorToOperatorSets: operator already registered to operator set" - ); + require(_operatorSetsMemberOf[operator].add(encodedOperatorSet), InvalidOperator()); _operatorSetMembers[encodedOperatorSet].add(operator); OperatorSetRegistrationStatus storage registrationStatus = operatorSetStatus[avs][operator][operatorSetIds[i]]; - require( - !registrationStatus.registered, - "AVSDirectory._registerOperatorToOperatorSets: operator already registered for operator set" - ); + + require(!registrationStatus.registered, InvalidOperator()); + registrationStatus.registered = true; emit OperatorAddedToOperatorSet(operator, operatorSet); @@ -431,10 +386,7 @@ contract AVSDirectory is bytes32 encodedOperatorSet = _encodeOperatorSet(operatorSet); - require( - _operatorSetsMemberOf[operator].remove(encodedOperatorSet), - "AVSDirectory._deregisterOperatorFromOperatorSet: operator not registered for operator set" - ); + require(_operatorSetsMemberOf[operator].remove(encodedOperatorSet), InvalidOperator()); _operatorSetMembers[encodedOperatorSet].remove(operator); diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index 46ced9b84..909b88656 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/AVSDirectoryStorage.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import "../interfaces/IDelegationManager.sol"; import "../interfaces/IAVSDirectory.sol"; abstract contract AVSDirectoryStorage is IAVSDirectory { diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index e88a7a8fe..a99757362 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; @@ -76,13 +76,8 @@ contract AllocationManager is IStrategy[] calldata strategies, uint16[] calldata numToComplete ) external { - require( - delegation.isOperator(operator), - "AllocationManager.updateFreeMagnitude: operator not registered to EigenLayer yet" - ); - require( - strategies.length == numToComplete.length, "AllocationManager.updateFreeMagnitude: array length mismatch" - ); + require(strategies.length == numToComplete.length, InputArrayLengthMismatch()); + require(delegation.isOperator(operator), OperatorNotRegistered()); for (uint256 i = 0; i < strategies.length; ++i) { _updateFreeMagnitude({operator: operator, strategy: strategies[i], numToComplete: numToComplete[i]}); } @@ -107,15 +102,9 @@ contract AllocationManager is if (msg.sender != operator) { _verifyOperatorSignature(operator, allocations, operatorSignature); } - require( - delegation.isOperator(operator), - "AllocationManager.modifyAllocations: operator not registered to EigenLayer yet" - ); + require(delegation.isOperator(operator), OperatorNotRegistered()); IDelegationManager.AllocationDelayDetails memory details = delegation.operatorAllocationDelay(operator); - require( - details.isSet, - "AllocationManager.modifyAllocations: operator must initialize allocation delay before modifying allocations" - ); + require(details.isSet, UninitializedAllocationDelay()); // effect timestamp for allocations to take effect. This is configurable by operators uint32 effectTimestamp = uint32(block.timestamp) + details.allocationDelay; // completable timestamp for deallocations @@ -133,10 +122,7 @@ contract AllocationManager is // where an operator gets slashed from an operatorSet and as a result all the configured allocations have larger // proprtional magnitudes relative to eachother. This check prevents any surprising behavior. uint64 currentTotalMagnitude = _getLatestTotalMagnitude(operator, allocations[i].strategy); - require( - currentTotalMagnitude == allocations[i].expectedTotalMagnitude, - "AllocationManager.modifyAllocations: current total magnitude does not match expected" - ); + require(currentTotalMagnitude == allocations[i].expectedTotalMagnitude, InvalidExpectedTotalMagnitude()); // 3. set allocations for the strategy after updating freeMagnitude _modifyAllocations({ @@ -167,10 +153,7 @@ contract AllocationManager is ) external { OperatorSet memory operatorSet = OperatorSet({avs: msg.sender, operatorSetId: operatorSetId}); bytes32 operatorSetKey = _encodeOperatorSet(operatorSet); - require( - isOperatorSlashable(operator, operatorSet), - "AllocationManager.slashOperator: operator not slashable for operatorSet" - ); + require(isOperatorSlashable(operator, operatorSet), InvalidOperator()); for (uint256 i = 0; i < strategies.length; ++i) { // 1. calculate slashed magnitude from current allocation @@ -273,10 +256,7 @@ contract AllocationManager is uint32 allocationEffectTimestamp, uint32 deallocationCompletableTimestamp ) internal { - require( - allocation.operatorSets.length == allocation.magnitudes.length, - "AllocationManager._modifyAllocations: operatorSets and magnitudes length mismatch" - ); + require(allocation.operatorSets.length == allocation.magnitudes.length, InputArrayLengthMismatch()); // OperatorSet[] calldata opSets = allocation.operatorSets; @@ -285,11 +265,11 @@ contract AllocationManager is for (uint256 i = 0; i < allocation.operatorSets.length; ++i) { require( avsDirectory.isOperatorSet(allocation.operatorSets[i].avs, allocation.operatorSets[i].operatorSetId), - "AllocationManager._modifyAllocations: operatorSet does not exist" + InvalidOperatorSet() ); // use encoding of operatorSet to ensure ordering and also used to use OperatorSet struct as key in mappings bytes32 operatorSetKey = _encodeOperatorSet(allocation.operatorSets[i]); - require(prevOperatorSet < operatorSetKey, "AllocationManager._modifyAllocations: operatorSets not ordered"); + require(prevOperatorSet < operatorSetKey, OperatorSetsNotInAscendingOrder()); prevOperatorSet = operatorSetKey; // Read current magnitude allocation including its respective array index and length. @@ -313,7 +293,7 @@ contract AllocationManager is require( numPendingAllocations + numPendingDeallocations < MAX_PENDING_UPDATES, - "AllocationManager._modifyAllocations: Cannot set magnitude with a pending allocation or deallocation" + PendingAllocationOrDeallocation() ); } @@ -346,7 +326,7 @@ contract AllocationManager is OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][allocation.strategy]; require( info.freeMagnitude >= allocation.magnitudes[i] - uint64(currentMagnitude), - "AllocationManager._modifyAllocations: insufficient available free magnitude to allocate" + InsufficientAllocatableMagnitude() ); info.freeMagnitude -= allocation.magnitudes[i] - uint64(currentMagnitude); } @@ -672,15 +652,9 @@ contract AllocationManager is SignatureWithSaltAndExpiry calldata operatorSignature ) internal { // check the signature expiry - require( - operatorSignature.expiry >= block.timestamp, - "AllocationManager._verifyOperatorSignature: operator signature expired" - ); + require(operatorSignature.expiry >= block.timestamp, SignatureExpired()); // Assert operator's signature cannot be replayed. - require( - !avsDirectory.operatorSaltIsSpent(operator, operatorSignature.salt), - "AllocationManager._verifyOperatorSignature: salt spent" - ); + require(!avsDirectory.operatorSaltIsSpent(operator, operatorSignature.salt), SaltSpent()); bytes32 digestHash = calculateMagnitudeAllocationDigestHash( operator, allocations, operatorSignature.salt, operatorSignature.expiry diff --git a/src/contracts/core/AllocationManagerStorage.sol b/src/contracts/core/AllocationManagerStorage.sol index e327f82a9..2b19fc551 100644 --- a/src/contracts/core/AllocationManagerStorage.sol +++ b/src/contracts/core/AllocationManagerStorage.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/IAVSDirectory.sol"; import "../interfaces/IAllocationManager.sol"; +import "../interfaces/IDelegationManager.sol"; import {Snapshots} from "../libraries/Snapshots.sol"; abstract contract AllocationManagerStorage is IAllocationManager { diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 6cf0a0b07..9ab665b9d 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -52,7 +52,10 @@ contract DelegationManager is // @notice Simple permission for functions that are only callable by the StrategyManager contract OR by the EigenPodManagerContract modifier onlyStrategyManagerOrEigenPodManager() { - require(msg.sender == address(strategyManager) || msg.sender == address(eigenPodManager), UnauthorizedCaller()); + require( + (msg.sender == address(strategyManager) || msg.sender == address(eigenPodManager)), + OnlyStrategyManagerOrEigenPodManager() + ); _; } @@ -116,7 +119,7 @@ contract DelegationManager is uint32 allocationDelay, string calldata metadataURI ) external { - require(!isDelegated(msg.sender), AlreadyDelegated()); + require(!isDelegated(msg.sender), ActivelyDelegated()); _setOperatorDetails(msg.sender, registeringOperatorDetails); SignatureWithExpiry memory emptySignatureAndExpiry; // delegate from the operator to themselves @@ -148,7 +151,7 @@ contract DelegationManager is function modifyOperatorDetails( OperatorDetails calldata newOperatorDetails ) external { - require(isOperator(msg.sender), "DelegationManager.modifyOperatorDetails: caller must be an operator"); + require(isOperator(msg.sender), OperatorNotRegistered()); _setOperatorDetails(msg.sender, newOperatorDetails); } @@ -159,7 +162,7 @@ contract DelegationManager is function updateOperatorMetadataURI( string calldata metadataURI ) external { - require(isOperator(msg.sender), "DelegationManager.updateOperatorMetadataURI: caller must be an operator"); + require(isOperator(msg.sender), OperatorNotRegistered()); emit OperatorMetadataURIUpdated(msg.sender, metadataURI); } @@ -181,8 +184,8 @@ contract DelegationManager is SignatureWithExpiry memory approverSignatureAndExpiry, bytes32 approverSalt ) external { - require(!isDelegated(msg.sender), AlreadyDelegated()); - require(isOperator(operator), OperatorDoesNotExist()); + require(!isDelegated(msg.sender), ActivelyDelegated()); + require(isOperator(operator), OperatorNotRegistered()); // go through the internal delegation flow, checking the `approverSignatureAndExpiry` if applicable _delegate(msg.sender, operator, approverSignatureAndExpiry, approverSalt); } @@ -213,8 +216,8 @@ contract DelegationManager is ) external { // check the signature expiry require(stakerSignatureAndExpiry.expiry >= block.timestamp, SignatureExpired()); - require(!isDelegated(staker), AlreadyDelegated()); - require(isOperator(operator), OperatorDoesNotExist()); + require(!isDelegated(staker), ActivelyDelegated()); + require(isOperator(operator), OperatorNotRegistered()); // calculate the digest hash, then increment `staker`'s nonce uint256 currentStakerNonce = stakerNonce[staker]; @@ -239,14 +242,14 @@ contract DelegationManager is function undelegate( address staker ) external onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) returns (bytes32[] memory withdrawalRoots) { - require(isDelegated(staker), "DelegationManager.undelegate: staker must be delegated to undelegate"); - require(!isOperator(staker), "DelegationManager.undelegate: operators cannot be undelegated"); - require(staker != address(0), "DelegationManager.undelegate: cannot undelegate zero address"); + require(isDelegated(staker), NotActivelyDelegated()); + require(!isOperator(staker), OperatorsCannotUndelegate()); + require(staker != address(0), InputAddressZero()); address operator = delegatedTo[staker]; require( msg.sender == staker || msg.sender == operator || msg.sender == _operatorDetails[operator].delegationApprover, - UnauthorizedCaller() + CallerCannotUndelegate() ); // Gather strategies and shares from the staker. Caluclate scaled shares to remove from operator during undelegation @@ -517,14 +520,8 @@ contract DelegationManager is function _initializeAllocationDelay( uint32 delay ) internal { - require( - isOperator(msg.sender), - "DelegationManager._initializeAllocationDelay: operator not registered to EigenLayer yet" - ); - require( - !_operatorAllocationDelay[msg.sender].isSet, - "DelegationManager._initializeAllocationDelay: allocation delay already set" - ); + require(isOperator(msg.sender), OperatorNotRegistered()); + require(!_operatorAllocationDelay[msg.sender].isSet, AllocationDelaySet()); _operatorAllocationDelay[msg.sender] = AllocationDelayDetails({isSet: true, allocationDelay: delay}); } @@ -558,7 +555,7 @@ contract DelegationManager is // check the signature expiry require(approverSignatureAndExpiry.expiry >= block.timestamp, SignatureExpired()); // check that the salt hasn't been used previously, then mark the salt as spent - require(!delegationApproverSaltIsSpent[_delegationApprover][approverSalt], SignatureSaltSpent()); + require(!delegationApproverSaltIsSpent[_delegationApprover][approverSalt], SaltSpent()); delegationApproverSaltIsSpent[_delegationApprover][approverSalt] = true; // forgefmt: disable-next-item @@ -589,7 +586,7 @@ contract DelegationManager is (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableShares(staker); uint64[] memory totalMagnitudes = allocationManager.getTotalMagnitudes(operator, strategies); - for (uint256 i = 0; i < strategies.length;) { + for (uint256 i = 0; i < strategies.length; ++i) { // update stakers scaling deposit scaling factor uint256 newStakerScalingFactor = _calculateStakerScalingFactor({ staker: staker, @@ -608,10 +605,6 @@ contract DelegationManager is shares: shares[i], totalMagnitude: totalMagnitudes[i] }); - - unchecked { - ++i; - } } } @@ -628,23 +621,13 @@ contract DelegationManager is IERC20[] calldata tokens, bool receiveAsTokens ) internal { + require(tokens.length == withdrawal.strategies.length, InputArrayLengthMismatch()); + bytes32 withdrawalRoot = calculateWithdrawalRoot(withdrawal); - require( - pendingWithdrawals[withdrawalRoot], "DelegationManager._completeQueuedWithdrawal: action is not in queue" - ); - require( - withdrawal.startTimestamp + minWithdrawalDelay <= block.number, - "DelegationManager._completeQueuedWithdrawal: minWithdrawalDelay period has not yet passed" - ); - require( - msg.sender == withdrawal.withdrawer, - "DelegationManager._completeQueuedWithdrawal: only withdrawer can complete action" - ); - require( - tokens.length == withdrawal.strategies.length, - "DelegationManager._completeQueuedWithdrawal: input length mismatch" - ); + require(pendingWithdrawals[withdrawalRoot], WithdrawalNotQueued()); + require(withdrawal.startTimestamp + minWithdrawalDelay <= block.number, WithdrawalDelayNotElapsed()); + require(msg.sender == withdrawal.withdrawer, WithdrawerNotCaller()); // read delegated operator's totalMagnitudes at time of withdrawal to scale shares again if any slashing has occurred // during withdrawal delay period @@ -679,10 +662,10 @@ contract DelegationManager is ) internal { // Finalize action by converting scaled shares to tokens for each strategy, or // by re-awarding shares in each strategy. - for (uint256 i = 0; i < withdrawal.strategies.length;) { + for (uint256 i = 0; i < withdrawal.strategies.length; ++i) { require( withdrawal.startTimestamp + strategyWithdrawalDelays[withdrawal.strategies[i]] <= block.timestamp, - "DelegationManager._completeReceiveAsTokens: withdrawalDelay period has not yet passed for this strategy" + WithdrawalDelayNotElapsed() ); // Take already scaled staker shares and scale again according to current operator totalMagnitude @@ -698,9 +681,6 @@ contract DelegationManager is shares: sharesToWithdraw, token: tokens[i] }); - unchecked { - ++i; - } } } @@ -719,10 +699,10 @@ contract DelegationManager is // read delegated operator for scaling and adding shares back if needed address currentOperator = delegatedTo[msg.sender]; - for (uint256 i = 0; i < withdrawal.strategies.length;) { + for (uint256 i = 0; i < withdrawal.strategies.length; ++i) { require( withdrawal.startTimestamp + strategyWithdrawalDelays[withdrawal.strategies[i]] <= block.number, - "DelegationManager._completeReceiveAsShares: withdrawalDelay period has not yet passed for this strategy" + WithdrawalDelayNotElapsed() ); // Take already scaled staker shares and scale again according to current operator totalMagnitude @@ -780,10 +760,6 @@ contract DelegationManager is addedShares: shares }); stakerScalingFactors[withdrawal.staker][withdrawal.strategies[i]] = newStakerScalingFactor; - - unchecked { - ++i; - } } } @@ -852,7 +828,7 @@ contract DelegationManager is // Remove shares from staker and operator // Each of these operations fail if we attempt to remove more shares than exist - for (uint256 i = 0; i < strategies.length;) { + for (uint256 i = 0; i < strategies.length; ++i) { // check sharesToWithdraw is valid // TODO maybe have a getter to get totalShares for all strategies, like getDelegatableShares // but for inputted strategies @@ -865,7 +841,7 @@ contract DelegationManager is } require( sharesToWithdraw[i] <= _getWithdrawableShares(staker, strategies[i], totalShares, totalMagnitudes[i]), - "DelegationManager._removeSharesAndQueueWithdrawal: shares to withdraw exceeds withdrawable shares" + WithdrawalExeedsMax() ); // calculate scaledShares to place into queue withdrawal and shares to decrement from SM/EPM uint256 stakerScalingFactor = _getStakerScalingFactor(staker, strategies[i]); @@ -907,10 +883,6 @@ contract DelegationManager is // this call will revert if `scaledShares[i]` exceeds the Staker's current shares in `strategies[i]` strategyManager.removeShares(staker, strategies[i], sharesToDecrement); } - - unchecked { - ++i; - } } // Create queue entry and increment withdrawal nonce @@ -962,10 +934,7 @@ contract DelegationManager is function _setMinWithdrawalDelayBlocks( uint256 _minWithdrawalDelayBlocks ) internal { - require( - _minWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, - "DelegationManager._setMinWithdrawalDelayBlocks: _minWithdrawalDelayBlocks cannot be > MAX_WITHDRAWAL_DELAY_BLOCKS" - ); + require(_minWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, WithdrawalDelayExeedsMax()); emit MinWithdrawalDelayBlocksSet(minWithdrawalDelayBlocks, _minWithdrawalDelayBlocks); minWithdrawalDelayBlocks = _minWithdrawalDelayBlocks; } @@ -984,7 +953,7 @@ contract DelegationManager is IStrategy strategy = _strategies[i]; uint256 prevStrategyWithdrawalDelayBlocks = strategyWithdrawalDelayBlocks[strategy]; uint256 newStrategyWithdrawalDelayBlocks = _withdrawalDelayBlocks[i]; - require(newStrategyWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, WithdrawalDelayExceedsMax()); + require(newStrategyWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, WithdrawalDelayExeedsMax()); // set the new withdrawal delay blocks strategyWithdrawalDelayBlocks[strategy] = newStrategyWithdrawalDelayBlocks; @@ -1002,19 +971,13 @@ contract DelegationManager is IStrategy[] calldata _strategies, uint256[] calldata _withdrawalDelays ) internal { - require( - _strategies.length == _withdrawalDelays.length, - "DelegationManager._setStrategyWithdrawalDelay: input length mismatch" - ); + require(_strategies.length == _withdrawalDelays.length, InputArrayLengthMismatch()); uint256 numStrats = _strategies.length; for (uint256 i = 0; i < numStrats; ++i) { IStrategy strategy = _strategies[i]; uint256 prevStrategyWithdrawalDelay = strategyWithdrawalDelays[strategy]; uint256 newStrategyWithdrawalDelay = _withdrawalDelays[i]; - require( - newStrategyWithdrawalDelay <= MAX_WITHDRAWAL_DELAY, - "DelegationManager._setStrategyWithdrawalDelay: _withdrawalDelay cannot be > MAX_WITHDRAWAL_DELAY" - ); + require(newStrategyWithdrawalDelay <= MAX_WITHDRAWAL_DELAY, WithdrawalDelayExeedsMax()); // set the new withdrawal delay (in seconds) strategyWithdrawalDelays[strategy] = newStrategyWithdrawalDelay; @@ -1283,13 +1246,9 @@ contract DelegationManager is shares = new uint256[](strategies.length); // 2. Place StrategyManager strats/shares in return arrays - for (uint256 i = 0; i < strategyManagerStrats.length;) { + for (uint256 i = 0; i < strategyManagerStrats.length; ++i) { strategies[i] = strategyManagerStrats[i]; shares[i] = strategyManagerShares[i]; - - unchecked { - ++i; - } } // 3. Place EigenPodManager strat/shares in return arrays diff --git a/src/contracts/core/RewardsCoordinator.sol b/src/contracts/core/RewardsCoordinator.sol index fef86e261..9a67ab988 100644 --- a/src/contracts/core/RewardsCoordinator.sol +++ b/src/contracts/core/RewardsCoordinator.sol @@ -224,10 +224,7 @@ contract RewardsCoordinator is uint256 nonce = submissionNonce[msg.sender]; bytes32 rewardsSubmissionHash = keccak256(abi.encode(msg.sender, nonce, rewardsSubmission)); - require( - avsDirectory.isOperatorSet(msg.sender, rewardsSubmission.operatorSetId), - "RewardsCoordinator.rewardOperatorSetForRange: invalid operatorSet" - ); + require(avsDirectory.isOperatorSet(msg.sender, rewardsSubmission.operatorSetId), InvalidOperatorSet()); _validateRewardsSubmission( rewardsSubmission.strategiesAndMultipliers, rewardsSubmission.token, @@ -301,7 +298,7 @@ contract RewardsCoordinator is if (claimer == address(0)) { claimer = earner; } - require(msg.sender == claimer, "RewardsCoordinator.processClaim: caller is not valid claimer"); + require(msg.sender == claimer, InvalidClaimer()); for (uint256 i = 0; i < claim.tokenIndices.length; ++i) { TokenTreeMerkleLeaf calldata tokenLeaf = claim.tokenLeaves[i]; @@ -352,7 +349,7 @@ contract RewardsCoordinator is function disableRoot( uint32 rootIndex ) external onlyWhenNotPaused(PAUSED_SUBMIT_DISABLE_ROOTS) onlyRewardsUpdater { - require(rootIndex < _distributionRoots.length, "RewardsCoordinator.disableRoot: invalid rootIndex"); + require(rootIndex < _distributionRoots.length, InvalidRootIndex()); DistributionRoot storage root = _distributionRoots[rootIndex]; require(!root.disabled, RootDisabled()); require(block.timestamp < root.activatedAt, RootActivated()); @@ -389,10 +386,7 @@ contract RewardsCoordinator is RewardType rewardType, uint16 commissionBips ) external returns (uint32 effectTimestamp) { - require( - commissionBips <= MAX_COMMISSION_BIPS, - "RewardsCoordinator.setOperatorCommissionBips: commissionBips too high" - ); + require(commissionBips <= MAX_COMMISSION_BIPS, CommissionBipsExceedsMax()); effectTimestamp = uint32(block.timestamp + OPERATOR_COMMISSION_ACTIVATION_DELAY); OperatorCommissionUpdate[] storage commissionHistory = operatorCommissionUpdates[msg.sender][operatorSet.avs][operatorSet.operatorSetId][rewardType]; @@ -477,30 +471,19 @@ contract RewardsCoordinator is uint32 maxRetroactiveLength, uint32 genesisRewardsTimestamp ) internal view { - require(strategiesAndMultipliers.length > 0, "RewardsCoordinator._validateRewardsSubmission: no strategies set"); - require(amount > 0, "RewardsCoordinator._validateRewardsSubmission: amount cannot be 0"); - require(amount <= MAX_REWARDS_AMOUNT, "RewardsCoordinator._validateRewardsSubmission: amount too large"); + require(strategiesAndMultipliers.length > 0, InputArrayLengthZero()); + require(amount > 0, AmountZero()); + require(amount <= MAX_REWARDS_AMOUNT, AmountExceedsMax()); + require(duration <= MAX_REWARDS_DURATION, DurationExceedsMax()); + require(duration % CALCULATION_INTERVAL_SECONDS == 0, DurationNotMultipleOfCalculationIntervalSeconds()); require( - duration <= MAX_REWARDS_DURATION, - "RewardsCoordinator._validateRewardsSubmission: duration exceeds MAX_REWARDS_DURATION" - ); - require( - duration % CALCULATION_INTERVAL_SECONDS == 0, - "RewardsCoordinator._validateRewardsSubmission: duration must be a multiple of CALCULATION_INTERVAL_SECONDS" - ); - require( - startTimestamp % CALCULATION_INTERVAL_SECONDS == 0, - "RewardsCoordinator._validateRewardsSubmission: startTimestamp must be a multiple of CALCULATION_INTERVAL_SECONDS" + startTimestamp % CALCULATION_INTERVAL_SECONDS == 0, StartTimestampNotMultipleOfCalculationIntervalSeconds() ); require( block.timestamp - maxRetroactiveLength <= startTimestamp && genesisRewardsTimestamp <= startTimestamp, - "RewardsCoordinator._validateRewardsSubmission: startTimestamp too far in the past" - ); - require( - startTimestamp <= block.timestamp + MAX_FUTURE_LENGTH, - "RewardsCoordinator._validateRewardsSubmission: startTimestamp too far in the future" + StartTimestampTooFarInPast() ); - require(rewardsSubmission.startTimestamp <= block.timestamp + MAX_FUTURE_LENGTH, StartTimestampTooFarInFuture()); + require(startTimestamp <= block.timestamp + MAX_FUTURE_LENGTH, StartTimestampTooFarInFuture()); // Require rewardsSubmission is for whitelisted strategy or beaconChainETHStrategy address currAddress = address(0); @@ -587,7 +570,7 @@ contract RewardsCoordinator is ) internal pure { // Validate index size so that there aren't multiple valid indices for the given proof // index can't be greater than 2**(earnerProof/32) - require(earnerLeafIndex < (1 << (earnerProof.length / 32)), InvalidClaimProof()); + require(earnerLeafIndex < (1 << (earnerProof.length / 32)), InvalidEarnerLeafIndex()); // Verify inclusion of earner leaf bytes32 earnerLeafHash = calculateEarnerLeafHash(earnerLeaf); // forgefmt: disable-next-item @@ -664,15 +647,11 @@ contract RewardsCoordinator is OperatorCommissionUpdate[] memory commissionHistory = operatorCommissionUpdates[operator][operatorSet.avs][operatorSet.operatorSetId][rewardType]; - for (uint256 i = commissionHistory.length; i > 0;) { + for (uint256 i = commissionHistory.length; i > 0; --i) { if (commissionHistory[i - 1].effectTimestamp <= uint32(block.timestamp)) { commissionBips = commissionHistory[i - 1].commissionBips; break; } - - unchecked { - --i; - } } return commissionBips; } diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index 943a361cb..e0fdc3bb1 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -42,10 +42,7 @@ contract StrategyManager is modifier onlyStrategiesWhitelistedForDeposit( IStrategy strategy ) { - require( - strategyIsWhitelistedForDeposit[strategy], - "StrategyManager.onlyStrategiesWhitelistedForDeposit: strategy not whitelisted" - ); + require(strategyIsWhitelistedForDeposit[strategy], StrategyNotWhitelisted()); _; } @@ -139,11 +136,8 @@ contract StrategyManager is uint256 expiry, bytes memory signature ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 shares) { - require( - !thirdPartyTransfersForbidden[strategy], - "StrategyManager.depositIntoStrategyWithSignature: third transfers disabled" - ); - require(expiry >= block.timestamp, "StrategyManager.depositIntoStrategyWithSignature: signature expired"); + require(!thirdPartyTransfersForbidden[strategy], ThirdPartyTransfersDisabled()); + require(expiry >= block.timestamp, SignatureExpired()); // calculate struct hash, then increment `staker`'s nonce uint256 nonce = nonces[staker]; bytes32 structHash = keccak256(abi.encode(DEPOSIT_TYPEHASH, staker, strategy, token, amount, nonce, expiry)); @@ -226,16 +220,13 @@ contract StrategyManager is ) external onlyStrategyWhitelister { require(strategiesToWhitelist.length == thirdPartyTransfersForbiddenValues.length, InputArrayLengthMismatch()); uint256 strategiesToWhitelistLength = strategiesToWhitelist.length; - for (uint256 i = 0; i < strategiesToWhitelistLength;) { + for (uint256 i = 0; i < strategiesToWhitelistLength; ++i) { // change storage and emit event only if strategy is not already in whitelist if (!strategyIsWhitelistedForDeposit[strategiesToWhitelist[i]]) { strategyIsWhitelistedForDeposit[strategiesToWhitelist[i]] = true; emit StrategyAddedToDepositWhitelist(strategiesToWhitelist[i]); _setThirdPartyTransfersForbidden(strategiesToWhitelist[i], thirdPartyTransfersForbiddenValues[i]); } - unchecked { - ++i; - } } } @@ -247,7 +238,7 @@ contract StrategyManager is IStrategy[] calldata strategiesToRemoveFromWhitelist ) external onlyStrategyWhitelister { uint256 strategiesToRemoveFromWhitelistLength = strategiesToRemoveFromWhitelist.length; - for (uint256 i = 0; i < strategiesToRemoveFromWhitelistLength;) { + for (uint256 i = 0; i < strategiesToRemoveFromWhitelistLength; ++i) { // change storage and emit event only if strategy is already in whitelist if (strategyIsWhitelistedForDeposit[strategiesToRemoveFromWhitelist[i]]) { strategyIsWhitelistedForDeposit[strategiesToRemoveFromWhitelist[i]] = false; @@ -255,9 +246,6 @@ contract StrategyManager is // Set mapping value to default false value _setThirdPartyTransfersForbidden(strategiesToRemoveFromWhitelist[i], false); } - unchecked { - ++i; - } } } @@ -280,15 +268,12 @@ contract StrategyManager is uint256 shares ) internal returns (uint256 existingShares) { // sanity checks on inputs - require(staker != address(0), "StrategyManager._addShares: staker cannot be zero address"); - require(shares != 0, "StrategyManager._addShares: shares should not be zero!"); + require(staker != address(0), StakerAddressZero()); + require(shares != 0, SharesAmountZero()); // if they dont have existing shares of this strategy, add it to their strats if (stakerStrategyShares[staker][strategy] == 0) { - require( - stakerStrategyList[staker].length < MAX_STAKER_STRATEGY_LIST_LENGTH, - "StrategyManager._addShares: deposit would exceed MAX_STAKER_STRATEGY_LIST_LENGTH" - ); + require(stakerStrategyList[staker].length < MAX_STAKER_STRATEGY_LIST_LENGTH, MaxStrategiesExceeded()); stakerStrategyList[staker].push(strategy); } @@ -345,12 +330,12 @@ contract StrategyManager is */ function _removeShares(address staker, IStrategy strategy, uint256 shareAmount) internal returns (bool) { // sanity checks on inputs - require(shareAmount != 0, "StrategyManager._removeShares: shareAmount should not be zero!"); + require(shareAmount != 0, SharesAmountZero()); //check that the user has sufficient shares uint256 userShares = stakerStrategyShares[staker][strategy]; - require(shareAmount <= userShares, "StrategyManager._removeShares: shareAmount too high"); + require(shareAmount <= userShares, SharesAmountTooHigh()); //unchecked arithmetic since we just checked this above unchecked { userShares = userShares - shareAmount; @@ -379,15 +364,12 @@ contract StrategyManager is //loop through all of the strategies, find the right one, then replace uint256 stratsLength = stakerStrategyList[staker].length; uint256 j = 0; - for (; j < stratsLength;) { + for (; j < stratsLength; ++j) { if (stakerStrategyList[staker][j] == strategy) { //replace the strategy with the last strategy in the list stakerStrategyList[staker][j] = stakerStrategyList[staker][stakerStrategyList[staker].length - 1]; break; } - unchecked { - ++j; - } } // if we didn't find the strategy, revert require(j != stratsLength, StrategyNotFound()); @@ -430,11 +412,8 @@ contract StrategyManager is uint256 strategiesLength = stakerStrategyList[staker].length; uint256[] memory shares = new uint256[](strategiesLength); - for (uint256 i = 0; i < strategiesLength;) { + for (uint256 i = 0; i < strategiesLength; ++i) { shares[i] = stakerStrategyShares[staker][stakerStrategyList[staker][i]]; - unchecked { - ++i; - } } return (stakerStrategyList[staker], shares); } diff --git a/src/contracts/interfaces/IAVSDirectory.sol b/src/contracts/interfaces/IAVSDirectory.sol index c619c5b29..7a32e090c 100644 --- a/src/contracts/interfaces/IAVSDirectory.sol +++ b/src/contracts/interfaces/IAVSDirectory.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.5.0; -import "./IDelegationManager.sol"; import "./ISignatureUtils.sol"; /// @notice Struct representing an operator set @@ -11,6 +10,19 @@ struct OperatorSet { } interface IAVSDirectory is ISignatureUtils { + /// @dev Thrown when an invalid AVS is provided. + error InvalidAVS(); + /// @dev Thrown when an invalid operator is provided. + error InvalidOperator(); + /// @dev Thrown when an invalid operator set is provided. + error InvalidOperatorSet(); + /// @dev Thrown when `operator` is not a registered operator. + error OperatorNotRegistered(); + /// @dev Thrown when attempting to spend a spent eip-712 salt. + error SaltSpent(); + /// @dev Thrown when attempting to use an expired eip-712 signature. + error SignatureExpired(); + /// @notice Enum representing the registration status of an operator with an AVS. /// @notice Only used by legacy M2 AVSs that have not integrated with operatorSets. enum OperatorAVSRegistrationStatus { diff --git a/src/contracts/interfaces/IAllocationManager.sol b/src/contracts/interfaces/IAllocationManager.sol index b3449f5ff..836781efa 100644 --- a/src/contracts/interfaces/IAllocationManager.sol +++ b/src/contracts/interfaces/IAllocationManager.sol @@ -6,6 +6,29 @@ import "./IStrategy.sol"; import "./ISignatureUtils.sol"; interface IAllocationManager is ISignatureUtils { + /// @dev Thrown when `operator` is not a registered operator. + error OperatorNotRegistered(); + /// @dev Thrown when two array parameters have mismatching lengths. + error InputArrayLengthMismatch(); + /// @dev Thrown when an operator's allocation delay has yet to be set. + error UninitializedAllocationDelay(); + /// @dev Thrown when provided `expectedTotalMagnitude` for a given allocation does not match `currentTotalMagnitude`. + error InvalidExpectedTotalMagnitude(); + /// @dev Thrown when an invalid operator set is provided. + error InvalidOperatorSet(); + /// @dev Thrown when an invalid operator is provided. + error InvalidOperator(); + /// @dev Thrown when provided operator sets are not in ascending order. + error OperatorSetsNotInAscendingOrder(); + /// @dev Thrown when an allocation is attempted for a given operator when they have pending allocations or deallocations. + error PendingAllocationOrDeallocation(); + /// @dev Thrown when an allocation is attempted that exceeds a given operators total allocatable magnitude. + error InsufficientAllocatableMagnitude(); + /// @dev Thrown when attempting to use an expired eip-712 signature. + error SignatureExpired(); + /// @dev Thrown when attempting to spend a spent eip-712 salt. + error SaltSpent(); + /** * @notice struct used to modify the allocation of slashable magnitude to list of operatorSets * @param strategy the strategy to allocate magnitude for diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index cc2be85aa..bfea60811 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -15,46 +15,42 @@ import "./ISignatureUtils.sol"; * - enabling a staker to undelegate its assets from the operator it is delegated to (performed as part of the withdrawal process, initiated through the StrategyManager) */ interface IDelegationManager is ISignatureUtils { - /// @dev Thrown when msg.sender is not allowed to call a function - error UnauthorizedCaller(); - - /// Delegation Status - - /// @dev Thrown when an account is currently delegated. - error AlreadyDelegated(); - /// @dev Thrown when an account is not currently delegated. - error NotCurrentlyDelegated(); - /// @dev Thrown when an operator attempts to undelegate. - error OperatorsCannotUndelegate(); - /// @dev Thrown when `operator` is not a registered operator. - error OperatorDoesNotExist(); - - /// Invalid Inputs - + /// @dev Thrown when an account is actively delegated. + error ActivelyDelegated(); + /// @dev Thrown when attempting to execute an action that was not queued. + error WithdrawalNotQueued(); + /// @dev Thrown when provided delay exceeds maximum. + error AllocationDelaySet(); + /// @dev Thrown when caller cannot undelegate on behalf of a staker. + error CallerCannotUndelegate(); /// @dev Thrown when two array parameters have mismatching lengths. error InputArrayLengthMismatch(); /// @dev Thrown when input arrays length is zero. error InputArrayLengthZero(); + /// @dev Thrown when `operator` is not a registered operator. + error OperatorNotRegistered(); + /// @dev Thrown when caller is neither the StrategyManager or EigenPodManager contract. + error OnlyStrategyManagerOrEigenPodManager(); + /// @dev Thrown when an operator attempts to undelegate. + error OperatorsCannotUndelegate(); + /// @dev Thrown when an account is not actively delegated. + error NotActivelyDelegated(); + /// @dev Thrown when attempting to spend a spent eip-712 salt. + error SaltSpent(); + /// @dev Thrown when attempting to use an expired eip-712 signature. + error SignatureExpired(); /// @dev Thrown when provided `stakerOptOutWindowBlocks` cannot decrease. error StakerOptOutWindowBlocksCannotDecrease(); /// @dev Thrown when provided `stakerOptOutWindowBlocks` exceeds maximum. error StakerOptOutWindowBlocksExceedsMax(); - /// @dev Thrown when provided delay exceeds maximum. - error WithdrawalDelayExceedsMax(); - - /// Signatures - - /// @dev Thrown when attempting to spend a spent eip-712 salt. - error SignatureSaltSpent(); - /// @dev Thrown when attempting to use an expired eip-712 signature. - error SignatureExpired(); - - /// Withdrawal Processing - - /// @dev Thrown when attempting to execute an action that was not queued. - error WithdrawalDoesNotExist(); /// @dev Thrown when attempting to withdraw before delay has elapsed. error WithdrawalDelayNotElapsed(); + /// @dev Thrown when provided delay exceeds maximum. + error WithdrawalDelayExeedsMax(); + /// @dev Thrown when a withdraw amount larger than max is attempted. + error WithdrawalExeedsMax(); + /// @dev Thrown when withdrawer is not the current caller. + error WithdrawerNotCaller(); /// @dev Thrown when `withdrawer` is not staker. error WithdrawerNotStaker(); diff --git a/src/contracts/libraries/SlashingConstants.sol b/src/contracts/libraries/SlashingConstants.sol index cb92ae69b..4e43cdb3c 100644 --- a/src/contracts/libraries/SlashingConstants.sol +++ b/src/contracts/libraries/SlashingConstants.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; +pragma solidity ^0.8.27; import "../interfaces/IAVSDirectory.sol"; diff --git a/src/contracts/permissions/Pausable.sol b/src/contracts/permissions/Pausable.sol index 5b4aec5fc..99182c601 100644 --- a/src/contracts/permissions/Pausable.sol +++ b/src/contracts/permissions/Pausable.sol @@ -51,7 +51,7 @@ contract Pausable is IPausable { modifier onlyWhenNotPaused( uint8 index ) { - require(!paused(index), "Pausable: index is paused"); + require(!paused(index), CurrentlyPaused()); _; } @@ -125,10 +125,7 @@ contract Pausable is IPausable { function _setPauserRegistry( IPauserRegistry newPauserRegistry ) internal { - require( - address(newPauserRegistry) != address(0), - "Pausable._setPauserRegistry: newPauserRegistry cannot be the zero address" - ); + require(address(newPauserRegistry) != address(0), InputAddressZero()); emit PauserRegistrySet(pauserRegistry, newPauserRegistry); pauserRegistry = newPauserRegistry; } diff --git a/src/contracts/permissions/PauserRegistry.sol b/src/contracts/permissions/PauserRegistry.sol index eaf4c9637..cc86944af 100644 --- a/src/contracts/permissions/PauserRegistry.sol +++ b/src/contracts/permissions/PauserRegistry.sol @@ -50,7 +50,7 @@ contract PauserRegistry is IPauserRegistry { function _setUnpauser( address newUnpauser ) internal { - require(newUnpauser != address(0), "PauserRegistry._setUnpauser: zero address input"); + require(newUnpauser != address(0), InputAddressZero()); emit UnpauserChanged(unpauser, newUnpauser); unpauser = newUnpauser; } diff --git a/src/contracts/pods/EigenPod.sol b/src/contracts/pods/EigenPod.sol index 5ed19d6c5..a1040ca66 100644 --- a/src/contracts/pods/EigenPod.sol +++ b/src/contracts/pods/EigenPod.sol @@ -85,10 +85,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC modifier onlyWhenNotPaused( uint8 index ) { - require( - !IPausable(address(eigenPodManager)).paused(index), - "EigenPod.onlyWhenNotPaused: index is paused in EigenPodManager" - ); + require(!IPausable(address(eigenPodManager)).paused(index), CurrentlyPaused()); _; } @@ -108,7 +105,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC function initialize( address _podOwner ) external initializer { - require(_podOwner != address(0), "EigenPod.initialize: podOwner cannot be zero address"); + require(_podOwner != address(0), InputAddressZero()); podOwner = _podOwner; } @@ -571,10 +568,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC function _startCheckpoint( bool revertIfNoBalance ) internal { - require( - currentCheckpointTimestamp == 0, - "EigenPod._startCheckpoint: must finish previous checkpoint before starting another" - ); + require(currentCheckpointTimestamp == 0, IncompletePreviousCheckpoint()); // Prevent a checkpoint being completable twice in the same block. This prevents an edge case // where the second checkpoint would not be completable. @@ -657,7 +651,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC function _calculateValidatorPubkeyHash( bytes memory validatorPubkey ) internal pure returns (bytes32) { - require(validatorPubkey.length == 48, "EigenPod._calculateValidatorPubkeyHash must be a 48-byte BLS public key"); + require(validatorPubkey.length == 48, InvalidValidatorPubKeyLength()); return sha256(abi.encodePacked(validatorPubkey, bytes16(0))); } @@ -712,10 +706,7 @@ contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingC function getParentBlockRoot( uint64 timestamp ) public view returns (bytes32) { - require( - block.timestamp - timestamp < BEACON_ROOTS_HISTORY_BUFFER_LENGTH * 12, - "EigenPod.getParentBlockRoot: timestamp out of range" - ); + require(block.timestamp - timestamp < BEACON_ROOTS_HISTORY_BUFFER_LENGTH * 12, TimestampOutOfRange()); (bool success, bytes memory result) = BEACON_ROOTS_ADDRESS.staticcall(abi.encode(timestamp)); diff --git a/src/contracts/pods/EigenPodManager.sol b/src/contracts/pods/EigenPodManager.sol index 88390c2cc..68702c01d 100644 --- a/src/contracts/pods/EigenPodManager.sol +++ b/src/contracts/pods/EigenPodManager.sol @@ -31,7 +31,7 @@ contract EigenPodManager is modifier onlyEigenPod( address podOwner ) { - require(address(ownerToPod[podOwner]) == msg.sender, "EigenPodManager.onlyEigenPod: not a pod"); + require(address(ownerToPod[podOwner]) == msg.sender, OnlyEigenPod()); _; } @@ -104,13 +104,8 @@ contract EigenPodManager is address podOwner, int256 sharesDelta ) external onlyEigenPod(podOwner) nonReentrant { - require( - podOwner != address(0), "EigenPodManager.recordBeaconChainETHBalanceUpdate: podOwner cannot be zero address" - ); - require( - sharesDelta % int256(GWEI_TO_WEI) == 0, - "EigenPodManager.recordBeaconChainETHBalanceUpdate: sharesDelta must be a whole Gwei amount" - ); + require(podOwner != address(0), InputAddressZero()); + require(sharesDelta % int256(GWEI_TO_WEI) == 0, SharesNotMultipleOfGwei()); int256 currentPodOwnerShares = podOwnerShares[podOwner]; int256 updatedPodOwnerShares = currentPodOwnerShares + sharesDelta; podOwnerShares[podOwner] = updatedPodOwnerShares; @@ -154,13 +149,10 @@ contract EigenPodManager is * @dev The delegation manager validates that the podOwner is not address(0) */ function removeShares(address podOwner, uint256 shares) external onlyDelegationManager { - require(int256(shares) >= 0, "EigenPodManager.removeShares: shares cannot be negative"); - require(shares % GWEI_TO_WEI == 0, "EigenPodManager.removeShares: shares must be a whole Gwei amount"); + require(int256(shares) >= 0, SharesNegative()); + require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); int256 updatedPodOwnerShares = podOwnerShares[podOwner] - int256(shares); - require( - updatedPodOwnerShares >= 0, - "EigenPodManager.removeShares: cannot result in pod owner having negative shares" - ); + require(updatedPodOwnerShares >= 0, SharesNegative()); podOwnerShares[podOwner] = updatedPodOwnerShares; emit NewTotalShares(podOwner, updatedPodOwnerShares); @@ -178,9 +170,9 @@ contract EigenPodManager is address podOwner, uint256 shares ) external onlyDelegationManager returns (uint256 increaseInDelegateableShares, uint256 existingPodShares) { - require(podOwner != address(0), "EigenPodManager.addShares: podOwner cannot be zero address"); - require(int256(shares) >= 0, "EigenPodManager.addShares: shares cannot be negative"); - require(shares % GWEI_TO_WEI == 0, "EigenPodManager.addShares: shares must be a whole Gwei amount"); + require(podOwner != address(0), InputAddressZero()); + require(int256(shares) >= 0, SharesNegative()); + require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); int256 currentPodOwnerShares = podOwnerShares[podOwner]; int256 updatedPodOwnerShares = currentPodOwnerShares + int256(shares); podOwnerShares[podOwner] = updatedPodOwnerShares; @@ -211,10 +203,10 @@ contract EigenPodManager is address destination, uint256 shares ) external onlyDelegationManager { - require(podOwner != address(0), "EigenPodManager.withdrawSharesAsTokens: podOwner cannot be zero address"); - require(destination != address(0), "EigenPodManager.withdrawSharesAsTokens: destination cannot be zero address"); - require(int256(shares) >= 0, "EigenPodManager.withdrawSharesAsTokens: shares cannot be negative"); - require(shares % GWEI_TO_WEI == 0, "EigenPodManager.withdrawSharesAsTokens: shares must be a whole Gwei amount"); + require(podOwner != address(0), InputAddressZero()); + require(destination != address(0), InputAddressZero()); + require(int256(shares) >= 0, SharesNegative()); + require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); int256 currentPodOwnerShares = podOwnerShares[podOwner]; // if there is an existing shares deficit, prioritize decreasing the deficit first diff --git a/src/contracts/strategies/StrategyFactory.sol b/src/contracts/strategies/StrategyFactory.sol index fdb6bf7d1..6486f1be1 100644 --- a/src/contracts/strategies/StrategyFactory.sol +++ b/src/contracts/strategies/StrategyFactory.sol @@ -48,11 +48,8 @@ contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable function deployNewStrategy( IERC20 token ) external onlyWhenNotPaused(PAUSED_NEW_STRATEGIES) returns (IStrategy newStrategy) { - require(!isBlacklisted[token], "StrategyFactory.deployNewStrategy: Token is blacklisted"); - require( - deployedStrategies[token] == IStrategy(address(0)), - "StrategyFactory.deployNewStrategy: Strategy already exists for token" - ); + require(!isBlacklisted[token], BlacklistedToken()); + require(deployedStrategies[token] == IStrategy(address(0)), StrategyAlreadyExists()); IStrategy strategy = IStrategy( address( new BeaconProxy( diff --git a/src/test/mocks/AVSDirectoryMock.sol b/src/test/mocks/AVSDirectoryMock.sol index 97dbac5e6..a5475f60f 100644 --- a/src/test/mocks/AVSDirectoryMock.sol +++ b/src/test/mocks/AVSDirectoryMock.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.9; import "forge-std/Test.sol"; import "../../contracts/interfaces/IAVSDirectory.sol"; +import "../../contracts/interfaces/IStrategy.sol"; contract AVSDirectoryMock is IAVSDirectory, Test { function createOperatorSets(uint32[] calldata operatorSetIds) external {} diff --git a/src/test/unit/DelegationUnit.t.sol b/src/test/unit/DelegationUnit.t.sol index 3fbd8db0e..b4ef25f2f 100644 --- a/src/test/unit/DelegationUnit.t.sol +++ b/src/test/unit/DelegationUnit.t.sol @@ -1,5 +1,5 @@ // // SPDX-License-Identifier: BUSL-1.1 -// pragma solidity ^0.8.12; +// pragma solidity ^0.8.27; // import "@openzeppelin/contracts/mocks/ERC1271WalletMock.sol"; // import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; @@ -2694,7 +2694,7 @@ // } // //TODO: verify that this check is even needed -// function test_undelegate_revert_zeroAddress() public { +// function test_undelegate_revert_InputAddressZero() public { // _registerOperatorWithBaseDetails(defaultOperator); // _delegateToOperatorWhoAcceptsAllStakers(address(0), defaultOperator); diff --git a/src/test/unit/EigenPodManagerUnit.t.sol b/src/test/unit/EigenPodManagerUnit.t.sol index 4ab147339..b1105e821 100644 --- a/src/test/unit/EigenPodManagerUnit.t.sol +++ b/src/test/unit/EigenPodManagerUnit.t.sol @@ -197,7 +197,7 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { eigenPodManager.addShares(defaultStaker, 0); } - function test_addShares_revert_podOwnerZeroAddress() public { + function test_addShares_revert_podOwnerInputAddressZero() public { cheats.prank(address(delegationManagerMock)); cheats.expectRevert("EigenPodManager.addShares: podOwner cannot be zero address"); eigenPodManager.addShares(address(0), 0); @@ -312,13 +312,13 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { WithdrawSharesAsTokens Tests ******************************************************************************/ - function test_withdrawSharesAsTokens_revert_podOwnerZeroAddress() public { + function test_withdrawSharesAsTokens_revert_podOwnerInputAddressZero() public { cheats.prank(address(delegationManagerMock)); cheats.expectRevert("EigenPodManager.withdrawSharesAsTokens: podOwner cannot be zero address"); eigenPodManager.withdrawSharesAsTokens(address(0), address(0), 0); } - function test_withdrawSharesAsTokens_revert_destinationZeroAddress() public { + function test_withdrawSharesAsTokens_revert_destinationInputAddressZero() public { cheats.prank(address(delegationManagerMock)); cheats.expectRevert("EigenPodManager.withdrawSharesAsTokens: destination cannot be zero address"); eigenPodManager.withdrawSharesAsTokens(defaultStaker, address(0), 0); @@ -403,7 +403,7 @@ contract EigenPodManagerUnitTests_BeaconChainETHBalanceUpdateTests is EigenPodMa eigenPodManager.recordBeaconChainETHBalanceUpdate(defaultStaker, 0); } - function test_recordBalanceUpdate_revert_zeroAddress() public { + function test_recordBalanceUpdate_revert_InputAddressZero() public { IEigenPod zeroAddressPod = _deployAndReturnEigenPodForStaker(address(0)); cheats.prank(address(zeroAddressPod)); cheats.expectRevert("EigenPodManager.recordBeaconChainETHBalanceUpdate: podOwner cannot be zero address"); From a82b0834234470b1d7c719959f25280f7274bc08 Mon Sep 17 00:00:00 2001 From: Michael Sun <35479365+8sunyuan@users.noreply.github.com> Date: Wed, 11 Sep 2024 14:42:29 -0400 Subject: [PATCH 22/47] feat: legacy withdrawals and cleanup for DelegationManager (#738) * feat: legacy withdrawals support * feat: remove thirdpartytransfersforbidden * chore: fmt core and cleanup --- .../operatorSets/DeployStrategies.s.sol | 3 +- .../holesky/Eigen_Strategy_Deploy.s.sol | 4 +- .../holesky/M2_Deploy_From_Scratch.s.sol | 4 +- script/utils/ExistingDeploymentParser.sol | 9 +- src/contracts/core/AVSDirectory.sol | 44 +-- src/contracts/core/AVSDirectoryStorage.sol | 4 +- src/contracts/core/AllocationManager.sol | 16 +- src/contracts/core/DelegationManager.sol | 279 +++++------------- .../core/DelegationManagerStorage.sol | 22 +- src/contracts/core/RewardsCoordinator.sol | 77 ++--- src/contracts/core/Slasher.sol | 24 +- src/contracts/core/StrategyManager.sol | 64 +--- src/contracts/core/StrategyManagerStorage.sol | 2 +- .../interfaces/IDelegationManager.sol | 34 --- src/contracts/interfaces/IStrategyFactory.sol | 8 +- src/contracts/interfaces/IStrategyManager.sol | 27 +- src/contracts/libraries/SlashingConstants.sol | 1 + src/contracts/strategies/StrategyFactory.sol | 16 +- src/test/events/IStrategyManagerEvents.sol | 3 - src/test/integration/IntegrationBase.t.sol | 3 +- .../integration/IntegrationDeployer.t.sol | 3 +- src/test/mocks/StrategyManagerMock.sol | 11 +- src/test/unit/AVSDirectoryUnit.t.sol | 2 - src/test/unit/StrategyFactoryUnit.t.sol | 25 +- src/test/unit/StrategyManagerUnit.t.sol | 66 +---- 25 files changed, 176 insertions(+), 575 deletions(-) diff --git a/script/deploy/devnet/operatorSets/DeployStrategies.s.sol b/script/deploy/devnet/operatorSets/DeployStrategies.s.sol index fbb127074..e2f05e806 100644 --- a/script/deploy/devnet/operatorSets/DeployStrategies.s.sol +++ b/script/deploy/devnet/operatorSets/DeployStrategies.s.sol @@ -22,14 +22,13 @@ contract DeployStrategies is ExistingDeploymentParser { uint256 batchSize = 100; IStrategy[] memory strategies = new IStrategy[](batchSize * batches); - bool[] memory falses = new bool[](batchSize); for (uint256 i = 0; i < batches; i++) { IStrategy[] memory strategiesJustDeployed = strategyDeployer.createManyStrategies(batchSize); for (uint256 j = 0; j < batchSize; j++) { strategies[i * batchSize + j] = strategiesJustDeployed[j]; } - strategyManager.addStrategiesToDepositWhitelist(strategiesJustDeployed, falses); + strategyManager.addStrategiesToDepositWhitelist(strategiesJustDeployed); } vm.stopBroadcast(); diff --git a/script/deploy/holesky/Eigen_Strategy_Deploy.s.sol b/script/deploy/holesky/Eigen_Strategy_Deploy.s.sol index 08123d3aa..c88c766f9 100644 --- a/script/deploy/holesky/Eigen_Strategy_Deploy.s.sol +++ b/script/deploy/holesky/Eigen_Strategy_Deploy.s.sol @@ -58,11 +58,9 @@ contract Eigen_Strategy_Deploy is ExistingDeploymentParser { function _verifyDeployment() internal { IStrategy[] memory strategies = new IStrategy[](1); strategies[0] = eigenStrategy; - bool[] memory thirdPartyTransfersForbiddenValues = new bool[](1); - thirdPartyTransfersForbiddenValues[0] = true; vm.prank(executorMultisig); - strategyManager.addStrategiesToDepositWhitelist(strategies, thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(strategies); vm.startPrank(msg.sender); EIGEN.approve(address(strategyManager), type(uint256).max); diff --git a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol index 69ee9a238..8158ecc7f 100644 --- a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol +++ b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol @@ -171,7 +171,6 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { uint256 numStrategiesToDeploy = strategiesToDeploy.length; // whitelist params IStrategy[] memory strategiesToWhitelist = new IStrategy[](numStrategiesToDeploy); - bool[] memory thirdPartyTransfersForbiddenValues = new bool[](numStrategiesToDeploy); for (uint256 i = 0; i < numStrategiesToDeploy; i++) { StrategyUnderlyingTokenConfig memory strategyConfig = strategiesToDeploy[i]; @@ -193,13 +192,12 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { ); strategiesToWhitelist[i] = strategy; - thirdPartyTransfersForbiddenValues[i] = false; deployedStrategyArray.push(strategy); } // Add strategies to whitelist and set whitelister to STRATEGY_MANAGER_WHITELISTER - strategyManager.addStrategiesToDepositWhitelist(strategiesToWhitelist, thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(strategiesToWhitelist); strategyManager.setStrategyWhitelister(STRATEGY_MANAGER_WHITELISTER); // Transfer ownership diff --git a/script/utils/ExistingDeploymentParser.sol b/script/utils/ExistingDeploymentParser.sol index 8cce266fc..aab8e3c37 100644 --- a/script/utils/ExistingDeploymentParser.sol +++ b/script/utils/ExistingDeploymentParser.sol @@ -479,10 +479,7 @@ contract ExistingDeploymentParser is Script, Test { delegationManager.initialize( address(0), eigenLayerPauserReg, - 0, - 0, // minWithdrawalDelayBLocks - initializeStrategiesToSetDelayBlocks, - initializeWithdrawalDelayBlocks + 0 ); // StrategyManager vm.expectRevert(bytes("Initializable: contract is already initialized")); @@ -573,10 +570,6 @@ contract ExistingDeploymentParser is Script, Test { delegationManager.paused() == DELEGATION_MANAGER_INIT_PAUSED_STATUS, "delegationManager: init paused status set incorrectly" ); - require( - delegationManager.minWithdrawalDelayBlocks() == DELEGATION_MANAGER_MIN_WITHDRAWAL_DELAY_BLOCKS, - "delegationManager: minWithdrawalDelayBlocks not set correctly" - ); // StrategyManager require( strategyManager.pauserRegistry() == eigenLayerPauserReg, diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 13b35f114..297589125 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -37,9 +37,7 @@ contract AVSDirectory is * @dev Initializes the immutable addresses of the strategy mananger, delegationManager, slasher, * and eigenpodManager contracts */ - constructor( - IDelegationManager _delegation - ) AVSDirectoryStorage(_delegation) { + constructor(IDelegationManager _delegation) AVSDirectoryStorage(_delegation) { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; } @@ -72,9 +70,7 @@ contract AVSDirectory is * @dev msg.sender must be the AVS. * @dev The AVS may create operator sets before it becomes an operator set AVS. */ - function createOperatorSets( - uint32[] calldata operatorSetIds - ) external { + function createOperatorSets(uint32[] calldata operatorSetIds) external { for (uint256 i = 0; i < operatorSetIds.length; ++i) { require(!isOperatorSet[msg.sender][operatorSetIds[i]], InvalidOperatorSet()); isOperatorSet[msg.sender][operatorSetIds[i]] = true; @@ -238,9 +234,7 @@ contract AVSDirectory is * * @dev Note that the `metadataURI` is *never stored* and is only emitted in the `AVSMetadataURIUpdated` event. */ - function updateAVSMetadataURI( - string calldata metadataURI - ) external override { + function updateAVSMetadataURI(string calldata metadataURI) external override { emit AVSMetadataURIUpdated(msg.sender, metadataURI); } @@ -249,9 +243,7 @@ contract AVSDirectory is * * @param salt A unique and single use value associated with the approver signature. */ - function cancelSalt( - bytes32 salt - ) external override { + function cancelSalt(bytes32 salt) external override { // Mutate `operatorSaltIsSpent` to `true` to prevent future spending. operatorSaltIsSpent[msg.sender][salt] = true; } @@ -322,9 +314,11 @@ contract AVSDirectory is * * @dev Only used by legacy M2 AVSs that have not integrated with operator sets. */ - function deregisterOperatorFromAVS( - address operator - ) external override onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { + function deregisterOperatorFromAVS(address operator) + external + override + onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) + { // Assert that operator is registered for the AVS. require(avsOperatorStatus[msg.sender][operator] == OperatorAVSRegistrationStatus.REGISTERED, InvalidOperator()); // Assert that the AVS is not an operator set AVS. @@ -461,9 +455,7 @@ contract AVSDirectory is * @notice Returns the number of operators registered to an operatorSet. * @param operatorSet The operatorSet to get the member count for */ - function getNumOperatorsInOperatorSet( - OperatorSet memory operatorSet - ) external view returns (uint256) { + function getNumOperatorsInOperatorSet(OperatorSet memory operatorSet) external view returns (uint256) { return _operatorSetMembers[_encodeOperatorSet(operatorSet)].length(); } @@ -471,9 +463,7 @@ contract AVSDirectory is * @notice Returns the total number of operator sets an operator is registered to. * @param operator The operator address to query. */ - function inTotalOperatorSets( - address operator - ) external view returns (uint256) { + function inTotalOperatorSets(address operator) external view returns (uint256) { return _operatorSetsMemberOf[operator].length(); } @@ -558,26 +548,20 @@ contract AVSDirectory is } /// @notice Returns an EIP-712 encoded hash struct. - function _calculateDigestHash( - bytes32 structHash - ) internal view returns (bytes32) { + function _calculateDigestHash(bytes32 structHash) internal view returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", _calculateDomainSeparator(), structHash)); } /// @dev Returns an `OperatorSet` encoded into a 32-byte value. /// @param operatorSet The `OperatorSet` to encode. - function _encodeOperatorSet( - OperatorSet memory operatorSet - ) internal pure returns (bytes32) { + function _encodeOperatorSet(OperatorSet memory operatorSet) internal pure returns (bytes32) { return bytes32(abi.encodePacked(operatorSet.avs, uint96(operatorSet.operatorSetId))); } /// @dev Returns an `OperatorSet` decoded from an encoded 32-byte value. /// @param encoded The encoded `OperatorSet` to decode. /// @dev Assumes `encoded` is encoded via `_encodeOperatorSet(operatorSet)`. - function _decodeOperatorSet( - bytes32 encoded - ) internal pure returns (OperatorSet memory) { + function _decodeOperatorSet(bytes32 encoded) internal pure returns (OperatorSet memory) { return OperatorSet({ avs: address(uint160(uint256(encoded) >> 96)), operatorSetId: uint32(uint256(encoded) & type(uint96).max) diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index 909b88656..7c5811dec 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/AVSDirectoryStorage.sol @@ -65,9 +65,7 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { /// @notice Mapping: operator => avs => operatorSetId => operator registration status mapping(address => mapping(address => mapping(uint32 => OperatorSetRegistrationStatus))) public operatorSetStatus; - constructor( - IDelegationManager _delegation - ) { + constructor(IDelegationManager _delegation) { delegation = _delegation; } diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index a99757362..999d8ef9d 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -217,9 +217,7 @@ contract AllocationManager is * * @param salt A unique and single use value associated with the approver signature. */ - function cancelSalt( - bytes32 salt - ) external override { + function cancelSalt(bytes32 salt) external override { // Mutate `operatorSaltIsSpent` to `true` to prevent future spending. operatorSaltIsSpent[msg.sender][salt] = true; } @@ -700,26 +698,20 @@ contract AllocationManager is } /// @notice Returns an EIP-712 encoded hash struct. - function _calculateDigestHash( - bytes32 structHash - ) internal view returns (bytes32) { + function _calculateDigestHash(bytes32 structHash) internal view returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", _calculateDomainSeparator(), structHash)); } /// @dev Returns an `OperatorSet` encoded into a 32-byte value. /// @param operatorSet The `OperatorSet` to encode. - function _encodeOperatorSet( - OperatorSet memory operatorSet - ) internal pure returns (bytes32) { + function _encodeOperatorSet(OperatorSet memory operatorSet) internal pure returns (bytes32) { return bytes32(abi.encodePacked(operatorSet.avs, uint96(operatorSet.operatorSetId))); } /// @dev Returns an `OperatorSet` decoded from an encoded 32-byte value. /// @param encoded The encoded `OperatorSet` to decode. /// @dev Assumes `encoded` is encoded via `_encodeOperatorSet(operatorSet)`. - function _decodeOperatorSet( - bytes32 encoded - ) internal pure returns (OperatorSet memory) { + function _decodeOperatorSet(bytes32 encoded) internal pure returns (OperatorSet memory) { return OperatorSet({ avs: address(uint160(uint256(encoded) >> 96)), operatorSetId: uint32(uint256(encoded) & type(uint96).max) diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 9ab665b9d..3de7a8001 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -38,14 +38,14 @@ contract DelegationManager is // @dev Chain ID at the time of contract deployment uint256 internal immutable ORIGINAL_CHAIN_ID; - // @dev Maximum Value for `stakerOptOutWindowBlocks`. Approximately equivalent to 6 months in blocks. - uint256 public constant MAX_STAKER_OPT_OUT_WINDOW_BLOCKS = (180 days) / 12; + /// @dev The minimum number of blocks to complete a withdrawal of a strategy. 50400 * 12 seconds = 1 week + uint256 public constant LEGACY_MIN_WITHDRAWAL_DELAY_BLOCKS = 50_400; - // The max configurable withdrawal delay per strategy. Set to 30 days in seconds - uint256 public constant MAX_WITHDRAWAL_DELAY = 30 days; + /// @dev Wed Jan 01 2025 17:00:00 GMT+0000, timestamp used to check whether a pending withdrawal + /// should be processed as legacy M2 or with slashing considered. + uint32 public constant LEGACY_WITHDRAWALS_TIMESTAMP = 1_735_750_800; - // the number of 12-second blocks in 30 days (60 * 60 * 24 * 30 / 12 = 216,000) - uint256 public constant MAX_WITHDRAWAL_DELAY_BLOCKS = MAX_WITHDRAWAL_DELAY / 12; + uint32 public constant WITHDRAWAL_DELAY = SlashingConstants.DEALLOCATION_DELAY; /// @notice Canonical, virtual beacon chain ETH strategy IStrategy public constant beaconChainETHStrategy = IStrategy(0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0); @@ -86,16 +86,11 @@ contract DelegationManager is function initialize( address initialOwner, IPauserRegistry _pauserRegistry, - uint256 initialPausedStatus, - uint256 _minWithdrawalDelayBlocks, - IStrategy[] calldata _strategies, - uint256[] calldata _withdrawalDelayBlocks + uint256 initialPausedStatus ) external initializer { _initializePauser(_pauserRegistry, initialPausedStatus); _DOMAIN_SEPARATOR = _calculateDomainSeparator(); _transferOwnership(initialOwner); - _setMinWithdrawalDelayBlocks(_minWithdrawalDelayBlocks); - _setStrategyWithdrawalDelayBlocks(_strategies, _withdrawalDelayBlocks); } /** @@ -136,9 +131,7 @@ contract DelegationManager is * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. * @param delay the allocation delay in seconds */ - function initializeAllocationDelay( - uint32 delay - ) external { + function initializeAllocationDelay(uint32 delay) external { _initializeAllocationDelay(delay); } @@ -148,9 +141,7 @@ contract DelegationManager is * * @dev The caller must have previously registered as an operator in EigenLayer. */ - function modifyOperatorDetails( - OperatorDetails calldata newOperatorDetails - ) external { + function modifyOperatorDetails(OperatorDetails calldata newOperatorDetails) external { require(isOperator(msg.sender), OperatorNotRegistered()); _setOperatorDetails(msg.sender, newOperatorDetails); } @@ -159,9 +150,7 @@ contract DelegationManager is * @notice Called by an operator to emit an `OperatorMetadataURIUpdated` event indicating the information has updated. * @param metadataURI The URI for metadata associated with an operator */ - function updateOperatorMetadataURI( - string calldata metadataURI - ) external { + function updateOperatorMetadataURI(string calldata metadataURI) external { require(isOperator(msg.sender), OperatorNotRegistered()); emit OperatorMetadataURIUpdated(msg.sender, metadataURI); } @@ -239,9 +228,11 @@ contract DelegationManager is * a staker from their operator. Undelegation immediately removes ALL active shares/strategies from * both the staker and operator, and places the shares and strategies in the withdrawal queue */ - function undelegate( - address staker - ) external onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) returns (bytes32[] memory withdrawalRoots) { + function undelegate(address staker) + external + onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) + returns (bytes32[] memory withdrawalRoots) + { require(isDelegated(staker), NotActivelyDelegated()); require(!isOperator(staker), OperatorsCannotUndelegate()); require(staker != address(0), InputAddressZero()); @@ -301,9 +292,11 @@ contract DelegationManager is * * All withdrawn shares/strategies are placed in a queue and can be fully withdrawn after a delay. */ - function queueWithdrawals( - QueuedWithdrawalParams[] calldata queuedWithdrawalParams - ) external onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) returns (bytes32[] memory) { + function queueWithdrawals(QueuedWithdrawalParams[] calldata queuedWithdrawalParams) + external + onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) + returns (bytes32[] memory) + { bytes32[] memory withdrawalRoots = new bytes32[](queuedWithdrawalParams.length); address operator = delegatedTo[msg.sender]; @@ -450,44 +443,6 @@ contract DelegationManager is } } - /** - * @notice Owner-only function for modifying the value of the `minWithdrawalDelayBlocks` variable. - * @param newMinWithdrawalDelayBlocks new value of `minWithdrawalDelayBlocks`. - */ - function setMinWithdrawalDelayBlocks( - uint256 newMinWithdrawalDelayBlocks - ) external onlyOwner { - _setMinWithdrawalDelayBlocks(newMinWithdrawalDelayBlocks); - } - - /** - * @notice Called by owner to set the minimum withdrawal delay blocks for each passed in strategy - * Note that the min number of blocks to complete a withdrawal of a strategy is - * MAX(minWithdrawalDelayBlocks, strategyWithdrawalDelayBlocks[strategy]) - * @param strategies The strategies to set the minimum withdrawal delay blocks for - * @param withdrawalDelayBlocks The minimum withdrawal delay blocks to set for each strategy - */ - function setStrategyWithdrawalDelayBlocks( - IStrategy[] calldata strategies, - uint256[] calldata withdrawalDelayBlocks - ) external onlyOwner { - _setStrategyWithdrawalDelayBlocks(strategies, withdrawalDelayBlocks); - } - - /** - * @notice Called by owner to set the minimum withdrawal delay for each passed in strategy - * Note that the min number of blocks to complete a withdrawal of a strategy is - * MAX(minWithdrawalDelay, strategyWithdrawalDelay[strategy]) - * @param strategies The strategies to set the minimum withdrawal delay for - * @param withdrawalDelays The minimum withdrawal delay (in seconds) to set for each strategy - */ - function setStrategyWithdrawalDelay( - IStrategy[] calldata strategies, - uint256[] calldata withdrawalDelays - ) external onlyOwner { - _setStrategyWithdrawalDelay(strategies, withdrawalDelays); - } - /** * * INTERNAL FUNCTIONS @@ -500,14 +455,6 @@ contract DelegationManager is * @param newOperatorDetails The new parameters for the operator */ function _setOperatorDetails(address operator, OperatorDetails calldata newOperatorDetails) internal { - require( - newOperatorDetails.stakerOptOutWindowBlocks <= MAX_STAKER_OPT_OUT_WINDOW_BLOCKS, - StakerOptOutWindowBlocksExceedsMax() - ); - require( - newOperatorDetails.stakerOptOutWindowBlocks >= _operatorDetails[operator].stakerOptOutWindowBlocks, - StakerOptOutWindowBlocksCannotDecrease() - ); _operatorDetails[operator] = newOperatorDetails; emit OperatorDetailsModified(msg.sender, newOperatorDetails); } @@ -517,9 +464,7 @@ contract DelegationManager is * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. * @param delay the allocation delay in seconds */ - function _initializeAllocationDelay( - uint32 delay - ) internal { + function _initializeAllocationDelay(uint32 delay) internal { require(isOperator(msg.sender), OperatorNotRegistered()); require(!_operatorAllocationDelay[msg.sender].isSet, AllocationDelaySet()); _operatorAllocationDelay[msg.sender] = AllocationDelayDetails({isSet: true, allocationDelay: delay}); @@ -622,27 +567,39 @@ contract DelegationManager is bool receiveAsTokens ) internal { require(tokens.length == withdrawal.strategies.length, InputArrayLengthMismatch()); - + require(msg.sender == withdrawal.withdrawer, WithdrawerNotCaller()); bytes32 withdrawalRoot = calculateWithdrawalRoot(withdrawal); + bool isLegacyWithdrawal = false; require(pendingWithdrawals[withdrawalRoot], WithdrawalNotQueued()); - require(withdrawal.startTimestamp + minWithdrawalDelay <= block.number, WithdrawalDelayNotElapsed()); - require(msg.sender == withdrawal.withdrawer, WithdrawerNotCaller()); + if (withdrawal.startTimestamp < LEGACY_WITHDRAWALS_TIMESTAMP) { + // this is a legacy M2 withdrawal using blocknumbers. We use the LEGACY_WITHDRAWALS_TIMESTAMP to check + // if the withdrawal is a legacy withdrawal or not. It would take up to 600+ years for the blocknumber + // to reach the LEGACY_WITHDRAWALS_TIMESTAMP, so this is a safe check. + require( + withdrawal.startTimestamp + LEGACY_MIN_WITHDRAWAL_DELAY_BLOCKS <= block.number, + WithdrawalDelayNotElapsed() + ); + isLegacyWithdrawal = true; + } else { + // this is a post Slashing release withdrawal using timestamps + require(withdrawal.startTimestamp + WITHDRAWAL_DELAY <= block.timestamp, WithdrawalDelayNotElapsed()); + } // read delegated operator's totalMagnitudes at time of withdrawal to scale shares again if any slashing has occurred // during withdrawal delay period uint64[] memory totalMagnitudes = allocationManager.getTotalMagnitudesAtTimestamp({ operator: withdrawal.delegatedTo, strategies: withdrawal.strategies, - timestamp: withdrawal.startTimestamp + SlashingConstants.DEALLOCATION_DELAY + timestamp: withdrawal.startTimestamp + WITHDRAWAL_DELAY }); if (receiveAsTokens) { // complete the withdrawal by converting shares to tokens - _completeReceiveAsTokens(withdrawal, tokens, totalMagnitudes); + _completeReceiveAsTokens(withdrawal, tokens, totalMagnitudes, isLegacyWithdrawal); } else { // Award shares back in StrategyManager/EigenPodManager. - _completeReceiveAsShares(withdrawal, tokens, totalMagnitudes); + _completeReceiveAsShares(withdrawal, tokens, totalMagnitudes, isLegacyWithdrawal); } // Remove `withdrawalRoot` from pending roots @@ -658,21 +615,22 @@ contract DelegationManager is function _completeReceiveAsTokens( Withdrawal calldata withdrawal, IERC20[] calldata tokens, - uint64[] memory totalMagnitudes + uint64[] memory totalMagnitudes, + bool isLegacyWithdrawal ) internal { // Finalize action by converting scaled shares to tokens for each strategy, or // by re-awarding shares in each strategy. for (uint256 i = 0; i < withdrawal.strategies.length; ++i) { - require( - withdrawal.startTimestamp + strategyWithdrawalDelays[withdrawal.strategies[i]] <= block.timestamp, - WithdrawalDelayNotElapsed() - ); - - // Take already scaled staker shares and scale again according to current operator totalMagnitude - // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares - // are still susceptible to slashing - uint256 sharesToWithdraw = - _calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); + uint256 sharesToWithdraw; + if (isLegacyWithdrawal) { + // This is a legacy M2 withdrawal. There is no slashing applied to the withdrawn shares. + sharesToWithdraw = withdrawal.scaledShares[i]; + } else { + // Take already scaled staker shares and scale again according to current operator totalMagnitude + // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares + // are still susceptible to slashing + sharesToWithdraw = _calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); + } _withdrawSharesAsTokens({ staker: withdrawal.staker, @@ -694,24 +652,25 @@ contract DelegationManager is function _completeReceiveAsShares( Withdrawal calldata withdrawal, IERC20[] calldata tokens, - uint64[] memory totalMagnitudes + uint64[] memory totalMagnitudes, + bool isLegacyWithdrawal ) internal { // read delegated operator for scaling and adding shares back if needed address currentOperator = delegatedTo[msg.sender]; for (uint256 i = 0; i < withdrawal.strategies.length; ++i) { - require( - withdrawal.startTimestamp + strategyWithdrawalDelays[withdrawal.strategies[i]] <= block.number, - WithdrawalDelayNotElapsed() - ); - - // Take already scaled staker shares and scale again according to current operator totalMagnitude - // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares - // are still susceptible to slashing - uint256 shares = _calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); - // store existing shares to calculate new staker scaling factor later uint256 existingShares; + uint256 shares; + if (isLegacyWithdrawal) { + // This is a legacy M2 withdrawal. There is no slashing applied to withdrawn shares + shares = withdrawal.scaledShares[i]; + } else { + // Take already scaled staker shares and scale again according to current operator totalMagnitude + // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares + // are still susceptible to slashing + shares = _calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); + } /** * When awarding podOwnerShares in EigenPodManager, we need to be sure to only give them back to the original podOwner. @@ -811,7 +770,7 @@ contract DelegationManager is /** * @notice Removes `scaledShares` in `strategies` from `staker` who is currently delegated to `operator` and queues a withdrawal to the `withdrawer`. * @dev If the `operator` is indeed an operator, then the operator's delegated shares in the `strategies` are also decreased appropriately. - * @dev If `withdrawer` is not the same address as `staker`, then thirdPartyTransfersForbidden[strategy] must be set to false in the StrategyManager. + * @dev If `withdrawer` is not the same address as `staker` */ function _removeSharesAndQueueWithdrawal( address staker, @@ -823,6 +782,7 @@ contract DelegationManager is ) internal returns (bytes32) { require(staker != address(0), InputAddressZero()); require(strategies.length != 0, InputArrayLengthZero()); + require(staker == withdrawer, WithdrawerNotStaker()); uint256[] memory scaledStakerShares = new uint256[](strategies.length); @@ -875,11 +835,6 @@ contract DelegationManager is */ eigenPodManager.removeShares(staker, sharesToDecrement); } else { - // If thirdPartyTransfersForbidden is set, withdrawer and staker must be the same address - require( - staker == withdrawer || !strategyManager.thirdPartyTransfersForbidden(strategies[i]), - WithdrawerNotStaker() - ); // this call will revert if `scaledShares[i]` exceeds the Staker's current shares in `strategies[i]` strategyManager.removeShares(staker, strategies[i], sharesToDecrement); } @@ -931,60 +886,6 @@ contract DelegationManager is } } - function _setMinWithdrawalDelayBlocks( - uint256 _minWithdrawalDelayBlocks - ) internal { - require(_minWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, WithdrawalDelayExeedsMax()); - emit MinWithdrawalDelayBlocksSet(minWithdrawalDelayBlocks, _minWithdrawalDelayBlocks); - minWithdrawalDelayBlocks = _minWithdrawalDelayBlocks; - } - - /** - * @notice Sets the withdrawal delay blocks for each strategy in `_strategies` to `_withdrawalDelayBlocks`. - * gets called when initializing contract or by calling `setStrategyWithdrawalDelayBlocks` - */ - function _setStrategyWithdrawalDelayBlocks( - IStrategy[] calldata _strategies, - uint256[] calldata _withdrawalDelayBlocks - ) internal { - require(_strategies.length == _withdrawalDelayBlocks.length, InputArrayLengthMismatch()); - uint256 numStrats = _strategies.length; - for (uint256 i = 0; i < numStrats; ++i) { - IStrategy strategy = _strategies[i]; - uint256 prevStrategyWithdrawalDelayBlocks = strategyWithdrawalDelayBlocks[strategy]; - uint256 newStrategyWithdrawalDelayBlocks = _withdrawalDelayBlocks[i]; - require(newStrategyWithdrawalDelayBlocks <= MAX_WITHDRAWAL_DELAY_BLOCKS, WithdrawalDelayExeedsMax()); - - // set the new withdrawal delay blocks - strategyWithdrawalDelayBlocks[strategy] = newStrategyWithdrawalDelayBlocks; - emit StrategyWithdrawalDelayBlocksSet( - strategy, prevStrategyWithdrawalDelayBlocks, newStrategyWithdrawalDelayBlocks - ); - } - } - - /** - * @notice Sets the withdrawal delay (in seconds) for each strategy in `_strategies` to `_withdrawalDelay`. - * gets called when initializing contract or by calling `setStrategyWithdrawalDelay` - */ - function _setStrategyWithdrawalDelay( - IStrategy[] calldata _strategies, - uint256[] calldata _withdrawalDelays - ) internal { - require(_strategies.length == _withdrawalDelays.length, InputArrayLengthMismatch()); - uint256 numStrats = _strategies.length; - for (uint256 i = 0; i < numStrats; ++i) { - IStrategy strategy = _strategies[i]; - uint256 prevStrategyWithdrawalDelay = strategyWithdrawalDelays[strategy]; - uint256 newStrategyWithdrawalDelay = _withdrawalDelays[i]; - require(newStrategyWithdrawalDelay <= MAX_WITHDRAWAL_DELAY, WithdrawalDelayExeedsMax()); - - // set the new withdrawal delay (in seconds) - strategyWithdrawalDelays[strategy] = newStrategyWithdrawalDelay; - emit StrategyWithdrawalDelaySet(strategy, prevStrategyWithdrawalDelay, newStrategyWithdrawalDelay); - } - } - /** * * SLASHING AND SHARES HELPER FUNCTIONS @@ -1121,27 +1022,21 @@ contract DelegationManager is /** * @notice Returns 'true' if `staker` *is* actively delegated, and 'false' otherwise. */ - function isDelegated( - address staker - ) public view returns (bool) { + function isDelegated(address staker) public view returns (bool) { return (delegatedTo[staker] != address(0)); } /** * @notice Returns true is an operator has previously registered for delegation. */ - function isOperator( - address operator - ) public view returns (bool) { + function isOperator(address operator) public view returns (bool) { return operator != address(0) && delegatedTo[operator] == operator; } /** * @notice Returns the OperatorDetails struct associated with an `operator`. */ - function operatorDetails( - address operator - ) external view returns (OperatorDetails memory) { + function operatorDetails(address operator) external view returns (OperatorDetails memory) { return _operatorDetails[operator]; } @@ -1149,27 +1044,21 @@ contract DelegationManager is * @notice Returns the AllocationDelayDetails struct associated with an `operator` * @dev If the operator has not set an allocation delay, then the `isSet` field will be `false`. */ - function operatorAllocationDelay( - address operator - ) external view returns (AllocationDelayDetails memory) { + function operatorAllocationDelay(address operator) external view returns (AllocationDelayDetails memory) { return _operatorAllocationDelay[operator]; } /** * @notice Returns the delegationApprover account for an operator */ - function delegationApprover( - address operator - ) external view returns (address) { + function delegationApprover(address operator) external view returns (address) { return _operatorDetails[operator].delegationApprover; } /** * @notice Returns the stakerOptOutWindowBlocks for an operator */ - function stakerOptOutWindowBlocks( - address operator - ) external view returns (uint256) { + function stakerOptOutWindowBlocks(address operator) external view returns (uint256) { return _operatorDetails[operator].stakerOptOutWindowBlocks; } @@ -1215,9 +1104,7 @@ contract DelegationManager is * delegatable shares! * @dev Returns two empty arrays in the case that the Staker has no actively-delegateable shares. */ - function getDelegatableShares( - address staker - ) public view returns (IStrategy[] memory, uint256[] memory) { + function getDelegatableShares(address staker) public view returns (IStrategy[] memory, uint256[] memory) { // Get current StrategyManager/EigenPodManager shares and strategies for `staker` // If `staker` is already delegated, these may not be the full withdrawable amounts due to slashing int256 podShares = eigenPodManager.podOwnerShares(staker); @@ -1259,28 +1146,8 @@ contract DelegationManager is return (strategies, shares); } - /** - * @notice Given a list of strategies, return the minimum number of blocks that must pass to withdraw - * from all the inputted strategies. Return value is >= minWithdrawalDelayBlocks as this is the global min withdrawal delay. - * @param strategies The strategies to check withdrawal delays for - */ - function getWithdrawalDelay( - IStrategy[] calldata strategies - ) public view returns (uint256) { - uint256 withdrawalDelay = minWithdrawalDelayBlocks; - for (uint256 i = 0; i < strategies.length; ++i) { - uint256 currWithdrawalDelay = strategyWithdrawalDelayBlocks[strategies[i]]; - if (currWithdrawalDelay > withdrawalDelay) { - withdrawalDelay = currWithdrawalDelay; - } - } - return withdrawalDelay; - } - /// @notice Returns the keccak256 hash of `withdrawal`. - function calculateWithdrawalRoot( - Withdrawal memory withdrawal - ) public pure returns (bytes32) { + function calculateWithdrawalRoot(Withdrawal memory withdrawal) public pure returns (bytes32) { return keccak256(abi.encode(withdrawal)); } diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index 05764e388..6486dea49 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -90,7 +90,7 @@ abstract contract DelegationManagerStorage is IDelegationManager { * To withdraw from a strategy, max(minWithdrawalDelayBlocks, strategyWithdrawalDelayBlocks[strategy]) number of blocks must have passed. * See mapping strategyWithdrawalDelayBlocks below for per-strategy withdrawal delays. */ - uint256 public minWithdrawalDelayBlocks; + uint256 private __deprecated_minWithdrawalDelayBlocks; /// @notice Mapping: hash of withdrawal inputs, aka 'withdrawalRoot' => whether the withdrawal is pending mapping(bytes32 => bool) public pendingWithdrawals; @@ -107,23 +107,7 @@ abstract contract DelegationManagerStorage is IDelegationManager { * @notice Minimum delay enforced by this contract per Strategy for completing queued withdrawals. Measured in blocks, and adjustable by this contract's owner, * up to a maximum of `MAX_WITHDRAWAL_DELAY_BLOCKS`. Minimum value is 0 (i.e. no delay enforced). */ - mapping(IStrategy => uint256) public strategyWithdrawalDelayBlocks; - - /** - * @notice Global minimum withdrawal delay for all strategy withdrawals. - * NOTE: This is used equivalently to minWithdrawalDelayBlocks and strategyWithdrawalDelayBlocks but - * using timestamps instead in the Slashing release. - * In addition, we now also configure withdrawal delays on a per-strategy basis. - * To withdraw from a strategy, max(minWithdrawalDelay, strategyWithdrawalDelay[strategy]) number of seconds must have passed. - * See mapping strategyWithdrawalDelay below for per-strategy withdrawal delays. - */ - uint256 public minWithdrawalDelay; - - /** - * @notice Minimum delay enforced by this contract per Strategy for completing queued withdrawals. Measured in seconds, and adjustable by this contract's owner, - * up to a maximum of `MAX_WITHDRAWAL_DELAY`. Minimum value is 0 (i.e. no delay enforced). - */ - mapping(IStrategy => uint256) public strategyWithdrawalDelays; + mapping(IStrategy => uint256) private __deprecated_strategyWithdrawalDelayBlocks; /// @notice Mapping: staker => strategy => scaling factor used to calculate the staker's withdrawable shares in the strategy. /// This is updated upon each deposit based on the staker's currently delegated operator's totalMagnitude. @@ -152,5 +136,5 @@ abstract contract DelegationManagerStorage is IDelegationManager { * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ - uint256[37] private __gap; + uint256[39] private __gap; } diff --git a/src/contracts/core/RewardsCoordinator.sol b/src/contracts/core/RewardsCoordinator.sol index 9a67ab988..2381d2724 100644 --- a/src/contracts/core/RewardsCoordinator.sol +++ b/src/contracts/core/RewardsCoordinator.sol @@ -137,9 +137,11 @@ contract RewardsCoordinator is * @dev This function will revert if the `rewardsSubmission` is malformed, * e.g. if the `strategies` and `weights` arrays are of non-equal lengths */ - function createAVSRewardsSubmission( - RewardsSubmission[] calldata rewardsSubmissions - ) external onlyWhenNotPaused(PAUSED_AVS_REWARDS_SUBMISSION) nonReentrant { + function createAVSRewardsSubmission(RewardsSubmission[] calldata rewardsSubmissions) + external + onlyWhenNotPaused(PAUSED_AVS_REWARDS_SUBMISSION) + nonReentrant + { for (uint256 i = 0; i < rewardsSubmissions.length;) { RewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -173,9 +175,12 @@ contract RewardsCoordinator is * a permissioned call based on isRewardsForAllSubmitter mapping. * @param rewardsSubmissions The rewards submissions being created */ - function createRewardsForAllSubmission( - RewardsSubmission[] calldata rewardsSubmissions - ) external onlyWhenNotPaused(PAUSED_REWARDS_FOR_ALL_SUBMISSION) onlyRewardsForAllSubmitter nonReentrant { + function createRewardsForAllSubmission(RewardsSubmission[] calldata rewardsSubmissions) + external + onlyWhenNotPaused(PAUSED_REWARDS_FOR_ALL_SUBMISSION) + onlyRewardsForAllSubmitter + nonReentrant + { for (uint256 i = 0; i < rewardsSubmissions.length;) { RewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -216,9 +221,11 @@ contract RewardsCoordinator is * @dev The tokens in the rewards submissions are sent to the `RewardsCoordinator` contract * @dev Strategies of each rewards submission must be in ascending order of addresses to check for duplicates */ - function rewardOperatorSetForRange( - OperatorSetRewardsSubmission[] calldata rewardsSubmissions - ) external onlyWhenNotPaused(PAUSED_REWARD_OPERATOR_SET) nonReentrant { + function rewardOperatorSetForRange(OperatorSetRewardsSubmission[] calldata rewardsSubmissions) + external + onlyWhenNotPaused(PAUSED_REWARD_OPERATOR_SET) + nonReentrant + { for (uint256 i = 0; i < rewardsSubmissions.length;) { OperatorSetRewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -346,9 +353,7 @@ contract RewardsCoordinator is * @notice allow the rewardsUpdater to disable/cancel a pending root submission in case of an error * @param rootIndex The index of the root to be disabled */ - function disableRoot( - uint32 rootIndex - ) external onlyWhenNotPaused(PAUSED_SUBMIT_DISABLE_ROOTS) onlyRewardsUpdater { + function disableRoot(uint32 rootIndex) external onlyWhenNotPaused(PAUSED_SUBMIT_DISABLE_ROOTS) onlyRewardsUpdater { require(rootIndex < _distributionRoots.length, InvalidRootIndex()); DistributionRoot storage root = _distributionRoots[rootIndex]; require(!root.disabled, RootDisabled()); @@ -362,9 +367,7 @@ contract RewardsCoordinator is * @param claimer The address of the entity that can call `processClaim` on behalf of the earner * @dev Only callable by the `earner` */ - function setClaimerFor( - address claimer - ) external { + function setClaimerFor(address claimer) external { address earner = msg.sender; address prevClaimer = claimerFor[earner]; claimerFor[earner] = claimer; @@ -409,9 +412,7 @@ contract RewardsCoordinator is * @dev Only callable by the contract owner * @param _activationDelay The new value for activationDelay */ - function setActivationDelay( - uint32 _activationDelay - ) external onlyOwner { + function setActivationDelay(uint32 _activationDelay) external onlyOwner { _setActivationDelay(_activationDelay); } @@ -420,9 +421,7 @@ contract RewardsCoordinator is * @dev Only callable by the contract owner * @param _globalCommissionBips The commission for all operators across all avss */ - function setGlobalOperatorCommission( - uint16 _globalCommissionBips - ) external onlyOwner { + function setGlobalOperatorCommission(uint16 _globalCommissionBips) external onlyOwner { _setGlobalOperatorCommission(_globalCommissionBips); } @@ -431,9 +430,7 @@ contract RewardsCoordinator is * @dev Only callable by the contract owner * @param _rewardsUpdater The address of the new rewardsUpdater */ - function setRewardsUpdater( - address _rewardsUpdater - ) external onlyOwner { + function setRewardsUpdater(address _rewardsUpdater) external onlyOwner { _setRewardsUpdater(_rewardsUpdater); } @@ -585,23 +582,17 @@ contract RewardsCoordinator is ); } - function _setActivationDelay( - uint32 _activationDelay - ) internal { + function _setActivationDelay(uint32 _activationDelay) internal { emit ActivationDelaySet(activationDelay, _activationDelay); activationDelay = _activationDelay; } - function _setGlobalOperatorCommission( - uint16 _globalCommissionBips - ) internal { + function _setGlobalOperatorCommission(uint16 _globalCommissionBips) internal { emit GlobalCommissionBipsSet(globalOperatorCommissionBips, _globalCommissionBips); globalOperatorCommissionBips = _globalCommissionBips; } - function _setRewardsUpdater( - address _rewardsUpdater - ) internal { + function _setRewardsUpdater(address _rewardsUpdater) internal { emit RewardsUpdaterSet(rewardsUpdater, _rewardsUpdater); rewardsUpdater = _rewardsUpdater; } @@ -613,24 +604,18 @@ contract RewardsCoordinator is */ /// @notice return the hash of the earner's leaf - function calculateEarnerLeafHash( - EarnerTreeMerkleLeaf calldata leaf - ) public pure returns (bytes32) { + function calculateEarnerLeafHash(EarnerTreeMerkleLeaf calldata leaf) public pure returns (bytes32) { return keccak256(abi.encodePacked(EARNER_LEAF_SALT, leaf.earner, leaf.earnerTokenRoot)); } /// @notice returns the hash of the earner's token leaf - function calculateTokenLeafHash( - TokenTreeMerkleLeaf calldata leaf - ) public pure returns (bytes32) { + function calculateTokenLeafHash(TokenTreeMerkleLeaf calldata leaf) public pure returns (bytes32) { return keccak256(abi.encodePacked(TOKEN_LEAF_SALT, leaf.token, leaf.cumulativeEarnings)); } /// @notice returns 'true' if the claim would currently pass the check in `processClaims` /// but will revert if not valid - function checkClaim( - RewardsMerkleClaim calldata claim - ) public view returns (bool) { + function checkClaim(RewardsMerkleClaim calldata claim) public view returns (bool) { _checkClaim(claim, _distributionRoots[claim.rootIndex]); return true; } @@ -660,9 +645,7 @@ contract RewardsCoordinator is return _distributionRoots.length; } - function getDistributionRootAtIndex( - uint256 index - ) external view returns (DistributionRoot memory) { + function getDistributionRootAtIndex(uint256 index) external view returns (DistributionRoot memory) { return _distributionRoots[index]; } @@ -683,9 +666,7 @@ contract RewardsCoordinator is } /// @notice loop through distribution roots from reverse and return hash - function getRootIndexFromHash( - bytes32 rootHash - ) public view returns (uint32) { + function getRootIndexFromHash(bytes32 rootHash) public view returns (uint32) { for (uint32 i = uint32(_distributionRoots.length); i > 0; i--) { if (_distributionRoots[i - 1].root == rootHash) { return i - 1; diff --git a/src/contracts/core/Slasher.sol b/src/contracts/core/Slasher.sol index 85cc9a2ae..98901f9de 100644 --- a/src/contracts/core/Slasher.sol +++ b/src/contracts/core/Slasher.sol @@ -29,17 +29,11 @@ contract Slasher is Initializable, OwnableUpgradeable, ISlasher, Pausable { function initialize(address, IPauserRegistry, uint256) external {} - function optIntoSlashing( - address - ) external {} + function optIntoSlashing(address) external {} - function freezeOperator( - address - ) external {} + function freezeOperator(address) external {} - function resetFrozenStatus( - address[] calldata - ) external {} + function resetFrozenStatus(address[] calldata) external {} function recordFirstStakeUpdate(address, uint32) external {} @@ -51,9 +45,7 @@ contract Slasher is Initializable, OwnableUpgradeable, ISlasher, Pausable { function delegation() external view returns (IDelegationManager) {} - function isFrozen( - address - ) external view returns (bool) {} + function isFrozen(address) external view returns (bool) {} function canSlash(address, address) external view returns (bool) {} @@ -67,17 +59,13 @@ contract Slasher is Initializable, OwnableUpgradeable, ISlasher, Pausable { function operatorToMiddlewareTimes(address, uint256) external view returns (MiddlewareTimes memory) {} - function middlewareTimesLength( - address - ) external view returns (uint256) {} + function middlewareTimesLength(address) external view returns (uint256) {} function getMiddlewareTimesIndexStalestUpdateBlock(address, uint32) external view returns (uint32) {} function getMiddlewareTimesIndexServeUntilBlock(address, uint32) external view returns (uint32) {} - function operatorWhitelistedContractsLinkedListSize( - address - ) external view returns (uint256) {} + function operatorWhitelistedContractsLinkedListSize(address) external view returns (uint256) {} function operatorWhitelistedContractsLinkedListEntry( address, diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index e0fdc3bb1..1f7176f9a 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -39,9 +39,7 @@ contract StrategyManager is _; } - modifier onlyStrategiesWhitelistedForDeposit( - IStrategy strategy - ) { + modifier onlyStrategiesWhitelistedForDeposit(IStrategy strategy) { require(strategyIsWhitelistedForDeposit[strategy], StrategyNotWhitelisted()); _; } @@ -123,7 +121,6 @@ contract StrategyManager is * @dev The `msg.sender` must have previously approved this contract to transfer at least `amount` of `token` on their behalf. * @dev A signature is required for this function to eliminate the possibility of griefing attacks, specifically those * targeting stakers who may be attempting to undelegate. - * @dev Cannot be called if thirdPartyTransfersForbidden is set to true for this strategy * * WARNING: Depositing tokens that allow reentrancy (eg. ERC-777) into a strategy is not recommended. This can lead to attack vectors * where the token balance and corresponding strategy shares are not in sync upon reentrancy @@ -136,7 +133,6 @@ contract StrategyManager is uint256 expiry, bytes memory signature ) external onlyWhenNotPaused(PAUSED_DEPOSITS) nonReentrant returns (uint256 shares) { - require(!thirdPartyTransfersForbidden[strategy], ThirdPartyTransfersDisabled()); require(expiry >= block.timestamp, SignatureExpired()); // calculate struct hash, then increment `staker`'s nonce uint256 nonce = nonces[staker]; @@ -188,44 +184,28 @@ contract StrategyManager is strategy.withdraw(recipient, token, shares); } - /** - * If true for a strategy, a user cannot depositIntoStrategyWithSignature into that strategy for another staker - * and also when performing DelegationManager.queueWithdrawals, a staker can only withdraw to themselves. - * Defaulted to false for all existing strategies. - * @param strategy The strategy to set `thirdPartyTransfersForbidden` value to - * @param value bool value to set `thirdPartyTransfersForbidden` to - */ - function setThirdPartyTransfersForbidden(IStrategy strategy, bool value) external onlyStrategyWhitelister { - _setThirdPartyTransfersForbidden(strategy, value); - } - /** * @notice Owner-only function to change the `strategyWhitelister` address. * @param newStrategyWhitelister new address for the `strategyWhitelister`. */ - function setStrategyWhitelister( - address newStrategyWhitelister - ) external onlyOwner { + function setStrategyWhitelister(address newStrategyWhitelister) external onlyOwner { _setStrategyWhitelister(newStrategyWhitelister); } /** * @notice Owner-only function that adds the provided Strategies to the 'whitelist' of strategies that stakers can deposit into * @param strategiesToWhitelist Strategies that will be added to the `strategyIsWhitelistedForDeposit` mapping (if they aren't in it already) - * @param thirdPartyTransfersForbiddenValues bool values to set `thirdPartyTransfersForbidden` to for each strategy */ - function addStrategiesToDepositWhitelist( - IStrategy[] calldata strategiesToWhitelist, - bool[] calldata thirdPartyTransfersForbiddenValues - ) external onlyStrategyWhitelister { - require(strategiesToWhitelist.length == thirdPartyTransfersForbiddenValues.length, InputArrayLengthMismatch()); + function addStrategiesToDepositWhitelist(IStrategy[] calldata strategiesToWhitelist) + external + onlyStrategyWhitelister + { uint256 strategiesToWhitelistLength = strategiesToWhitelist.length; for (uint256 i = 0; i < strategiesToWhitelistLength; ++i) { // change storage and emit event only if strategy is not already in whitelist if (!strategyIsWhitelistedForDeposit[strategiesToWhitelist[i]]) { strategyIsWhitelistedForDeposit[strategiesToWhitelist[i]] = true; emit StrategyAddedToDepositWhitelist(strategiesToWhitelist[i]); - _setThirdPartyTransfersForbidden(strategiesToWhitelist[i], thirdPartyTransfersForbiddenValues[i]); } } } @@ -234,17 +214,16 @@ contract StrategyManager is * @notice Owner-only function that removes the provided Strategies from the 'whitelist' of strategies that stakers can deposit into * @param strategiesToRemoveFromWhitelist Strategies that will be removed to the `strategyIsWhitelistedForDeposit` mapping (if they are in it) */ - function removeStrategiesFromDepositWhitelist( - IStrategy[] calldata strategiesToRemoveFromWhitelist - ) external onlyStrategyWhitelister { + function removeStrategiesFromDepositWhitelist(IStrategy[] calldata strategiesToRemoveFromWhitelist) + external + onlyStrategyWhitelister + { uint256 strategiesToRemoveFromWhitelistLength = strategiesToRemoveFromWhitelist.length; for (uint256 i = 0; i < strategiesToRemoveFromWhitelistLength; ++i) { // change storage and emit event only if strategy is already in whitelist if (strategyIsWhitelistedForDeposit[strategiesToRemoveFromWhitelist[i]]) { strategyIsWhitelistedForDeposit[strategiesToRemoveFromWhitelist[i]] = false; emit StrategyRemovedFromDepositWhitelist(strategiesToRemoveFromWhitelist[i]); - // Set mapping value to default false value - _setThirdPartyTransfersForbidden(strategiesToRemoveFromWhitelist[i], false); } } } @@ -377,24 +356,11 @@ contract StrategyManager is stakerStrategyList[staker].pop(); } - /** - * @notice Internal function for modifying `thirdPartyTransfersForbidden`. - * Used inside of the `setThirdPartyTransfersForbidden` and `addStrategiesToDepositWhitelist` functions. - * @param strategy The strategy to set `thirdPartyTransfersForbidden` value to - * @param value bool value to set `thirdPartyTransfersForbidden` to - */ - function _setThirdPartyTransfersForbidden(IStrategy strategy, bool value) internal { - emit UpdatedThirdPartyTransfersForbidden(strategy, value); - thirdPartyTransfersForbidden[strategy] = value; - } - /** * @notice Internal function for modifying the `strategyWhitelister`. Used inside of the `setStrategyWhitelister` and `initialize` functions. * @param newStrategyWhitelister The new address for the `strategyWhitelister` to take. */ - function _setStrategyWhitelister( - address newStrategyWhitelister - ) internal { + function _setStrategyWhitelister(address newStrategyWhitelister) internal { emit StrategyWhitelisterChanged(strategyWhitelister, newStrategyWhitelister); strategyWhitelister = newStrategyWhitelister; } @@ -406,9 +372,7 @@ contract StrategyManager is * @param staker The staker of interest, whose deposits this function will fetch * @return (staker's strategies, shares in these strategies) */ - function getDeposits( - address staker - ) external view returns (IStrategy[] memory, uint256[] memory) { + function getDeposits(address staker) external view returns (IStrategy[] memory, uint256[] memory) { uint256 strategiesLength = stakerStrategyList[staker].length; uint256[] memory shares = new uint256[](strategiesLength); @@ -419,9 +383,7 @@ contract StrategyManager is } /// @notice Simple getter function that returns `stakerStrategyList[staker].length`. - function stakerStrategyListLength( - address staker - ) external view returns (uint256) { + function stakerStrategyListLength(address staker) external view returns (uint256) { return stakerStrategyList[staker].length; } diff --git a/src/contracts/core/StrategyManagerStorage.sol b/src/contracts/core/StrategyManagerStorage.sol index 9c50d44e2..1425f07a6 100644 --- a/src/contracts/core/StrategyManagerStorage.sol +++ b/src/contracts/core/StrategyManagerStorage.sol @@ -72,7 +72,7 @@ abstract contract StrategyManagerStorage is IStrategyManager { * if true for a strategy, a user cannot depositIntoStrategyWithSignature into that strategy for another staker * and also when performing queueWithdrawals, a staker can only withdraw to themselves */ - mapping(IStrategy => bool) public thirdPartyTransfersForbidden; + mapping(IStrategy => bool) private __deprecated_thirdPartyTransfersForbidden; constructor( IDelegationManager _delegation, diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index bfea60811..bfe9035c7 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -190,15 +190,6 @@ interface IDelegationManager is ISignatureUtils { /// @notice Emitted when a queued withdrawal is completed event WithdrawalCompleted(bytes32 withdrawalRoot); - /// @notice Emitted when the `minWithdrawalDelayBlocks` variable is modified from `previousValue` to `newValue`. - event MinWithdrawalDelayBlocksSet(uint256 previousValue, uint256 newValue); - - /// @notice Emitted when the `strategyWithdrawalDelayBlocks` variable is modified from `previousValue` to `newValue`. - event StrategyWithdrawalDelayBlocksSet(IStrategy strategy, uint256 previousValue, uint256 newValue); - - /// @notice Emitted when the `strategyWithdrawalDelay` variable is modified from `previousValue` to `newValue`. - event StrategyWithdrawalDelaySet(IStrategy strategy, uint256 previousValue, uint256 newValue); - /** * @notice Registers the caller as an operator in EigenLayer. * @param registeringOperatorDetails is the `OperatorDetails` for the operator. @@ -416,15 +407,6 @@ interface IDelegationManager is ISignatureUtils { address operator ) external view returns (uint256); - /** - * @notice Given a list of strategies, return the minimum number of blocks that must pass to withdraw - * from all the inputted strategies. Return value is >= minWithdrawalDelayBlocks as this is the global min withdrawal delay. - * @param strategies The strategies to check withdrawal delays for - */ - function getWithdrawalDelay( - IStrategy[] calldata strategies - ) external view returns (uint256); - /** * @notice returns the total number of scaled shares (i.e. shares scaled down by a factor of the `operator`'s * totalMagnitude) in `strategy` that are delegated to `operator`. @@ -462,22 +444,6 @@ interface IDelegationManager is ISignatureUtils { */ function delegationApproverSaltIsSpent(address _delegationApprover, bytes32 salt) external view returns (bool); - /** - * @notice Minimum delay enforced by this contract for completing queued withdrawals. Measured in blocks, and adjustable by this contract's owner, - * up to a maximum of `MAX_WITHDRAWAL_DELAY_BLOCKS`. Minimum value is 0 (i.e. no delay enforced). - * Note that strategies each have a separate withdrawal delay, which can be greater than this value. So the minimum number of blocks that must pass - * to withdraw a strategy is MAX(minWithdrawalDelayBlocks, strategyWithdrawalDelayBlocks[strategy]) - */ - function minWithdrawalDelayBlocks() external view returns (uint256); - - /** - * @notice Minimum delay enforced by this contract per Strategy for completing queued withdrawals. Measured in blocks, and adjustable by this contract's owner, - * up to a maximum of `MAX_WITHDRAWAL_DELAY_BLOCKS`. Minimum value is 0 (i.e. no delay enforced). - */ - function strategyWithdrawalDelayBlocks( - IStrategy strategy - ) external view returns (uint256); - /// @notice return address of the beaconChainETHStrategy function beaconChainETHStrategy() external view returns (IStrategy); diff --git a/src/contracts/interfaces/IStrategyFactory.sol b/src/contracts/interfaces/IStrategyFactory.sol index d04bfbfc8..27a448d65 100644 --- a/src/contracts/interfaces/IStrategyFactory.sol +++ b/src/contracts/interfaces/IStrategyFactory.sol @@ -50,15 +50,9 @@ interface IStrategyFactory { * @notice Owner-only function to pass through a call to `StrategyManager.addStrategiesToDepositWhitelist` */ function whitelistStrategies( - IStrategy[] calldata strategiesToWhitelist, - bool[] calldata thirdPartyTransfersForbiddenValues + IStrategy[] calldata strategiesToWhitelist ) external; - /** - * @notice Owner-only function to pass through a call to `StrategyManager.setThirdPartyTransfersForbidden` - */ - function setThirdPartyTransfersForbidden(IStrategy strategy, bool value) external; - /** * @notice Owner-only function to pass through a call to `StrategyManager.removeStrategiesFromDepositWhitelist` */ diff --git a/src/contracts/interfaces/IStrategyManager.sol b/src/contracts/interfaces/IStrategyManager.sol index dd9183819..c2037337e 100644 --- a/src/contracts/interfaces/IStrategyManager.sol +++ b/src/contracts/interfaces/IStrategyManager.sol @@ -33,8 +33,6 @@ interface IStrategyManager { error StrategyNotFound(); /// @dev Thrown when attempting to deposit to a non-whitelisted strategy. error StrategyNotWhitelisted(); - /// @dev Thrown when attempting a third party transfer from a strategy that's disabled it. - error ThirdPartyTransfersDisabled(); /** * @notice Emitted when a new deposit occurs on behalf of `staker`. @@ -45,9 +43,6 @@ interface IStrategyManager { */ event Deposit(address staker, IERC20 token, IStrategy strategy, uint256 shares); - /// @notice Emitted when `thirdPartyTransfersForbidden` is updated for a strategy and value by the owner - event UpdatedThirdPartyTransfersForbidden(IStrategy strategy, bool value); - /// @notice Emitted when the `strategyWhitelister` is changed event StrategyWhitelisterChanged(address previousAddress, address newAddress); @@ -87,7 +82,6 @@ interface IStrategyManager { * @dev The `msg.sender` must have previously approved this contract to transfer at least `amount` of `token` on their behalf. * @dev A signature is required for this function to eliminate the possibility of griefing attacks, specifically those * targeting stakers who may be attempting to undelegate. - * @dev Cannot be called if thirdPartyTransfersForbidden is set to true for this strategy * * WARNING: Depositing tokens that allow reentrancy (eg. ERC-777) into a strategy is not recommended. This can lead to attack vectors * where the token balance and corresponding strategy shares are not in sync upon reentrancy @@ -134,11 +128,9 @@ interface IStrategyManager { /** * @notice Owner-only function that adds the provided Strategies to the 'whitelist' of strategies that stakers can deposit into * @param strategiesToWhitelist Strategies that will be added to the `strategyIsWhitelistedForDeposit` mapping (if they aren't in it already) - * @param thirdPartyTransfersForbiddenValues bool values to set `thirdPartyTransfersForbidden` to for each strategy */ function addStrategiesToDepositWhitelist( - IStrategy[] calldata strategiesToWhitelist, - bool[] calldata thirdPartyTransfersForbiddenValues + IStrategy[] calldata strategiesToWhitelist ) external; /** @@ -149,15 +141,6 @@ interface IStrategyManager { IStrategy[] calldata strategiesToRemoveFromWhitelist ) external; - /** - * If true for a strategy, a user cannot depositIntoStrategyWithSignature into that strategy for another staker - * and also when performing DelegationManager.queueWithdrawals, a staker can only withdraw to themselves. - * Defaulted to false for all existing strategies. - * @param strategy The strategy to set `thirdPartyTransfersForbidden` value to - * @param value bool value to set `thirdPartyTransfersForbidden` to - */ - function setThirdPartyTransfersForbidden(IStrategy strategy, bool value) external; - /// @notice Returns the single, central Delegation contract of EigenLayer function delegation() external view returns (IDelegationManager); @@ -174,12 +157,4 @@ interface IStrategyManager { function strategyIsWhitelistedForDeposit( IStrategy strategy ) external view returns (bool); - - /** - * @notice Returns bool for whether or not `strategy` enables credit transfers. i.e enabling - * depositIntoStrategyWithSignature calls or queueing withdrawals to a different address than the staker. - */ - function thirdPartyTransfersForbidden( - IStrategy strategy - ) external view returns (bool); } diff --git a/src/contracts/libraries/SlashingConstants.sol b/src/contracts/libraries/SlashingConstants.sol index 4e43cdb3c..2c61942e3 100644 --- a/src/contracts/libraries/SlashingConstants.sol +++ b/src/contracts/libraries/SlashingConstants.sol @@ -14,5 +14,6 @@ library SlashingConstants { uint256 public constant PRECISION_FACTOR_SQUARED = 1e36; /// @dev Delay before deallocations are completable and can be added back into freeMagnitude + /// This is also the same delay for withdrawals to be completable uint32 public constant DEALLOCATION_DELAY = 17.5 days; } diff --git a/src/contracts/strategies/StrategyFactory.sol b/src/contracts/strategies/StrategyFactory.sol index 6486f1be1..62e39aac2 100644 --- a/src/contracts/strategies/StrategyFactory.sol +++ b/src/contracts/strategies/StrategyFactory.sol @@ -60,10 +60,8 @@ contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable ); _setStrategyForToken(token, strategy); IStrategy[] memory strategiesToWhitelist = new IStrategy[](1); - bool[] memory thirdPartyTransfersForbiddenValues = new bool[](1); strategiesToWhitelist[0] = strategy; - thirdPartyTransfersForbiddenValues[0] = false; - strategyManager.addStrategiesToDepositWhitelist(strategiesToWhitelist, thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(strategiesToWhitelist); return strategy; } @@ -106,17 +104,9 @@ contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable * @notice Owner-only function to pass through a call to `StrategyManager.addStrategiesToDepositWhitelist` */ function whitelistStrategies( - IStrategy[] calldata strategiesToWhitelist, - bool[] calldata thirdPartyTransfersForbiddenValues + IStrategy[] calldata strategiesToWhitelist ) external onlyOwner { - strategyManager.addStrategiesToDepositWhitelist(strategiesToWhitelist, thirdPartyTransfersForbiddenValues); - } - - /** - * @notice Owner-only function to pass through a call to `StrategyManager.setThirdPartyTransfersForbidden` - */ - function setThirdPartyTransfersForbidden(IStrategy strategy, bool value) external onlyOwner { - strategyManager.setThirdPartyTransfersForbidden(strategy, value); + strategyManager.addStrategiesToDepositWhitelist(strategiesToWhitelist); } /** diff --git a/src/test/events/IStrategyManagerEvents.sol b/src/test/events/IStrategyManagerEvents.sol index 35d73ad2a..a18ea82b2 100644 --- a/src/test/events/IStrategyManagerEvents.sol +++ b/src/test/events/IStrategyManagerEvents.sol @@ -46,9 +46,6 @@ interface IStrategyManagerEvents { bytes32 withdrawalRoot ); - /// @notice Emitted when `thirdPartyTransfersForbidden` is updated for a strategy and value by the owner - event UpdatedThirdPartyTransfersForbidden(IStrategy strategy, bool value); - /// @notice Emitted when the `strategyWhitelister` is changed event StrategyWhitelisterChanged(address previousAddress, address newAddress); diff --git a/src/test/integration/IntegrationBase.t.sol b/src/test/integration/IntegrationBase.t.sol index 872a547f2..86ef59b54 100644 --- a/src/test/integration/IntegrationBase.t.sol +++ b/src/test/integration/IntegrationBase.t.sol @@ -1003,7 +1003,8 @@ abstract contract IntegrationBase is IntegrationDeployer { // blocksToRoll = withdrawalDelayBlocks; // } // } - cheats.roll(block.number + delegationManager.getWithdrawalDelay(strategies)); + // TODO: Fix this with withdrawal changes + // cheats.roll(block.number + delegationManager.getWithdrawalDelay(strategies)); } /// @dev Uses timewarp modifier to get operator shares at the last snapshot diff --git a/src/test/integration/IntegrationDeployer.t.sol b/src/test/integration/IntegrationDeployer.t.sol index 2c573995b..6c5a7102f 100644 --- a/src/test/integration/IntegrationDeployer.t.sol +++ b/src/test/integration/IntegrationDeployer.t.sol @@ -589,7 +589,6 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { // Whitelist strategy IStrategy[] memory strategies = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); strategies[0] = strategy; if (forkType == MAINNET) { @@ -599,7 +598,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { StrategyBaseTVLLimits(address(strategy)).setTVLLimits(type(uint256).max, type(uint256).max); } else { cheats.prank(strategyManager.strategyWhitelister()); - strategyManager.addStrategiesToDepositWhitelist(strategies, _thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(strategies); } // Add to lstStrats and allStrats diff --git a/src/test/mocks/StrategyManagerMock.sol b/src/test/mocks/StrategyManagerMock.sol index 65ac7927c..2aec094df 100644 --- a/src/test/mocks/StrategyManagerMock.sol +++ b/src/test/mocks/StrategyManagerMock.sol @@ -34,8 +34,6 @@ contract StrategyManagerMock is /// @notice Mapping: staker => cumulative number of queued withdrawals they have ever initiated. only increments (doesn't decrement) mapping(address => uint256) public cumulativeWithdrawalsQueued; - - mapping(IStrategy => bool) public thirdPartyTransfersForbidden; function setAddresses(IDelegationManager _delegation, IEigenPodManager _eigenPodManager, ISlasher _slasher) external { @@ -78,11 +76,6 @@ contract StrategyManagerMock is sharesToReturn[staker] = _sharesToReturn; } - function setThirdPartyTransfersForbidden(IStrategy strategy, bool value) external { - emit UpdatedThirdPartyTransfersForbidden(strategy, value); - thirdPartyTransfersForbidden[strategy] = value; - } - /** * @notice Get all details on the staker's deposits and corresponding shares * @return (staker's strategies, shares in these strategies) @@ -127,12 +120,10 @@ contract StrategyManagerMock is // function withdrawalDelayBlocks() external view returns (uint256) {} function addStrategiesToDepositWhitelist( - IStrategy[] calldata strategiesToWhitelist, - bool[] calldata thirdPartyTransfersForbiddenValues + IStrategy[] calldata strategiesToWhitelist ) external { for (uint256 i = 0; i < strategiesToWhitelist.length; ++i) { strategyIsWhitelistedForDeposit[strategiesToWhitelist[i]] = true; - thirdPartyTransfersForbidden[strategiesToWhitelist[i]] = thirdPartyTransfersForbiddenValues[i]; } } diff --git a/src/test/unit/AVSDirectoryUnit.t.sol b/src/test/unit/AVSDirectoryUnit.t.sol index 38007ff08..bc91566ac 100644 --- a/src/test/unit/AVSDirectoryUnit.t.sol +++ b/src/test/unit/AVSDirectoryUnit.t.sol @@ -198,8 +198,6 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { ) internal view { // filter out zero address since people can't delegate to the zero address and operators are delegated to themselves cheats.assume(operator != address(0)); - // filter out disallowed stakerOptOutWindowBlocks values - cheats.assume(operatorDetails.stakerOptOutWindowBlocks <= delegationManager.MAX_STAKER_OPT_OUT_WINDOW_BLOCKS()); } function _registerOperatorToOperatorSet( diff --git a/src/test/unit/StrategyFactoryUnit.t.sol b/src/test/unit/StrategyFactoryUnit.t.sol index 2cefcea19..8f793ce29 100644 --- a/src/test/unit/StrategyFactoryUnit.t.sol +++ b/src/test/unit/StrategyFactoryUnit.t.sol @@ -116,7 +116,6 @@ contract StrategyFactoryUnitTests is EigenLayerUnitTestSetup { require(newStrategy.pauserRegistry() == pauserRegistry, "pauserRegistry not set correctly"); require(newStrategy.underlyingToken() == underlyingToken, "underlyingToken not set correctly"); require(strategyManagerMock.strategyIsWhitelistedForDeposit(newStrategy), "underlyingToken is not whitelisted"); - require(!strategyManagerMock.thirdPartyTransfersForbidden(newStrategy), "newStrategy has 3rd party transfers forbidden"); } function test_deployNewStrategy_revert_StrategyAlreadyExists() public { @@ -159,38 +158,18 @@ contract StrategyFactoryUnitTests is EigenLayerUnitTestSetup { function test_whitelistStrategies() public { StrategyBase strategy = _deployStrategy(); IStrategy[] memory strategiesToWhitelist = new IStrategy[](1); - bool[] memory thirdPartyTransfersForbiddenValues = new bool[](1); strategiesToWhitelist[0] = strategy; - thirdPartyTransfersForbiddenValues[0] = true; - strategyFactory.whitelistStrategies(strategiesToWhitelist, thirdPartyTransfersForbiddenValues); + strategyFactory.whitelistStrategies(strategiesToWhitelist); assertTrue(strategyManagerMock.strategyIsWhitelistedForDeposit(strategy), "Strategy not whitelisted"); - require(strategyManagerMock.thirdPartyTransfersForbidden(strategy), "3rd party transfers forbidden not set correctly"); } function test_whitelistStrategies_revert_notOwner() public { IStrategy[] memory strategiesToWhitelist = new IStrategy[](1); - bool[] memory thirdPartyTransfersForbiddenValues = new bool[](1); cheats.expectRevert("Ownable: caller is not the owner"); cheats.prank(notOwner); - strategyFactory.whitelistStrategies(strategiesToWhitelist, thirdPartyTransfersForbiddenValues); - } - - function test_setThirdPartyTransfersForbidden_revert_notOwner() public { - IStrategy strategy; - - cheats.expectRevert("Ownable: caller is not the owner"); - cheats.prank(notOwner); - strategyFactory.setThirdPartyTransfersForbidden(strategy, true); - } - - function test_setThirdPartyTransfersFrobidden() public { - StrategyBase strategy = _deployStrategy(); - bool thirdPartyTransfersForbidden = true; - - strategyFactory.setThirdPartyTransfersForbidden(strategy, thirdPartyTransfersForbidden); - assertTrue(strategyManagerMock.thirdPartyTransfersForbidden(strategy), "3rd party transfers forbidden not set"); + strategyFactory.whitelistStrategies(strategiesToWhitelist); } function test_removeStrategiesFromWhitelist_revert_notOwner() public { diff --git a/src/test/unit/StrategyManagerUnit.t.sol b/src/test/unit/StrategyManagerUnit.t.sol index e2cac9ab2..a89a6012a 100644 --- a/src/test/unit/StrategyManagerUnit.t.sol +++ b/src/test/unit/StrategyManagerUnit.t.sol @@ -66,17 +66,12 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv _strategies[0] = dummyStrat; _strategies[1] = dummyStrat2; _strategies[2] = dummyStrat3; - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](3); - _thirdPartyTransfersForbiddenValues[0] = false; - _thirdPartyTransfersForbiddenValues[1] = false; - _thirdPartyTransfersForbiddenValues[2] = false; for (uint256 i = 0; i < _strategies.length; ++i) { cheats.expectEmit(true, true, true, true, address(strategyManager)); emit StrategyAddedToDepositWhitelist(_strategies[i]); - cheats.expectEmit(true, true, true, true, address(strategyManager)); - emit UpdatedThirdPartyTransfersForbidden(_strategies[i], _thirdPartyTransfersForbiddenValues[i]); + } - strategyManager.addStrategiesToDepositWhitelist(_strategies, _thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(_strategies); addressIsExcludedFromFuzzedInputs[address(reenterer)] = true; } @@ -219,7 +214,6 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv */ function _addStrategiesToWhitelist(uint8 numberOfStrategiesToAdd) internal returns (IStrategy[] memory) { IStrategy[] memory strategyArray = new IStrategy[](numberOfStrategiesToAdd); - bool[] memory thirdPartyTransfersForbiddenValues = new bool[](numberOfStrategiesToAdd); // loop that deploys a new strategy and adds it to the array for (uint256 i = 0; i < numberOfStrategiesToAdd; ++i) { IStrategy _strategy = _deployNewStrategy(dummyToken, strategyManager, pauserRegistry, dummyAdmin); @@ -232,7 +226,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv cheats.expectEmit(true, true, true, true, address(strategyManager)); emit StrategyAddedToDepositWhitelist(strategyArray[i]); } - strategyManager.addStrategiesToDepositWhitelist(strategyArray, thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(strategyArray); for (uint256 i = 0; i < numberOfStrategiesToAdd; ++i) { assertTrue(strategyManager.strategyIsWhitelistedForDeposit(strategyArray[i]), "strategy not whitelisted"); @@ -342,13 +336,12 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest // whitelist the strategy for deposit cheats.startPrank(strategyManager.owner()); IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory thirdPartyTransfersForbiddenValues = new bool[](1); _strategy[0] = IStrategy(address(reenterer)); for (uint256 i = 0; i < _strategy.length; ++i) { cheats.expectEmit(true, true, true, true, address(strategyManager)); emit StrategyAddedToDepositWhitelist(_strategy[i]); } - strategyManager.addStrategiesToDepositWhitelist(_strategy, thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(_strategy); cheats.stopPrank(); reenterer.prepareReturnData(abi.encode(amount)); @@ -374,10 +367,9 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest // whitelist the strategy for deposit cheats.startPrank(strategyManager.owner()); IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); _strategy[0] = dummyStrat; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(_strategy); cheats.stopPrank(); address staker = address(this); @@ -398,9 +390,8 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest // whitelist the strategy for deposit cheats.startPrank(strategyManager.owner()); IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); _strategy[0] = dummyStrat; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(_strategy); cheats.stopPrank(); address staker = address(this); @@ -420,9 +411,8 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest // whitelist the strategy for deposit cheats.startPrank(strategyManager.owner()); IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); _strategy[0] = dummyStrat; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(_strategy); cheats.stopPrank(); address staker = address(this); @@ -442,10 +432,9 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest // whitelist the strategy for deposit cheats.startPrank(strategyManager.owner()); IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); _strategy[0] = dummyStrat; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(_strategy); cheats.stopPrank(); address staker = address(this); @@ -480,10 +469,9 @@ contract StrategyManagerUnitTests_depositIntoStrategy is StrategyManagerUnitTest // whitelist the strategy for deposit cheats.startPrank(strategyManager.owner()); IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); _strategy[0] = dummyStrat; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(_strategy); cheats.stopPrank(); address staker = address(this); @@ -692,15 +680,13 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa // whitelist the strategy for deposit cheats.startPrank(strategyManager.owner()); IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); - _strategy[0] = IStrategy(address(reenterer)); for (uint256 i = 0; i < _strategy.length; ++i) { cheats.expectEmit(true, true, true, true, address(strategyManager)); emit StrategyAddedToDepositWhitelist(_strategy[i]); } - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(_strategy); cheats.stopPrank(); address staker = cheats.addr(privateKey); @@ -786,19 +772,6 @@ contract StrategyManagerUnitTests_depositIntoStrategyWithSignature is StrategyMa memory expectedRevertMessage = "StrategyManager.onlyStrategiesWhitelistedForDeposit: strategy not whitelisted"; _depositIntoStrategyWithSignature(staker, amount, type(uint256).max, expectedRevertMessage); } - - function testFuzz_Revert_WhenThirdPartyTransfersForbidden(uint256 amount, uint256 expiry) public { - // min shares must be minted on strategy - cheats.assume(amount >= 1); - - cheats.prank(strategyManager.strategyWhitelister()); - strategyManager.setThirdPartyTransfersForbidden(dummyStrat, true); - - address staker = cheats.addr(privateKey); - // not expecting a revert, so input an empty string - string memory expectedRevertMessage = "StrategyManager.depositIntoStrategyWithSignature: third transfers disabled"; - _depositIntoStrategyWithSignature(staker, amount, expiry, expectedRevertMessage); - } } contract StrategyManagerUnitTests_removeShares is StrategyManagerUnitTests { @@ -1090,10 +1063,9 @@ contract StrategyManagerUnitTests_addShares is StrategyManagerUnitTests { // whitelist the strategy for deposit cheats.startPrank(strategyManager.owner()); IStrategy[] memory _strategy = new IStrategy[](1); - bool[] memory _thirdPartyTransfersForbiddenValues = new bool[](1); _strategy[0] = dummyStrat; - strategyManager.addStrategiesToDepositWhitelist(_strategy, _thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(_strategy); cheats.stopPrank(); } @@ -1184,43 +1156,38 @@ contract StrategyManagerUnitTests_addStrategiesToDepositWhitelist is StrategyMan ) external filterFuzzedAddressInputs(notStrategyWhitelister) { cheats.assume(notStrategyWhitelister != strategyManager.strategyWhitelister()); IStrategy[] memory strategyArray = new IStrategy[](1); - bool[] memory thirdPartyTransfersForbiddenValues = new bool[](1); IStrategy _strategy = _deployNewStrategy(dummyToken, strategyManager, pauserRegistry, dummyAdmin); strategyArray[0] = _strategy; cheats.prank(notStrategyWhitelister); cheats.expectRevert("StrategyManager.onlyStrategyWhitelister: not the strategyWhitelister"); - strategyManager.addStrategiesToDepositWhitelist(strategyArray, thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(strategyArray); } function test_AddSingleStrategyToWhitelist() external { IStrategy[] memory strategyArray = new IStrategy[](1); - bool[] memory thirdPartyTransfersForbiddenValues = new bool[](1); IStrategy strategy = _deployNewStrategy(dummyToken, strategyManager, pauserRegistry, dummyAdmin); strategyArray[0] = strategy; assertFalse(strategyManager.strategyIsWhitelistedForDeposit(strategy), "strategy should not be whitelisted"); cheats.expectEmit(true, true, true, true, address(strategyManager)); emit StrategyAddedToDepositWhitelist(strategy); - strategyManager.addStrategiesToDepositWhitelist(strategyArray, thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(strategyArray); assertTrue(strategyManager.strategyIsWhitelistedForDeposit(strategy), "strategy should be whitelisted"); } function test_AddAlreadyWhitelistedStrategy() external { IStrategy[] memory strategyArray = new IStrategy[](1); - bool[] memory thirdPartyTransfersForbiddenValues = new bool[](1); IStrategy strategy = _deployNewStrategy(dummyToken, strategyManager, pauserRegistry, dummyAdmin); strategyArray[0] = strategy; assertFalse(strategyManager.strategyIsWhitelistedForDeposit(strategy), "strategy should not be whitelisted"); cheats.expectEmit(true, true, true, true, address(strategyManager)); emit StrategyAddedToDepositWhitelist(strategy); - cheats.expectEmit(true, true, true, true, address(strategyManager)); - emit UpdatedThirdPartyTransfersForbidden(strategy, false); - strategyManager.addStrategiesToDepositWhitelist(strategyArray, thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(strategyArray); assertTrue(strategyManager.strategyIsWhitelistedForDeposit(strategy), "strategy should be whitelisted"); // Make sure event not emitted by checking logs length cheats.recordLogs(); uint256 numLogsBefore = cheats.getRecordedLogs().length; - strategyManager.addStrategiesToDepositWhitelist(strategyArray, thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(strategyArray); uint256 numLogsAfter = cheats.getRecordedLogs().length; assertEq(numLogsBefore, numLogsAfter, "event emitted when strategy already whitelisted"); assertTrue(strategyManager.strategyIsWhitelistedForDeposit(strategy), "strategy should still be whitelisted"); @@ -1272,12 +1239,11 @@ contract StrategyManagerUnitTests_removeStrategiesFromDepositWhitelist is Strate IStrategy[] memory strategyArray = new IStrategy[](1); IStrategy strategy = _deployNewStrategy(dummyToken, strategyManager, pauserRegistry, dummyAdmin); strategyArray[0] = strategy; - bool[] memory thirdPartyTransfersForbiddenValues = new bool[](1); assertFalse(strategyManager.strategyIsWhitelistedForDeposit(strategy), "strategy should not be whitelisted"); // Add strategy to whitelist first cheats.expectEmit(true, true, true, true, address(strategyManager)); emit StrategyAddedToDepositWhitelist(strategy); - strategyManager.addStrategiesToDepositWhitelist(strategyArray, thirdPartyTransfersForbiddenValues); + strategyManager.addStrategiesToDepositWhitelist(strategyArray); assertTrue(strategyManager.strategyIsWhitelistedForDeposit(strategy), "strategy should be whitelisted"); // Now remove strategy from whitelist From 2e10f7d81180ae4576c7e99c1b00785e4d1e23af Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Thu, 12 Sep 2024 12:13:33 -0400 Subject: [PATCH 23/47] fix: scaledStakerShares equation --- src/contracts/core/DelegationManager.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 3de7a8001..30fd6d79b 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -905,9 +905,11 @@ contract DelegationManager is // NOTE that to prevent numerator overflow, the max sharesToWithdraw is // x*1e36 <= 2^256-1 // => x <= 1.1579e41 + // however we know that the max shares in a strategy is 1e38-1 and all the ETH on the beaconchain staked + // in one eigenPod would be ~3e25. This product here is safe sharesToDecrement = (sharesToWithdraw * SlashingConstants.PRECISION_FACTOR_SQUARED) / (stakerScalingFactor * totalMagnitude); - scaledStakerShares = sharesToWithdraw * stakerScalingFactor / SlashingConstants.PRECISION_FACTOR; + scaledStakerShares = sharesToWithdraw * SlashingConstants.PRECISION_FACTOR / totalMagnitude; return (sharesToDecrement, scaledStakerShares); } From 8223b44806cd4b31f03866110ed8523cf3a66d86 Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Thu, 12 Sep 2024 18:30:04 -0400 Subject: [PATCH 24/47] chore: rebase cleanup and fmt --- .../deploy_from_scratch.anvil.config.json | 55 -- .../deploy_from_scratch.holesky.config.json | 55 -- .../devnet/M2_Deploy_From_Scratch.s.sol | 634 ------------------ .../Deploy_Test_RewardsCoordinator.s.sol | 5 +- .../v040-rc0-holesky-preprod-pepe.s.sol | 69 -- .../v040-rc1-holesky-preprod-pepe.s.sol | 58 -- .../v040-rc2-holesky-preprod-pepe.s.sol | 58 -- .../v040-rc3-holesky-preprod-pepe.s.sol | 58 -- .../v040-rc4-holesky-preprod-pepe.s.sol | 79 --- .../v040-rc5-holesky-preprod-pepe.s.sol | 79 --- script/deploy/local/Upgrade.s.sol | 24 - .../operatorSets/DeployStrategies.s.sol | 0 .../mainnet/Deploy_Strategy_Factory.s.sol | 61 -- script/deploy/mainnet/M1_Deploy.s.sol | 509 -------------- script/deploy/mainnet/M2Deploy.s.sol | 327 --------- src/contracts/core/AVSDirectory.sol | 44 +- src/contracts/core/AVSDirectoryStorage.sol | 4 +- src/contracts/core/AllocationManager.sol | 16 +- src/contracts/core/DelegationManager.sol | 64 +- src/contracts/core/RewardsCoordinator.sol | 89 ++- src/contracts/core/Slasher.sol | 24 +- src/contracts/core/StrategyManager.sol | 34 +- 22 files changed, 189 insertions(+), 2157 deletions(-) delete mode 100644 script/configs/devnet/deploy_from_scratch.anvil.config.json delete mode 100644 script/configs/devnet/deploy_from_scratch.holesky.config.json delete mode 100644 script/deploy/devnet/M2_Deploy_From_Scratch.s.sol delete mode 100644 script/deploy/holesky/v040-rc0-holesky-preprod-pepe.s.sol delete mode 100644 script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol delete mode 100644 script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol delete mode 100644 script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol delete mode 100644 script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol delete mode 100644 script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol delete mode 100644 script/deploy/local/Upgrade.s.sol rename script/deploy/{devnet => local}/operatorSets/DeployStrategies.s.sol (100%) delete mode 100644 script/deploy/mainnet/Deploy_Strategy_Factory.s.sol delete mode 100644 script/deploy/mainnet/M1_Deploy.s.sol delete mode 100644 script/deploy/mainnet/M2Deploy.s.sol diff --git a/script/configs/devnet/deploy_from_scratch.anvil.config.json b/script/configs/devnet/deploy_from_scratch.anvil.config.json deleted file mode 100644 index 96df127e1..000000000 --- a/script/configs/devnet/deploy_from_scratch.anvil.config.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "maintainer": "samlaf@eigenlabs.org", - "multisig_addresses": { - "operationsMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "communityMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "pauserMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "executorMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "timelock": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" - }, - "strategies": [ - { - "token_address": "0x0000000000000000000000000000000000000000", - "token_symbol": "WETH", - "max_per_deposit": 115792089237316195423570985008687907853269984665640564039457584007913129639935, - "max_deposits": 115792089237316195423570985008687907853269984665640564039457584007913129639935 - } - ], - "strategyManager": { - "init_paused_status": 0, - "init_withdrawal_delay_blocks": 1 - }, - "eigenPod": { - "PARTIAL_WITHDRAWAL_FRAUD_PROOF_PERIOD_BLOCKS": 1, - "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR": "32000000000" - }, - "eigenPodManager": { - "init_paused_status": 30 - }, - "delayedWithdrawalRouter": { - "init_paused_status": 0, - "init_withdrawal_delay_blocks": 1 - }, - "slasher": { - "init_paused_status": 0 - }, - "delegation": { - "init_paused_status": 0, - "init_withdrawal_delay_blocks": 1 - }, - "rewardsCoordinator": { - "init_paused_status": 0, - "CALCULATION_INTERVAL_SECONDS": 604800, - "MAX_REWARDS_DURATION": 6048000, - "MAX_RETROACTIVE_LENGTH": 7776000, - "MAX_FUTURE_LENGTH": 2592000, - "GENESIS_REWARDS_TIMESTAMP": 1710979200, - "rewards_updater_address": "0x18a0f92Ad9645385E8A8f3db7d0f6CF7aBBb0aD4", - "activation_delay": 7200, - "calculation_interval_seconds": 604800, - "global_operator_commission_bips": 1000, - "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP": 1720656000, - "OPERATOR_SET_MAX_RETROACTIVE_LENGTH": 2592000 - }, - "ethPOSDepositAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa" -} \ No newline at end of file diff --git a/script/configs/devnet/deploy_from_scratch.holesky.config.json b/script/configs/devnet/deploy_from_scratch.holesky.config.json deleted file mode 100644 index 3dc1f204d..000000000 --- a/script/configs/devnet/deploy_from_scratch.holesky.config.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "maintainer": "samlaf@eigenlabs.org", - "multisig_addresses": { - "operationsMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", - "communityMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", - "pauserMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", - "executorMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", - "timelock": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479" - }, - "strategies": [ - { - "token_address": "0x0000000000000000000000000000000000000000", - "token_symbol": "WETH", - "max_per_deposit": 115792089237316195423570985008687907853269984665640564039457584007913129639935, - "max_deposits": 115792089237316195423570985008687907853269984665640564039457584007913129639935 - } - ], - "strategyManager": { - "init_paused_status": 0, - "init_withdrawal_delay_blocks": 1 - }, - "eigenPod": { - "PARTIAL_WITHDRAWAL_FRAUD_PROOF_PERIOD_BLOCKS": 1, - "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR": "32000000000" - }, - "eigenPodManager": { - "init_paused_status": 30 - }, - "delayedWithdrawalRouter": { - "init_paused_status": 0, - "init_withdrawal_delay_blocks": 1 - }, - "slasher": { - "init_paused_status": 0 - }, - "delegation": { - "init_paused_status": 0, - "init_withdrawal_delay_blocks": 1 - }, - "rewardsCoordinator": { - "init_paused_status": 0, - "CALCULATION_INTERVAL_SECONDS": 604800, - "MAX_REWARDS_DURATION": 6048000, - "MAX_RETROACTIVE_LENGTH": 7776000, - "MAX_FUTURE_LENGTH": 2592000, - "GENESIS_REWARDS_TIMESTAMP": 1710979200, - "rewards_updater_address": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", - "activation_delay": 7200, - "calculation_interval_seconds": 604800, - "global_operator_commission_bips": 1000, - "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP": 1720656000, - "OPERATOR_SET_MAX_RETROACTIVE_LENGTH": 2592000 - }, - "ethPOSDepositAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa" -} \ No newline at end of file diff --git a/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol b/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol deleted file mode 100644 index 6aa80bfa1..000000000 --- a/script/deploy/devnet/M2_Deploy_From_Scratch.s.sol +++ /dev/null @@ -1,634 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; -import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; -import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; - -import "../../../src/contracts/interfaces/IETHPOSDeposit.sol"; - -import "../../../src/contracts/core/StrategyManager.sol"; -import "../../../src/contracts/core/Slasher.sol"; -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/strategies/StrategyBaseTVLLimits.sol"; - -import "../../../src/contracts/pods/EigenPod.sol"; -import "../../../src/contracts/pods/EigenPodManager.sol"; - -import "../../../src/contracts/permissions/PauserRegistry.sol"; - -import "../../../src/test/mocks/EmptyContract.sol"; -import "../../../src/test/mocks/ETHDepositMock.sol"; - -import "forge-std/Script.sol"; -import "forge-std/Test.sol"; - -// # To load the variables in the .env file -// source .env - -// # To deploy and verify our contract -// forge script script/deploy/devnet/M2_Deploy_From_Scratch.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast --sig "run(string memory configFile)" -- M2_deploy_from_scratch.anvil.config.json -contract Deployer_M2 is Script, Test { - Vm cheats = Vm(HEVM_ADDRESS); - - // struct used to encode token info in config file - struct StrategyConfig { - uint256 maxDeposits; - uint256 maxPerDeposit; - address tokenAddress; - string tokenSymbol; - } - - string public deployConfigPath; - - // EigenLayer Contracts - ProxyAdmin public eigenLayerProxyAdmin; - PauserRegistry public eigenLayerPauserReg; - Slasher public slasher; - Slasher public slasherImplementation; - DelegationManager public delegation; - DelegationManager public delegationImplementation; - StrategyManager public strategyManager; - StrategyManager public strategyManagerImplementation; - RewardsCoordinator public rewardsCoordinator; - RewardsCoordinator public rewardsCoordinatorImplementation; - AVSDirectory public avsDirectory; - AVSDirectory public avsDirectoryImplementation; - EigenPodManager public eigenPodManager; - EigenPodManager public eigenPodManagerImplementation; - UpgradeableBeacon public eigenPodBeacon; - EigenPod public eigenPodImplementation; - StrategyBase public baseStrategyImplementation; - AllocationManager public allocationManager; - AllocationManager public allocationManagerImplementation; - - EmptyContract public emptyContract; - - address executorMultisig; - address operationsMultisig; - address pauserMultisig; - - // the ETH2 deposit contract -- if not on mainnet, we deploy a mock as stand-in - IETHPOSDeposit public ethPOSDeposit; - - // strategies deployed - StrategyBaseTVLLimits[] public deployedStrategyArray; - - // IMMUTABLES TO SET - uint64 GOERLI_GENESIS_TIME = 1616508000; - - // OTHER DEPLOYMENT PARAMETERS - uint256 STRATEGY_MANAGER_INIT_PAUSED_STATUS; - uint256 SLASHER_INIT_PAUSED_STATUS; - uint256 DELEGATION_INIT_PAUSED_STATUS; - uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS; - uint256 REWARDS_COORDINATOR_INIT_PAUSED_STATUS; - - // RewardsCoordinator - uint32 REWARDS_COORDINATOR_MAX_REWARDS_DURATION; - uint32 REWARDS_COORDINATOR_MAX_RETROACTIVE_LENGTH; - uint32 REWARDS_COORDINATOR_MAX_FUTURE_LENGTH; - uint32 REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP; - address REWARDS_COORDINATOR_UPDATER; - uint32 REWARDS_COORDINATOR_ACTIVATION_DELAY; - uint32 REWARDS_COORDINATOR_CALCULATION_INTERVAL_SECONDS; - uint32 REWARDS_COORDINATOR_GLOBAL_OPERATOR_COMMISSION_BIPS; - uint32 REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP; - uint32 REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH; - - // one week in blocks -- 50400 - uint32 STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS; - uint256 DELEGATION_WITHDRAWAL_DELAY_BLOCKS; - - function run(string memory configFileName) external { - // read and log the chainID - uint256 chainId = block.chainid; - emit log_named_uint("You are deploying on ChainID", chainId); - - // READ JSON CONFIG DATA - deployConfigPath = string(bytes(string.concat("script/configs/devnet/", configFileName))); - string memory config_data = vm.readFile(deployConfigPath); - // bytes memory parsedData = vm.parseJson(config_data); - - STRATEGY_MANAGER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".strategyManager.init_paused_status"); - SLASHER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".slasher.init_paused_status"); - DELEGATION_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".delegation.init_paused_status"); - DELEGATION_WITHDRAWAL_DELAY_BLOCKS = stdJson.readUint(config_data, ".delegation.init_withdrawal_delay_blocks"); - EIGENPOD_MANAGER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".eigenPodManager.init_paused_status"); - REWARDS_COORDINATOR_INIT_PAUSED_STATUS = stdJson.readUint( - config_data, - ".rewardsCoordinator.init_paused_status" - ); - REWARDS_COORDINATOR_CALCULATION_INTERVAL_SECONDS = uint32( - stdJson.readUint(config_data, ".rewardsCoordinator.CALCULATION_INTERVAL_SECONDS") - ); - REWARDS_COORDINATOR_MAX_REWARDS_DURATION = uint32(stdJson.readUint(config_data, ".rewardsCoordinator.MAX_REWARDS_DURATION")); - REWARDS_COORDINATOR_MAX_RETROACTIVE_LENGTH = uint32(stdJson.readUint(config_data, ".rewardsCoordinator.MAX_RETROACTIVE_LENGTH")); - REWARDS_COORDINATOR_MAX_FUTURE_LENGTH = uint32(stdJson.readUint(config_data, ".rewardsCoordinator.MAX_FUTURE_LENGTH")); - REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP = uint32(stdJson.readUint(config_data, ".rewardsCoordinator.GENESIS_REWARDS_TIMESTAMP")); - REWARDS_COORDINATOR_UPDATER = stdJson.readAddress(config_data, ".rewardsCoordinator.rewards_updater_address"); - REWARDS_COORDINATOR_ACTIVATION_DELAY = uint32(stdJson.readUint(config_data, ".rewardsCoordinator.activation_delay")); - REWARDS_COORDINATOR_CALCULATION_INTERVAL_SECONDS = uint32( - stdJson.readUint(config_data, ".rewardsCoordinator.calculation_interval_seconds") - ); - REWARDS_COORDINATOR_GLOBAL_OPERATOR_COMMISSION_BIPS = uint32( - stdJson.readUint(config_data, ".rewardsCoordinator.global_operator_commission_bips") - ); - REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP = uint32( - stdJson.readUint(config_data, ".rewardsCoordinator.OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP") - ); - REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH = uint32( - stdJson.readUint(config_data, ".rewardsCoordinator.OPERATOR_SET_MAX_RETROACTIVE_LENGTH") - ); - - STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS = uint32( - stdJson.readUint(config_data, ".strategyManager.init_withdrawal_delay_blocks") - ); - - // tokens to deploy strategies for - StrategyConfig[] memory strategyConfigs; - - executorMultisig = stdJson.readAddress(config_data, ".multisig_addresses.executorMultisig"); - operationsMultisig = stdJson.readAddress(config_data, ".multisig_addresses.operationsMultisig"); - pauserMultisig = stdJson.readAddress(config_data, ".multisig_addresses.pauserMultisig"); - // load token list - bytes memory strategyConfigsRaw = stdJson.parseRaw(config_data, ".strategies"); - strategyConfigs = abi.decode(strategyConfigsRaw, (StrategyConfig[])); - - require(executorMultisig != address(0), "executorMultisig address not configured correctly!"); - require(operationsMultisig != address(0), "operationsMultisig address not configured correctly!"); - - // START RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.startBroadcast(); - - // deploy proxy admin for ability to upgrade proxy contracts - eigenLayerProxyAdmin = new ProxyAdmin(); - - //deploy pauser registry - { - address[] memory pausers = new address[](3); - pausers[0] = executorMultisig; - pausers[1] = operationsMultisig; - pausers[2] = pauserMultisig; - eigenLayerPauserReg = new PauserRegistry(pausers, executorMultisig); - } - - /** - * First, deploy upgradeable proxy contracts that **will point** to the implementations. Since the implementation contracts are - * not yet deployed, we give these proxies an empty contract as the initial implementation, to act as if they have no code. - */ - emptyContract = new EmptyContract(); - delegation = DelegationManager( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - strategyManager = StrategyManager( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - avsDirectory = AVSDirectory( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - slasher = Slasher( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - eigenPodManager = EigenPodManager( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - rewardsCoordinator = RewardsCoordinator( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - allocationManager = AllocationManager( - address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) - ); - - // 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, - GOERLI_GENESIS_TIME - ); - - eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); - - // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); - strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher, avsDirectory); - avsDirectoryImplementation = new AVSDirectory(delegation); - slasherImplementation = new Slasher(strategyManager, delegation); - eigenPodManagerImplementation = new EigenPodManager( - ethPOSDeposit, - eigenPodBeacon, - strategyManager, - slasher, - delegation - ); - rewardsCoordinatorImplementation = new RewardsCoordinator( - delegation, - strategyManager, - avsDirectory, - 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, - REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, - REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH - ); - - // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. - { - IStrategy[] memory _strategies; - uint256[] memory _withdrawalDelayBlocks; - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(delegation))), - address(delegationImplementation), - abi.encodeWithSelector( - DelegationManager.initialize.selector, - executorMultisig, - eigenLayerPauserReg, - DELEGATION_INIT_PAUSED_STATUS, - DELEGATION_WITHDRAWAL_DELAY_BLOCKS, - _strategies, - _withdrawalDelayBlocks - ) - ); - } - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(strategyManager))), - address(strategyManagerImplementation), - abi.encodeWithSelector( - StrategyManager.initialize.selector, - executorMultisig, - operationsMultisig, - eigenLayerPauserReg, - STRATEGY_MANAGER_INIT_PAUSED_STATUS - ) - ); - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(slasher))), - address(slasherImplementation), - abi.encodeWithSelector( - Slasher.initialize.selector, - executorMultisig, - eigenLayerPauserReg, - SLASHER_INIT_PAUSED_STATUS - ) - ); - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(avsDirectory))), - address(avsDirectoryImplementation), - abi.encodeWithSelector(AVSDirectory.initialize.selector, executorMultisig, eigenLayerPauserReg, 0) - ); - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(eigenPodManager))), - address(eigenPodManagerImplementation), - abi.encodeWithSelector( - EigenPodManager.initialize.selector, - executorMultisig, - eigenLayerPauserReg, - EIGENPOD_MANAGER_INIT_PAUSED_STATUS - ) - ); - eigenLayerProxyAdmin.upgradeAndCall( - TransparentUpgradeableProxy(payable(address(rewardsCoordinator))), - address(rewardsCoordinatorImplementation), - abi.encodeWithSelector( - RewardsCoordinator.initialize.selector, - executorMultisig, - eigenLayerPauserReg, - REWARDS_COORDINATOR_INIT_PAUSED_STATUS, - REWARDS_COORDINATOR_UPDATER, - REWARDS_COORDINATOR_ACTIVATION_DELAY, - REWARDS_COORDINATOR_GLOBAL_OPERATOR_COMMISSION_BIPS - ) - ); - - // deploy StrategyBaseTVLLimits contract implementation - baseStrategyImplementation = new StrategyBaseTVLLimits(strategyManager); - // create upgradeable proxies that each point to the implementation and initialize them - for (uint256 i = 0; i < strategyConfigs.length; ++i) { - deployedStrategyArray.push( - StrategyBaseTVLLimits( - address( - new TransparentUpgradeableProxy( - address(baseStrategyImplementation), - address(eigenLayerProxyAdmin), - abi.encodeWithSelector( - StrategyBaseTVLLimits.initialize.selector, - strategyConfigs[i].maxPerDeposit, - strategyConfigs[i].maxDeposits, - IERC20(strategyConfigs[i].tokenAddress), - eigenLayerPauserReg - ) - ) - ) - ) - ); - } - - eigenLayerProxyAdmin.transferOwnership(executorMultisig); - eigenPodBeacon.transferOwnership(executorMultisig); - - // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.stopBroadcast(); - - // CHECK CORRECTNESS OF DEPLOYMENT - _verifyContractsPointAtOneAnother( - delegationImplementation, - strategyManagerImplementation, - slasherImplementation, - eigenPodManagerImplementation, - rewardsCoordinatorImplementation - ); - _verifyContractsPointAtOneAnother( - delegation, - strategyManager, - slasher, - eigenPodManager, - rewardsCoordinator - ); - _verifyImplementationsSetCorrectly(); - _verifyInitialOwners(); - _checkPauserInitializations(); - _verifyInitializationParams(); - - // WRITE JSON DATA - string memory parent_object = "parent object"; - - string memory deployed_strategies = "strategies"; - for (uint256 i = 0; i < strategyConfigs.length; ++i) { - vm.serializeAddress(deployed_strategies, strategyConfigs[i].tokenSymbol, address(deployedStrategyArray[i])); - } - string memory deployed_strategies_output = strategyConfigs.length == 0 - ? "" - : vm.serializeAddress( - deployed_strategies, - strategyConfigs[strategyConfigs.length - 1].tokenSymbol, - address(deployedStrategyArray[strategyConfigs.length - 1]) - ); - - string memory deployed_addresses = "addresses"; - vm.serializeAddress(deployed_addresses, "eigenLayerProxyAdmin", address(eigenLayerProxyAdmin)); - vm.serializeAddress(deployed_addresses, "eigenLayerPauserReg", address(eigenLayerPauserReg)); - vm.serializeAddress(deployed_addresses, "slasher", address(slasher)); - vm.serializeAddress(deployed_addresses, "slasherImplementation", address(slasherImplementation)); - vm.serializeAddress(deployed_addresses, "delegation", address(delegation)); - vm.serializeAddress(deployed_addresses, "delegationImplementation", address(delegationImplementation)); - vm.serializeAddress(deployed_addresses, "avsDirectory", address(avsDirectory)); - vm.serializeAddress(deployed_addresses, "avsDirectoryImplementation", address(avsDirectoryImplementation)); - vm.serializeAddress(deployed_addresses, "strategyManager", address(strategyManager)); - vm.serializeAddress( - deployed_addresses, - "strategyManagerImplementation", - address(strategyManagerImplementation) - ); - vm.serializeAddress(deployed_addresses, "eigenPodManager", address(eigenPodManager)); - vm.serializeAddress( - deployed_addresses, - "eigenPodManagerImplementation", - address(eigenPodManagerImplementation) - ); - vm.serializeAddress(deployed_addresses, "rewardsCoordinator", address(rewardsCoordinator)); - vm.serializeAddress( - deployed_addresses, - "rewardsCoordinatorImplementation", - address(rewardsCoordinatorImplementation) - ); - vm.serializeAddress(deployed_addresses, "eigenPodBeacon", address(eigenPodBeacon)); - vm.serializeAddress(deployed_addresses, "eigenPodImplementation", address(eigenPodImplementation)); - vm.serializeAddress(deployed_addresses, "baseStrategyImplementation", address(baseStrategyImplementation)); - vm.serializeAddress(deployed_addresses, "emptyContract", address(emptyContract)); - string memory deployed_addresses_output = vm.serializeString( - deployed_addresses, - "strategies", - deployed_strategies_output - ); - - string memory parameters = "parameters"; - vm.serializeAddress(parameters, "executorMultisig", executorMultisig); - string memory parameters_output = vm.serializeAddress(parameters, "operationsMultisig", operationsMultisig); - - string memory chain_info = "chainInfo"; - vm.serializeUint(chain_info, "deploymentBlock", block.number); - string memory chain_info_output = vm.serializeUint(chain_info, "chainId", chainId); - - // serialize all the data - vm.serializeString(parent_object, deployed_addresses, deployed_addresses_output); - vm.serializeString(parent_object, chain_info, chain_info_output); - string memory finalJson = vm.serializeString(parent_object, parameters, parameters_output); - // TODO: should output to different file depending on configFile passed to run() - // so that we don't override mainnet output by deploying to goerli for eg. - vm.writeJson(finalJson, "script/output/devnet/M2_from_scratch_deployment_data.json"); - } - - function _verifyContractsPointAtOneAnother( - DelegationManager delegationContract, - StrategyManager strategyManagerContract, - Slasher /*slasherContract*/, - EigenPodManager eigenPodManagerContract, - RewardsCoordinator rewardsCoordinatorContract - ) internal view { - require(delegationContract.slasher() == slasher, "delegation: slasher address not set correctly"); - require( - delegationContract.strategyManager() == strategyManager, - "delegation: strategyManager address not set correctly" - ); - - require(strategyManagerContract.slasher() == slasher, "strategyManager: slasher address not set correctly"); - require( - strategyManagerContract.delegation() == delegation, - "strategyManager: delegation address not set correctly" - ); - require( - strategyManagerContract.eigenPodManager() == eigenPodManager, - "strategyManager: eigenPodManager address not set correctly" - ); - - // removing slasher requirements because there is no slasher as part of m2-mainnet release - // require(slasherContract.strategyManager() == strategyManager, "slasher: strategyManager not set correctly"); - // require(slasherContract.delegation() == delegation, "slasher: delegation not set correctly"); - - require( - eigenPodManagerContract.ethPOS() == ethPOSDeposit, - " eigenPodManager: ethPOSDeposit contract address not set correctly" - ); - require( - eigenPodManagerContract.eigenPodBeacon() == eigenPodBeacon, - "eigenPodManager: eigenPodBeacon contract address not set correctly" - ); - require( - eigenPodManagerContract.strategyManager() == strategyManager, - "eigenPodManager: strategyManager contract address not set correctly" - ); - require( - eigenPodManagerContract.slasher() == slasher, - "eigenPodManager: slasher contract address not set correctly" - ); - - require( - rewardsCoordinatorContract.delegationManager() == delegation, - "rewardsCoordinator: delegation address not set correctly" - ); - - require( - rewardsCoordinatorContract.strategyManager() == strategyManager, - "rewardsCoordinator: strategyManager address not set correctly" - ); - } - - function _verifyImplementationsSetCorrectly() internal view { - require( - eigenLayerProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(delegation)))) == - address(delegationImplementation), - "delegation: implementation set incorrectly" - ); - require( - eigenLayerProxyAdmin.getProxyImplementation( - TransparentUpgradeableProxy(payable(address(strategyManager))) - ) == address(strategyManagerImplementation), - "strategyManager: implementation set incorrectly" - ); - require( - eigenLayerProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(slasher)))) == - address(slasherImplementation), - "slasher: implementation set incorrectly" - ); - require( - eigenLayerProxyAdmin.getProxyImplementation( - TransparentUpgradeableProxy(payable(address(eigenPodManager))) - ) == address(eigenPodManagerImplementation), - "eigenPodManager: implementation set incorrectly" - ); - require( - eigenLayerProxyAdmin.getProxyImplementation( - TransparentUpgradeableProxy(payable(address(rewardsCoordinator))) - ) == address(rewardsCoordinatorImplementation), - "rewardsCoordinator: implementation set incorrectly" - ); - - for (uint256 i = 0; i < deployedStrategyArray.length; ++i) { - require( - eigenLayerProxyAdmin.getProxyImplementation( - TransparentUpgradeableProxy(payable(address(deployedStrategyArray[i]))) - ) == address(baseStrategyImplementation), - "strategy: implementation set incorrectly" - ); - } - - require( - eigenPodBeacon.implementation() == address(eigenPodImplementation), - "eigenPodBeacon: implementation set incorrectly" - ); - } - - function _verifyInitialOwners() internal view { - require(strategyManager.owner() == executorMultisig, "strategyManager: owner not set correctly"); - require(delegation.owner() == executorMultisig, "delegation: owner not set correctly"); - // removing slasher requirements because there is no slasher as part of m2-mainnet release - // require(slasher.owner() == executorMultisig, "slasher: owner not set correctly"); - require(eigenPodManager.owner() == executorMultisig, "eigenPodManager: owner not set correctly"); - - require(eigenLayerProxyAdmin.owner() == executorMultisig, "eigenLayerProxyAdmin: owner not set correctly"); - require(eigenPodBeacon.owner() == executorMultisig, "eigenPodBeacon: owner not set correctly"); - } - - function _checkPauserInitializations() internal view { - require(delegation.pauserRegistry() == eigenLayerPauserReg, "delegation: pauser registry not set correctly"); - require( - strategyManager.pauserRegistry() == eigenLayerPauserReg, - "strategyManager: pauser registry not set correctly" - ); - // removing slasher requirements because there is no slasher as part of m2-mainnet release - // require(slasher.pauserRegistry() == eigenLayerPauserReg, "slasher: pauser registry not set correctly"); - require( - eigenPodManager.pauserRegistry() == eigenLayerPauserReg, - "eigenPodManager: pauser registry not set correctly" - ); - require( - rewardsCoordinator.pauserRegistry() == eigenLayerPauserReg, - "rewardsCoordinator: pauser registry not set correctly" - ); - - require(eigenLayerPauserReg.isPauser(operationsMultisig), "pauserRegistry: operationsMultisig is not pauser"); - require(eigenLayerPauserReg.isPauser(executorMultisig), "pauserRegistry: executorMultisig is not pauser"); - require(eigenLayerPauserReg.isPauser(pauserMultisig), "pauserRegistry: pauserMultisig is not pauser"); - require(eigenLayerPauserReg.unpauser() == executorMultisig, "pauserRegistry: unpauser not set correctly"); - - for (uint256 i = 0; i < deployedStrategyArray.length; ++i) { - require( - deployedStrategyArray[i].pauserRegistry() == eigenLayerPauserReg, - "StrategyBaseTVLLimits: pauser registry not set correctly" - ); - require( - deployedStrategyArray[i].paused() == 0, - "StrategyBaseTVLLimits: init paused status set incorrectly" - ); - } - - // // pause *nothing* - // uint256 STRATEGY_MANAGER_INIT_PAUSED_STATUS = 0; - // // pause *everything* - // uint256 SLASHER_INIT_PAUSED_STATUS = type(uint256).max; - // // pause *everything* - // uint256 DELEGATION_INIT_PAUSED_STATUS = type(uint256).max; - // // pause *all of the proof-related functionality* (everything that can be paused other than creation of EigenPods) - // uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS = (2**1) + (2**2) + (2**3) + (2**4); /* = 30 */ - // // pause *nothing* - // require(strategyManager.paused() == 0, "strategyManager: init paused status set incorrectly"); - // require(slasher.paused() == type(uint256).max, "slasher: init paused status set incorrectly"); - // require(delegation.paused() == type(uint256).max, "delegation: init paused status set incorrectly"); - // require(eigenPodManager.paused() == 30, "eigenPodManager: init paused status set incorrectly"); - } - - function _verifyInitializationParams() internal { - // // one week in blocks -- 50400 - // uint32 STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS = 7 days / 12 seconds; - // require(strategyManager.withdrawalDelayBlocks() == 7 days / 12 seconds, - // "strategyManager: withdrawalDelayBlocks initialized incorrectly"); - // uint256 MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR = 32 ether; - - require( - strategyManager.strategyWhitelister() == operationsMultisig, - "strategyManager: strategyWhitelister address not set correctly" - ); - - require( - baseStrategyImplementation.strategyManager() == strategyManager, - "baseStrategyImplementation: strategyManager set incorrectly" - ); - - require( - eigenPodImplementation.ethPOS() == ethPOSDeposit, - "eigenPodImplementation: ethPOSDeposit contract address not set correctly" - ); - require( - eigenPodImplementation.eigenPodManager() == eigenPodManager, - " eigenPodImplementation: eigenPodManager contract address not set correctly" - ); - - string memory config_data = vm.readFile(deployConfigPath); - for (uint i = 0; i < deployedStrategyArray.length; i++) { - uint256 maxPerDeposit = stdJson.readUint( - config_data, - string.concat(".strategies[", vm.toString(i), "].max_per_deposit") - ); - uint256 maxDeposits = stdJson.readUint( - config_data, - string.concat(".strategies[", vm.toString(i), "].max_deposits") - ); - (uint256 setMaxPerDeposit, uint256 setMaxDeposits) = deployedStrategyArray[i].getTVLLimits(); - require(setMaxPerDeposit == maxPerDeposit, "setMaxPerDeposit not set correctly"); - require(setMaxDeposits == maxDeposits, "setMaxDeposits not set correctly"); - } - } -} diff --git a/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol b/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol index c8c1ebf2c..b418737db 100644 --- a/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol +++ b/script/deploy/holesky/Deploy_Test_RewardsCoordinator.s.sol @@ -125,11 +125,14 @@ contract Deploy_Test_RewardsCoordinator is ExistingDeploymentParser { rewardsCoordinatorImplementation = new RewardsCoordinator( delegationManager, strategyManager, + avsDirectory, 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 + REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH ); } } diff --git a/script/deploy/holesky/v040-rc0-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc0-holesky-preprod-pepe.s.sol deleted file mode 100644 index dcda13066..000000000 --- a/script/deploy/holesky/v040-rc0-holesky-preprod-pepe.s.sol +++ /dev/null @@ -1,69 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "../../utils/ExistingDeploymentParser.sol"; - -/** - * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod - * anvil --fork-url $RPC_HOLESKY - * forge script script/deploy/holesky/EigenPod_Checkpoint_Deploy_Preprod.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv - * forge script script/deploy/holesky/EigenPod_Checkpoint_Deploy_Preprod.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv - */ -contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { - - address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - - function run() external virtual { - _parseInitialDeploymentParams( - "script/configs/holesky/eigenlayer_preprod.config.json" - ); - _parseDeployedContracts( - "script/configs/holesky/eigenlayer_addresses_preprod.config.json" - ); - - // START RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.startBroadcast(); - - emit log_named_address("Deployer Address", msg.sender); - - _upgradeEigenPodAndEPM(); - - // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.stopBroadcast(); - - // Sanity Checks - _verifyContractPointers(); - _verifyImplementations(); - _verifyContractsInitialized(); - _verifyInitializationParams(); - - logAndOutputContractAddresses("script/output/holesky/v040-rc0.output.json"); - } - - /** - * @notice Deploy EigenPod and EPM Implementation for Holesky preprod and upgrade the beacon/proxy - */ - function _upgradeEigenPodAndEPM() internal { - // Deploy implementations - eigenPodManagerImplementation = new EigenPodManager( - IETHPOSDeposit(ETHPOSDepositAddress), - eigenPodBeacon, - strategyManager, - slasher, - delegationManager - ); - eigenPodImplementation = new EigenPod( - IETHPOSDeposit(ETHPOSDepositAddress), - eigenPodManager, - EIGENPOD_GENESIS_TIME - ); - - // upgrade TUPS and UpgradeableBeacon - eigenLayerProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(eigenPodManager))), - address(eigenPodManagerImplementation) - ); - eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); - } -} diff --git a/script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol deleted file mode 100644 index 689dd59da..000000000 --- a/script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol +++ /dev/null @@ -1,58 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "../../utils/ExistingDeploymentParser.sol"; - -/** - * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod - * anvil --fork-url $RPC_HOLESKY - * forge script script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv - * forge script script/deploy/holesky/v040-rc1-holesky-preprod-pepe.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv - */ -contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { - - address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - - function run() external virtual { - _parseInitialDeploymentParams( - "script/configs/holesky/eigenlayer_preprod.config.json" - ); - _parseDeployedContracts( - "script/configs/holesky/eigenlayer_addresses_preprod.config.json" - ); - - emit log_named_address("Deployer Address", msg.sender); - - // START RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.startBroadcast(); - - _upgradeEigenPods(); - - // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.stopBroadcast(); - - // Sanity Checks - _verifyContractPointers(); - _verifyImplementations(); - _verifyContractsInitialized(); - _verifyInitializationParams(); - - logAndOutputContractAddresses("script/output/holesky/v040-rc1.output.json"); - } - - /** - * @notice Deploy EigenPod Implementation for Holesky preprod and upgrade the beacon - */ - function _upgradeEigenPods() internal { - // Deploy implementation - eigenPodImplementation = new EigenPod( - IETHPOSDeposit(ETHPOSDepositAddress), - eigenPodManager, - EIGENPOD_GENESIS_TIME - ); - - // upgrade UpgradeableBeacon - eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); - } -} diff --git a/script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol deleted file mode 100644 index eaac79fff..000000000 --- a/script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol +++ /dev/null @@ -1,58 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "../../utils/ExistingDeploymentParser.sol"; - -/** - * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod - * anvil --fork-url $RPC_HOLESKY - * forge script script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv - * forge script script/deploy/holesky/v040-rc2-holesky-preprod-pepe.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv - */ -contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { - - address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - - function run() external virtual { - _parseInitialDeploymentParams( - "script/configs/holesky/eigenlayer_preprod.config.json" - ); - _parseDeployedContracts( - "script/configs/holesky/eigenlayer_addresses_preprod.config.json" - ); - - emit log_named_address("Deployer Address", msg.sender); - - // START RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.startBroadcast(); - - _upgradeEigenPods(); - - // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.stopBroadcast(); - - // Sanity Checks - _verifyContractPointers(); - _verifyImplementations(); - _verifyContractsInitialized(); - _verifyInitializationParams(); - - logAndOutputContractAddresses("script/output/holesky/v040-rc2.output.json"); - } - - /** - * @notice Deploy EigenPod Implementation for Holesky preprod and upgrade the beacon - */ - function _upgradeEigenPods() internal { - // Deploy implementation - eigenPodImplementation = new EigenPod( - IETHPOSDeposit(ETHPOSDepositAddress), - eigenPodManager, - EIGENPOD_GENESIS_TIME - ); - - // upgrade UpgradeableBeacon - eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); - } -} diff --git a/script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol deleted file mode 100644 index 7124f097f..000000000 --- a/script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol +++ /dev/null @@ -1,58 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "../../utils/ExistingDeploymentParser.sol"; - -/** - * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod - * anvil --fork-url $RPC_HOLESKY - * forge script script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv - * forge script script/deploy/holesky/v040-rc3-holesky-preprod-pepe.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv - */ -contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { - - address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - - function run() external virtual { - _parseInitialDeploymentParams( - "script/configs/holesky/eigenlayer_preprod.config.json" - ); - _parseDeployedContracts( - "script/configs/holesky/eigenlayer_addresses_preprod.config.json" - ); - - emit log_named_address("Deployer Address", msg.sender); - - // START RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.startBroadcast(); - - _upgradeEigenPods(); - - // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.stopBroadcast(); - - // Sanity Checks - _verifyContractPointers(); - _verifyImplementations(); - _verifyContractsInitialized(); - _verifyInitializationParams(); - - logAndOutputContractAddresses("script/output/holesky/v040-rc3.output.json"); - } - - /** - * @notice Deploy EigenPod Implementation for Holesky preprod and upgrade the beacon - */ - function _upgradeEigenPods() internal { - // Deploy implementation - eigenPodImplementation = new EigenPod( - IETHPOSDeposit(ETHPOSDepositAddress), - eigenPodManager, - EIGENPOD_GENESIS_TIME - ); - - // upgrade UpgradeableBeacon - eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); - } -} diff --git a/script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol deleted file mode 100644 index 20243dd8b..000000000 --- a/script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "../../utils/ExistingDeploymentParser.sol"; - -/** - * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod - * anvil --fork-url $RPC_HOLESKY - * forge script script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv - * forge script script/deploy/holesky/v040-rc4-holesky-preprod-pepe.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv - */ -contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { - - address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - - function run() external virtual { - _parseInitialDeploymentParams( - "script/configs/holesky/eigenlayer_preprod.config.json" - ); - _parseDeployedContracts( - "script/configs/holesky/eigenlayer_addresses_preprod.config.json" - ); - - emit log_named_address("Deployer Address", msg.sender); - - // START RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.startBroadcast(); - - _upgradeEigenPods(); - _upgradeEigenPodManager(); - - // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.stopBroadcast(); - - // Sanity Checks - _verifyContractPointers(); - _verifyImplementations(); - _verifyContractsInitialized(); - _verifyInitializationParams(); - - logAndOutputContractAddresses("script/output/holesky/v040-rc4.output.json"); - } - - /** - * @notice Deploy EigenPod Implementation for Holesky preprod and upgrade the beacon - */ - function _upgradeEigenPods() internal { - // Deploy implementation - eigenPodImplementation = new EigenPod( - IETHPOSDeposit(ETHPOSDepositAddress), - eigenPodManager, - EIGENPOD_GENESIS_TIME - ); - - // upgrade UpgradeableBeacon - eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); - } - - /** - * @notice Deploy EPM Implementation for Holesky preprod and upgrade its proxy - */ - function _upgradeEigenPodManager() internal { - // Deploy implementation - eigenPodManagerImplementation = new EigenPodManager( - IETHPOSDeposit(ETHPOSDepositAddress), - eigenPodBeacon, - strategyManager, - slasher, - delegationManager - ); - - // upgrade TUPS - eigenLayerProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(eigenPodManager))), - address(eigenPodManagerImplementation) - ); - } -} diff --git a/script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol b/script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol deleted file mode 100644 index 849da6a29..000000000 --- a/script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "../../utils/ExistingDeploymentParser.sol"; - -/** - * @notice Script used for upgrading EigenPod and EPM Implementation for Holesky preprod - * anvil --fork-url $RPC_HOLESKY - * forge script script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv - * forge script script/deploy/holesky/v040-rc5-holesky-preprod-pepe.s.sol --rpc-url $RPC_HOLESKY --private-key $PRIVATE_KEY --verify --broadcast -vvvv - */ -contract EigenPod_Checkpoint_Deploy_Preprod is ExistingDeploymentParser { - - address testAddress = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - address initOwner = 0xDA29BB71669f46F2a779b4b62f03644A84eE3479; - - function run() external virtual { - _parseInitialDeploymentParams( - "script/configs/holesky/eigenlayer_preprod.config.json" - ); - _parseDeployedContracts( - "script/configs/holesky/eigenlayer_addresses_preprod.config.json" - ); - - emit log_named_address("Deployer Address", msg.sender); - - // START RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.startBroadcast(); - - _upgradeEigenPods(); - _upgradeEigenPodManager(); - - // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.stopBroadcast(); - - // Sanity Checks - _verifyContractPointers(); - _verifyImplementations(); - _verifyContractsInitialized(); - _verifyInitializationParams(); - - logAndOutputContractAddresses("script/output/holesky/v040-rc5.output.json"); - } - - /** - * @notice Deploy EigenPod Implementation for Holesky preprod and upgrade the beacon - */ - function _upgradeEigenPods() internal { - // Deploy implementation - eigenPodImplementation = new EigenPod( - IETHPOSDeposit(ETHPOSDepositAddress), - eigenPodManager, - EIGENPOD_GENESIS_TIME - ); - - // upgrade UpgradeableBeacon - eigenPodBeacon.upgradeTo(address(eigenPodImplementation)); - } - - /** - * @notice Deploy EPM Implementation for Holesky preprod and upgrade its proxy - */ - function _upgradeEigenPodManager() internal { - // Deploy implementation - eigenPodManagerImplementation = new EigenPodManager( - IETHPOSDeposit(ETHPOSDepositAddress), - eigenPodBeacon, - strategyManager, - slasher, - delegationManager - ); - - // upgrade TUPS - eigenLayerProxyAdmin.upgrade( - TransparentUpgradeableProxy(payable(address(eigenPodManager))), - address(eigenPodManagerImplementation) - ); - } -} diff --git a/script/deploy/local/Upgrade.s.sol b/script/deploy/local/Upgrade.s.sol deleted file mode 100644 index 8127d4420..000000000 --- a/script/deploy/local/Upgrade.s.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; -import "../../utils/ExistingDeploymentParser.sol"; - -// # To load the variables in the .env file -// source .env - -// Generic upgrade script, DOES NOT UPDATE IMPLEMENTATION IN OUTPUT FILE -// forge script script/deploy/devnet/Upgrade.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY -contract Upgrade is ExistingDeploymentParser { - - function run() external { - // EDIT this for your script - _parseDeployedContracts("script/output/holesky/pre_preprod_slashing.holesky.json"); - - vm.startBroadcast(); - AVSDirectory newAVSDirectoryImplementation = new AVSDirectory(delegationManager); - eigenLayerProxyAdmin.upgrade(TransparentUpgradeableProxy(payable(address(avsDirectory))), address(newAVSDirectoryImplementation)); - vm.stopBroadcast(); - - } -} \ No newline at end of file diff --git a/script/deploy/devnet/operatorSets/DeployStrategies.s.sol b/script/deploy/local/operatorSets/DeployStrategies.s.sol similarity index 100% rename from script/deploy/devnet/operatorSets/DeployStrategies.s.sol rename to script/deploy/local/operatorSets/DeployStrategies.s.sol diff --git a/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol b/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol deleted file mode 100644 index fa5d93707..000000000 --- a/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol +++ /dev/null @@ -1,61 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "@openzeppelin/contracts/utils/Create2.sol"; -import "../../utils/ExistingDeploymentParser.sol"; - -import "../../../src/contracts/strategies/StrategyFactory.sol"; - -/** - * @notice Script used for the first deployment of EigenLayer core contracts to Holesky - * FORK LOCAL - * anvil --fork-url $RPC_MAINNET - * forge script script/deploy/mainnet/Deploy_Strategy_Factory.s.sol:MainnetStrategyFactoryDeploy --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv - * - * MAINNET - * forge script script/deploy/mainnet/Deploy_Strategy_Factory.s.sol:MainnetStrategyFactoryDeploy --rpc-url $RPC_MAINNET --private-key $PRIVATE_KEY --verify --broadcast -vvvv - * - */ - -contract MainnetStrategyFactoryDeploy is ExistingDeploymentParser { - function run() external virtual { - // Use rewards config - _parseInitialDeploymentParams( - "script/configs/mainnet/v0.3.0-mainnet-rewards.config.json" - ); - _parseDeployedContracts( - "script/configs/mainnet/Mainnet_curent_deployment.config.json" - ); - - // START RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.startBroadcast(); - - emit log_named_address("Deployer Address", msg.sender); - - _deployStrategyFactory(); - - // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT - vm.stopBroadcast(); - - // Sanity Checks - _verifyContractPointers(); - _verifyImplementations(); - _verifyContractsInitialized(); - _verifyInitializationParams(); - - logAndOutputContractAddresses("script/output/mainnet/v0.3.2-mainnet-strategy-factory.output.json"); - } - - /** - * @notice Deploy StrategyFactory for Mainnet - */ - - function _deployStrategyFactory() internal { - strategyFactoryImplementation = new StrategyFactory( - strategyManager - ); - - - - } -} \ No newline at end of file diff --git a/script/deploy/mainnet/M1_Deploy.s.sol b/script/deploy/mainnet/M1_Deploy.s.sol deleted file mode 100644 index cd0af7a58..000000000 --- a/script/deploy/mainnet/M1_Deploy.s.sol +++ /dev/null @@ -1,509 +0,0 @@ -// // SPDX-License-Identifier: BUSL-1.1 -// pragma solidity ^0.8.27; - -// import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; -// import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; -// import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -// import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; - -// import "../../../src/contracts/interfaces/IETHPOSDeposit.sol"; - -// import "../../../src/contracts/core/StrategyManager.sol"; -// import "../../../src/contracts/core/Slasher.sol"; -// import "../../../src/contracts/core/DelegationManager.sol"; - -// import "../../../src/contracts/strategies/StrategyBaseTVLLimits.sol"; - -// import "../../../src/contracts/pods/EigenPod.sol"; -// import "../../../src/contracts/pods/EigenPodManager.sol"; - -// import "../../../src/contracts/permissions/PauserRegistry.sol"; - -// import "../../../src/test/mocks/EmptyContract.sol"; -// import "../../../src/test/mocks/ETHDepositMock.sol"; - -// import "forge-std/Script.sol"; -// import "forge-std/Test.sol"; - -// // # To load the variables in the .env file -// // source .env - -// // # To deploy and verify our contract -// // forge script script/M1_Deploy.s.sol:Deployer_M1 --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast -vvvv -// contract Deployer_M1 is Script, Test { -// Vm cheats = Vm(HEVM_ADDRESS); - -// // struct used to encode token info in config file -// struct StrategyConfig { -// uint256 maxDeposits; -// uint256 maxPerDeposit; -// address tokenAddress; -// string tokenSymbol; -// } - -// string public deployConfigPath = string(bytes("script/M1_deploy.config.json")); - -// // EigenLayer Contracts -// ProxyAdmin public eigenLayerProxyAdmin; -// PauserRegistry public eigenLayerPauserReg; -// Slasher public slasher; -// Slasher public slasherImplementation; -// DelegationManager public delegation; -// DelegationManager public delegationImplementation; -// StrategyManager public strategyManager; -// StrategyManager public strategyManagerImplementation; -// EigenPodManager public eigenPodManager; -// EigenPodManager public eigenPodManagerImplementation; -// UpgradeableBeacon public eigenPodBeacon; -// EigenPod public eigenPodImplementation; -// StrategyBase public baseStrategyImplementation; - -// EmptyContract public emptyContract; - -// address executorMultisig; -// address operationsMultisig; -// address pauserMultisig; - -// // the ETH2 deposit contract -- if not on mainnet, we deploy a mock as stand-in -// IETHPOSDeposit public ethPOSDeposit; - -// // strategies deployed -// StrategyBaseTVLLimits[] public deployedStrategyArray; - -// // IMMUTABLES TO SET -// uint256 REQUIRED_BALANCE_WEI; -// uint256 MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR; -// uint64 GOERLI_GENESIS_TIME = 1616508000; - -// // OTHER DEPLOYMENT PARAMETERS -// uint256 STRATEGY_MANAGER_INIT_PAUSED_STATUS; -// uint256 SLASHER_INIT_PAUSED_STATUS; -// uint256 DELEGATION_INIT_PAUSED_STATUS; -// uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS; -// uint256 EIGENPOD_MANAGER_MAX_PODS; - -// // one week in blocks -- 50400 -// uint32 STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS; - -// function run() external { -// // read and log the chainID -// uint256 chainId = block.chainid; -// emit log_named_uint("You are deploying on ChainID", chainId); - -// // READ JSON CONFIG DATA -// string memory config_data = vm.readFile(deployConfigPath); -// // bytes memory parsedData = vm.parseJson(config_data); - -// STRATEGY_MANAGER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".strategyManager.init_paused_status"); -// SLASHER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".slasher.init_paused_status"); -// DELEGATION_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".delegation.init_paused_status"); -// EIGENPOD_MANAGER_MAX_PODS = stdJson.readUint(config_data, ".eigenPodManager.max_pods"); -// EIGENPOD_MANAGER_INIT_PAUSED_STATUS = stdJson.readUint(config_data, ".eigenPodManager.init_paused_status"); - -// STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS = uint32( -// stdJson.readUint(config_data, ".strategyManager.init_withdrawal_delay_blocks") -// ); - -// REQUIRED_BALANCE_WEI = stdJson.readUint(config_data, ".eigenPod.REQUIRED_BALANCE_WEI"); -// MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR = stdJson.readUint( -// config_data, -// ".eigenPod.MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR" -// ); - -// // tokens to deploy strategies for -// StrategyConfig[] memory strategyConfigs; - -// executorMultisig = stdJson.readAddress(config_data, ".multisig_addresses.executorMultisig"); -// operationsMultisig = stdJson.readAddress(config_data, ".multisig_addresses.operationsMultisig"); -// pauserMultisig = stdJson.readAddress(config_data, ".multisig_addresses.pauserMultisig"); -// // load token list -// bytes memory strategyConfigsRaw = stdJson.parseRaw(config_data, ".strategies"); -// strategyConfigs = abi.decode(strategyConfigsRaw, (StrategyConfig[])); - -// require(executorMultisig != address(0), "executorMultisig address not configured correctly!"); -// require(operationsMultisig != address(0), "operationsMultisig address not configured correctly!"); - -// // START RECORDING TRANSACTIONS FOR DEPLOYMENT -// vm.startBroadcast(); - -// // deploy proxy admin for ability to upgrade proxy contracts -// eigenLayerProxyAdmin = new ProxyAdmin(); - -// //deploy pauser registry -// { -// address[] memory pausers = new address[](3); -// pausers[0] = executorMultisig; -// pausers[1] = operationsMultisig; -// pausers[2] = pauserMultisig; -// eigenLayerPauserReg = new PauserRegistry(pausers, executorMultisig); -// } - -// /** -// * First, deploy upgradeable proxy contracts that **will point** to the implementations. Since the implementation contracts are -// * not yet deployed, we give these proxies an empty contract as the initial implementation, to act as if they have no code. -// */ -// emptyContract = new EmptyContract(); -// delegation = DelegationManager( -// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) -// ); -// strategyManager = StrategyManager( -// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) -// ); -// slasher = Slasher( -// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) -// ); -// eigenPodManager = EigenPodManager( -// address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) -// ); - -// // 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, -// GOERLI_GENESIS_TIME -// ); - -// eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); - -// // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs -// delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); -// strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher, avsDirectory); -// slasherImplementation = new Slasher(strategyManager, delegation); -// eigenPodManagerImplementation = new EigenPodManager( -// ethPOSDeposit, -// eigenPodBeacon, -// strategyManager, -// slasher, -// delegation -// ); - -// // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. -// eigenLayerProxyAdmin.upgradeAndCall( -// TransparentUpgradeableProxy(payable(address(delegation))), -// address(delegationImplementation), -// abi.encodeWithSelector( -// DelegationManager.initialize.selector, -// executorMultisig, -// eigenLayerPauserReg, -// DELEGATION_INIT_PAUSED_STATUS -// ) -// ); -// eigenLayerProxyAdmin.upgradeAndCall( -// TransparentUpgradeableProxy(payable(address(strategyManager))), -// address(strategyManagerImplementation), -// abi.encodeWithSelector( -// StrategyManager.initialize.selector, -// executorMultisig, -// operationsMultisig, -// eigenLayerPauserReg, -// STRATEGY_MANAGER_INIT_PAUSED_STATUS -// ) -// ); -// eigenLayerProxyAdmin.upgradeAndCall( -// TransparentUpgradeableProxy(payable(address(slasher))), -// address(slasherImplementation), -// abi.encodeWithSelector( -// Slasher.initialize.selector, -// executorMultisig, -// eigenLayerPauserReg, -// SLASHER_INIT_PAUSED_STATUS -// ) -// ); -// eigenLayerProxyAdmin.upgradeAndCall( -// TransparentUpgradeableProxy(payable(address(eigenPodManager))), -// address(eigenPodManagerImplementation), -// abi.encodeWithSelector( -// EigenPodManager.initialize.selector, -// executorMultisig, -// eigenLayerPauserReg, -// EIGENPOD_MANAGER_INIT_PAUSED_STATUS -// ) -// ); - -// // deploy StrategyBaseTVLLimits contract implementation -// baseStrategyImplementation = new StrategyBaseTVLLimits(strategyManager); -// // create upgradeable proxies that each point to the implementation and initialize them -// for (uint256 i = 0; i < strategyConfigs.length; ++i) { -// deployedStrategyArray.push( -// StrategyBaseTVLLimits( -// address( -// new TransparentUpgradeableProxy( -// address(baseStrategyImplementation), -// address(eigenLayerProxyAdmin), -// abi.encodeWithSelector( -// StrategyBaseTVLLimits.initialize.selector, -// strategyConfigs[i].maxPerDeposit, -// strategyConfigs[i].maxDeposits, -// IERC20(strategyConfigs[i].tokenAddress), -// eigenLayerPauserReg -// ) -// ) -// ) -// ) -// ); -// } - -// eigenLayerProxyAdmin.transferOwnership(executorMultisig); -// eigenPodBeacon.transferOwnership(executorMultisig); - -// // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT -// vm.stopBroadcast(); - -// // CHECK CORRECTNESS OF DEPLOYMENT -// _verifyContractsPointAtOneAnother( -// delegationImplementation, -// strategyManagerImplementation, -// slasherImplementation, -// eigenPodManagerImplementation -// ); -// _verifyContractsPointAtOneAnother( -// delegation, -// strategyManager, -// slasher, -// eigenPodManager -// ); -// _verifyImplementationsSetCorrectly(); -// _verifyInitialOwners(); -// _checkPauserInitializations(); -// _verifyInitializationParams(); - -// // WRITE JSON DATA -// string memory parent_object = "parent object"; - -// string memory deployed_strategies = "strategies"; -// for (uint256 i = 0; i < strategyConfigs.length; ++i) { -// vm.serializeAddress(deployed_strategies, strategyConfigs[i].tokenSymbol, address(deployedStrategyArray[i])); -// } -// string memory deployed_strategies_output = vm.serializeAddress( -// deployed_strategies, -// strategyConfigs[strategyConfigs.length - 1].tokenSymbol, -// address(deployedStrategyArray[strategyConfigs.length - 1]) -// ); - -// string memory deployed_addresses = "addresses"; -// vm.serializeAddress(deployed_addresses, "eigenLayerProxyAdmin", address(eigenLayerProxyAdmin)); -// vm.serializeAddress(deployed_addresses, "eigenLayerPauserReg", address(eigenLayerPauserReg)); -// vm.serializeAddress(deployed_addresses, "slasher", address(slasher)); -// vm.serializeAddress(deployed_addresses, "slasherImplementation", address(slasherImplementation)); -// vm.serializeAddress(deployed_addresses, "delegation", address(delegation)); -// vm.serializeAddress(deployed_addresses, "delegationImplementation", address(delegationImplementation)); -// vm.serializeAddress(deployed_addresses, "strategyManager", address(strategyManager)); -// vm.serializeAddress( -// deployed_addresses, -// "strategyManagerImplementation", -// address(strategyManagerImplementation) -// ); -// vm.serializeAddress(deployed_addresses, "eigenPodManager", address(eigenPodManager)); -// vm.serializeAddress( -// deployed_addresses, -// "eigenPodManagerImplementation", -// address(eigenPodManagerImplementation) -// ); -// vm.serializeAddress(deployed_addresses, "eigenPodBeacon", address(eigenPodBeacon)); -// vm.serializeAddress(deployed_addresses, "eigenPodImplementation", address(eigenPodImplementation)); -// vm.serializeAddress(deployed_addresses, "baseStrategyImplementation", address(baseStrategyImplementation)); -// vm.serializeAddress(deployed_addresses, "emptyContract", address(emptyContract)); -// string memory deployed_addresses_output = vm.serializeString( -// deployed_addresses, -// "strategies", -// deployed_strategies_output -// ); - -// string memory parameters = "parameters"; -// vm.serializeAddress(parameters, "executorMultisig", executorMultisig); -// string memory parameters_output = vm.serializeAddress(parameters, "operationsMultisig", operationsMultisig); - -// string memory chain_info = "chainInfo"; -// vm.serializeUint(chain_info, "deploymentBlock", block.number); -// string memory chain_info_output = vm.serializeUint(chain_info, "chainId", chainId); - -// // serialize all the data -// vm.serializeString(parent_object, deployed_addresses, deployed_addresses_output); -// vm.serializeString(parent_object, chain_info, chain_info_output); -// string memory finalJson = vm.serializeString(parent_object, parameters, parameters_output); -// vm.writeJson(finalJson, "script/output/M1_deployment_data.json"); -// } - -// function _verifyContractsPointAtOneAnother( -// DelegationManager delegationContract, -// StrategyManager strategyManagerContract, -// Slasher slasherContract, -// EigenPodManager eigenPodManagerContract -// ) internal view { -// require(delegationContract.slasher() == slasher, "delegation: slasher address not set correctly"); -// require( -// delegationContract.strategyManager() == strategyManager, -// "delegation: strategyManager address not set correctly" -// ); - -// require(strategyManagerContract.slasher() == slasher, "strategyManager: slasher address not set correctly"); -// require( -// strategyManagerContract.delegation() == delegation, -// "strategyManager: delegation address not set correctly" -// ); -// require( -// strategyManagerContract.eigenPodManager() == eigenPodManager, -// "strategyManager: eigenPodManager address not set correctly" -// ); - -// require(slasherContract.strategyManager() == strategyManager, "slasher: strategyManager not set correctly"); -// require(slasherContract.delegation() == delegation, "slasher: delegation not set correctly"); - -// require( -// eigenPodManagerContract.ethPOS() == ethPOSDeposit, -// " eigenPodManager: ethPOSDeposit contract address not set correctly" -// ); -// require( -// eigenPodManagerContract.eigenPodBeacon() == eigenPodBeacon, -// "eigenPodManager: eigenPodBeacon contract address not set correctly" -// ); -// require( -// eigenPodManagerContract.strategyManager() == strategyManager, -// "eigenPodManager: strategyManager contract address not set correctly" -// ); -// require( -// eigenPodManagerContract.slasher() == slasher, -// "eigenPodManager: slasher contract address not set correctly" -// ); -// } - -// function _verifyImplementationsSetCorrectly() internal view { -// require( -// eigenLayerProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(delegation)))) == -// address(delegationImplementation), -// "delegation: implementation set incorrectly" -// ); -// require( -// eigenLayerProxyAdmin.getProxyImplementation( -// TransparentUpgradeableProxy(payable(address(strategyManager))) -// ) == address(strategyManagerImplementation), -// "strategyManager: implementation set incorrectly" -// ); -// require( -// eigenLayerProxyAdmin.getProxyImplementation(TransparentUpgradeableProxy(payable(address(slasher)))) == -// address(slasherImplementation), -// "slasher: implementation set incorrectly" -// ); -// require( -// eigenLayerProxyAdmin.getProxyImplementation( -// TransparentUpgradeableProxy(payable(address(eigenPodManager))) -// ) == address(eigenPodManagerImplementation), -// "eigenPodManager: implementation set incorrectly" -// ); - -// for (uint256 i = 0; i < deployedStrategyArray.length; ++i) { -// require( -// eigenLayerProxyAdmin.getProxyImplementation( -// TransparentUpgradeableProxy(payable(address(deployedStrategyArray[i]))) -// ) == address(baseStrategyImplementation), -// "strategy: implementation set incorrectly" -// ); -// } - -// require( -// eigenPodBeacon.implementation() == address(eigenPodImplementation), -// "eigenPodBeacon: implementation set incorrectly" -// ); -// } - -// function _verifyInitialOwners() internal view { -// require(strategyManager.owner() == executorMultisig, "strategyManager: owner not set correctly"); -// require(delegation.owner() == executorMultisig, "delegation: owner not set correctly"); -// require(slasher.owner() == executorMultisig, "slasher: owner not set correctly"); -// require(eigenPodManager.owner() == executorMultisig, "delegation: owner not set correctly"); - -// require(eigenLayerProxyAdmin.owner() == executorMultisig, "eigenLayerProxyAdmin: owner not set correctly"); -// require(eigenPodBeacon.owner() == executorMultisig, "eigenPodBeacon: owner not set correctly"); -// } - -// function _checkPauserInitializations() internal view { -// require(delegation.pauserRegistry() == eigenLayerPauserReg, "delegation: pauser registry not set correctly"); -// require( -// strategyManager.pauserRegistry() == eigenLayerPauserReg, -// "strategyManager: pauser registry not set correctly" -// ); -// require(slasher.pauserRegistry() == eigenLayerPauserReg, "slasher: pauser registry not set correctly"); -// require( -// eigenPodManager.pauserRegistry() == eigenLayerPauserReg, -// "eigenPodManager: pauser registry not set correctly" -// ); - -// require(eigenLayerPauserReg.isPauser(operationsMultisig), "pauserRegistry: operationsMultisig is not pauser"); -// require(eigenLayerPauserReg.isPauser(executorMultisig), "pauserRegistry: executorMultisig is not pauser"); -// require(eigenLayerPauserReg.isPauser(pauserMultisig), "pauserRegistry: pauserMultisig is not pauser"); -// require(eigenLayerPauserReg.unpauser() == executorMultisig, "pauserRegistry: unpauser not set correctly"); - -// for (uint256 i = 0; i < deployedStrategyArray.length; ++i) { -// require( -// deployedStrategyArray[i].pauserRegistry() == eigenLayerPauserReg, -// "StrategyBaseTVLLimits: pauser registry not set correctly" -// ); -// require( -// deployedStrategyArray[i].paused() == 0, -// "StrategyBaseTVLLimits: init paused status set incorrectly" -// ); -// } - -// // // pause *nothing* -// // uint256 STRATEGY_MANAGER_INIT_PAUSED_STATUS = 0; -// // // pause *everything* -// // uint256 SLASHER_INIT_PAUSED_STATUS = type(uint256).max; -// // // pause *everything* -// // uint256 DELEGATION_INIT_PAUSED_STATUS = type(uint256).max; -// // // pause *all of the proof-related functionality* (everything that can be paused other than creation of EigenPods) -// // uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS = (2**1) + (2**2) + (2**3) + (2**4); /* = 30 */ -// // // pause *nothing* -// require(strategyManager.paused() == 0, "strategyManager: init paused status set incorrectly"); -// require(slasher.paused() == type(uint256).max, "slasher: init paused status set incorrectly"); -// require(delegation.paused() == type(uint256).max, "delegation: init paused status set incorrectly"); -// require(eigenPodManager.paused() == 30, "eigenPodManager: init paused status set incorrectly"); -// } - -// function _verifyInitializationParams() internal { -// // // one week in blocks -- 50400 -// // uint32 STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS = 7 days / 12 seconds; -// // require(strategyManager.withdrawalDelayBlocks() == 7 days / 12 seconds, -// // "strategyManager: withdrawalDelayBlocks initialized incorrectly"); -// // uint256 REQUIRED_BALANCE_WEI = 32 ether; - -// require( -// strategyManager.strategyWhitelister() == operationsMultisig, -// "strategyManager: strategyWhitelister address not set correctly" -// ); - -// require( -// baseStrategyImplementation.strategyManager() == strategyManager, -// "baseStrategyImplementation: strategyManager set incorrectly" -// ); - -// require( -// eigenPodImplementation.ethPOS() == ethPOSDeposit, -// "eigenPodImplementation: ethPOSDeposit contract address not set correctly" -// ); -// require( -// eigenPodImplementation.eigenPodManager() == eigenPodManager, -// " eigenPodImplementation: eigenPodManager contract address not set correctly" -// ); - -// string memory config_data = vm.readFile(deployConfigPath); -// for (uint i = 0; i < deployedStrategyArray.length; i++) { -// uint256 maxPerDeposit = stdJson.readUint( -// config_data, -// string.concat(".strategies[", vm.toString(i), "].max_per_deposit") -// ); -// uint256 maxDeposits = stdJson.readUint( -// config_data, -// string.concat(".strategies[", vm.toString(i), "].max_deposits") -// ); -// (uint256 setMaxPerDeposit, uint256 setMaxDeposits) = deployedStrategyArray[i].getTVLLimits(); -// require(setMaxPerDeposit == maxPerDeposit, "setMaxPerDeposit not set correctly"); -// require(setMaxDeposits == maxDeposits, "setMaxDeposits not set correctly"); -// } -// } -// } diff --git a/script/deploy/mainnet/M2Deploy.s.sol b/script/deploy/mainnet/M2Deploy.s.sol deleted file mode 100644 index 9c712d1cd..000000000 --- a/script/deploy/mainnet/M2Deploy.s.sol +++ /dev/null @@ -1,327 +0,0 @@ -// // SPDX-License-Identifier: BUSL-1.1 -// pragma solidity ^0.8.27; - -// import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; -// import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; -// import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -// import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; - -// import "../../../src/contracts/interfaces/IETHPOSDeposit.sol"; - -// import "../../../src/contracts/core/StrategyManager.sol"; -// import "../../../src/contracts/core/Slasher.sol"; -// import "../../../src/contracts/core/DelegationManager.sol"; - -// import "../../../src/contracts/pods/EigenPod.sol"; -// import "../../../src/contracts/pods/EigenPodManager.sol"; - -// import "../../../src/contracts/permissions/PauserRegistry.sol"; - -// import "forge-std/Script.sol"; -// import "forge-std/Test.sol"; - -// // # To load the variables in the .env file -// // source .env - -// // # To deploy and verify our contract -// // forge script script/milestone/M2Deploy.s.sol:M2Deploy --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast -vvvv -// contract M2Deploy is Script, Test { -// Vm cheats = Vm(HEVM_ADDRESS); - -// string public m1DeploymentOutputPath; -// string public m2DeploymentOutputPath; - -// // EigenLayer core contracts -// ISlasher public slasher; -// IDelegationManager public delegation; -// DelegationManager public delegationImplementation; -// IStrategyManager public strategyManager; -// StrategyManager public strategyManagerImplementation; -// IEigenPodManager public eigenPodManager; -// EigenPodManager public eigenPodManagerImplementation; -// IBeacon public eigenPodBeacon; -// EigenPod public eigenPodImplementation; - -// // Eigenlayer Proxy Admin -// ProxyAdmin public eigenLayerProxyAdmin; - -// // BeaconChain deposit contract -// IETHPOSDeposit public ethPOS; - -// // RPC url to fork from for pre-upgrade state change tests -// string public rpcUrl; - -// // Pre-upgrade values to check post-upgrade -// address public strategyWhitelister; -// bytes32 public withdrawalDelayBlocksStorageSlot = bytes32(uint256(204)); // 0xcc == 204 -// uint256 public withdrawalsQueuedStorageSlot = 208; //0xd0 = 208 -// uint256 public withdrawalDelayBlocks; -// bytes32 public delegationManagerDomainSeparator; -// uint256 public numPods; - -// // Pointers to pre-upgrade values for lstDepositor -// address public lstDepositor; -// uint256 public stakerStrategyListLength; -// uint256[] public stakerStrategyShares; // Array of shares in each strategy -// IStrategy[] public stakerStrategyList; // Array of strategies staker has deposited into -// IERC20[] public tokensToWithdraw; - -// // Pointers to pre-upgrade values for eigenPodDepositor -// address public eigenPodDepositor; -// IEigenPod public eigenPod; -// address public eigenPodOwner; -// bool public hasPod; -// uint64 public mostRecentWithdrawalBlock; - -// function run() external { -// // Read and log the chain ID -// uint256 chainId = block.chainid; -// emit log_named_uint("You are deploying on ChainID", chainId); - -// // Update deployment path addresses if on mainnet -// if (chainId == 1) { -// m1DeploymentOutputPath = string(bytes("script/output/M1_deployment_mainnet_2023_6_9.json")); -// m2DeploymentOutputPath = "script/output/M2_deployment_data_mainnet.json"; -// rpcUrl = "RPC_MAINNET"; -// } else if (chainId == 5) { -// m1DeploymentOutputPath = string(bytes("script/output/M1_deployment_goerli_2023_3_23.json")); -// m2DeploymentOutputPath = "script/output/M2_deployment_data_goerli.json"; -// rpcUrl = "RPC_GOERLI"; -// } else { -// revert("Chain not supported"); -// } - -// // Read json data -// string memory deployment_data = vm.readFile(m1DeploymentOutputPath); -// slasher = Slasher(stdJson.readAddress(deployment_data, ".addresses.slasher")); -// delegation = slasher.delegation(); -// strategyManager = slasher.strategyManager(); -// eigenPodManager = strategyManager.eigenPodManager(); -// eigenPodBeacon = eigenPodManager.eigenPodBeacon(); -// ethPOS = eigenPodManager.ethPOS(); - -// eigenLayerProxyAdmin = ProxyAdmin(stdJson.readAddress(deployment_data, ".addresses.eigenLayerProxyAdmin")); - -// // Store pre-upgrade values to check against later -// strategyWhitelister = strategyManager.strategyWhitelister(); -// delegationManagerDomainSeparator = IDelegationManagerV0(address(delegation)).DOMAIN_SEPARATOR(); -// numPods = eigenPodManager.numPods(); - -// // Set chain-specific values -// IStrategy[] memory strategyArray = new IStrategy[](1); -// uint256[] memory shareAmounts = new uint256[](1); -// if (chainId == 1) { -// // no-op for now -// } else if (chainId == 5) { -// // Set LST Depositor values -// lstDepositor = 0x01e453D2465cEC1BD2ac9aed06115Fbf28482b33; -// strategyArray[0] = IStrategy(0x879944A8cB437a5f8061361f82A6d4EED59070b5); -// shareAmounts[0] = 188647761812080108; -// tokensToWithdraw.push(IERC20(0x178E141a0E3b34152f73Ff610437A7bf9B83267A)); - -// // Set eigenPod owner values -// eigenPodDepositor = 0xE9D04433bac1bd584B0493cbaBa170CCCBDA8F00; -// } else { -// revert("chain ID not supported"); -// } - -// // Store LST depositor pre-upgrade values -// stakerStrategyListLength = strategyManager.stakerStrategyListLength(lstDepositor); -// (stakerStrategyList, stakerStrategyShares) = strategyManager.getDeposits(lstDepositor); - -// // Store eigenPod owner pre-ugprade values -// eigenPod = eigenPodManager.ownerToPod(eigenPodDepositor); -// require(address(eigenPod).balance > 0, "eigenPod to test has balance of 0"); -// hasPod = eigenPodManager.hasPod(eigenPodDepositor); -// eigenPodOwner = eigenPod.podOwner(); -// mostRecentWithdrawalBlock = m1EigenPod(address(eigenPod)).mostRecentWithdrawalBlockNumber(); - -// // Begin deployment -// vm.startBroadcast(); - -// // Deploy new implmementation contracts -// delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager); -// strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher); -// eigenPodManagerImplementation = new EigenPodManager( -// ethPOS, -// eigenPodBeacon, -// strategyManager, -// slasher, -// delegation -// ); -// eigenPodImplementation = new EigenPod({ -// _ethPOS: ethPOS, -// _eigenPodManager: eigenPodManager, -// _GENESIS_TIME: 1616508000 -// }); - -// vm.stopBroadcast(); - -// // Write json data out -// string memory parent_object = "parent object"; -// string memory deployed_addresses = "addresses"; - -// // Serialize proxy and non-deployed addresses -// vm.serializeAddress(deployed_addresses, "slasher", address(slasher)); -// vm.serializeAddress(deployed_addresses, "delegation", address(delegation)); -// vm.serializeAddress(deployed_addresses, "strategyManager", address(strategyManager)); -// vm.serializeAddress(deployed_addresses, "eigenPodManager", address(eigenPodManager)); -// vm.serializeAddress(deployed_addresses, "eigenPodBeacon", address(eigenPodBeacon)); -// vm.serializeAddress(deployed_addresses, "ethPOS", address(ethPOS)); - -// // Serialize new implementation addresses -// vm.serializeAddress(deployed_addresses, "delegationImplementation", address(delegationImplementation)); -// vm.serializeAddress( -// deployed_addresses, -// "strategyManagerImplementation", -// address(strategyManagerImplementation) -// ); -// vm.serializeAddress( -// deployed_addresses, -// "eigenPodManagerImplementation", -// address(eigenPodManagerImplementation) -// ); -// string memory deployed_addresses_output = vm.serializeAddress( -// deployed_addresses, -// "eigenPodImplementation", -// address(eigenPodImplementation) -// ); - -// // Add chain info -// string memory chain_info = "chainInfo"; -// vm.serializeUint(chain_info, "deploymentBlock", block.number); -// string memory chain_info_output = vm.serializeUint(chain_info, "chainId", chainId); - -// // Save addresses -// vm.serializeString(parent_object, deployed_addresses, deployed_addresses_output); -// string memory finalJson = vm.serializeString(parent_object, chain_info, chain_info_output); - -// // Write output to file -// vm.writeJson(finalJson, m2DeploymentOutputPath); - -// // Perform post-upgrade tests -// simulatePerformingUpgrade(); -// checkUpgradeCorrectness(); -// } - -// function simulatePerformingUpgrade() public { -// cheats.startPrank(eigenLayerProxyAdmin.owner()); -// eigenLayerProxyAdmin.upgrade( -// TransparentUpgradeableProxy(payable(address(delegation))), -// address(delegationImplementation) -// ); -// eigenLayerProxyAdmin.upgrade( -// TransparentUpgradeableProxy(payable(address(strategyManager))), -// address(strategyManagerImplementation) -// ); -// eigenLayerProxyAdmin.upgrade( -// TransparentUpgradeableProxy(payable(address(eigenPodManager))), -// address(eigenPodManagerImplementation) -// ); -// cheats.stopPrank(); - -// // Upgrade beacon -// cheats.prank(UpgradeableBeacon(address(eigenPodBeacon)).owner()); -// UpgradeableBeacon(address(eigenPodBeacon)).upgradeTo(address(eigenPodImplementation)); -// } - -// function checkUpgradeCorrectness() public { -// _verifyStorageSlots(); - -// _verifyContractsInitialized(); - -// _verifyEigenPodCorrectness(); -// } - -// // Call contracts to ensure that all simple view functions return the same values (e.g. the return value of `StrategyManager.delegation()` hasn’t changed) -// // StrategyManager: delegation, eigenPodManager, slasher, strategyWhitelister, withdrawalDelayBlocks all unchanged -// // DelegationManager: DOMAIN_SEPARATOR, strategyManager, slasher, eigenPodManager all unchanged -// // EigenPodManager: ethPOS, eigenPodBeacon, strategyManager, slasher, numPods all unchanged -// // delegationManager is now correct (added immutable) -// // Call contracts to make sure they are still “initialized” (ensure that trying to call initializer reverts) -// function _verifyStorageSlots() internal view { -// // StrategyManager: Check view functions return pre-upgraded values -// require(strategyManager.delegation() == delegation, "strategyManager.delegation incorrect"); -// require(strategyManager.eigenPodManager() == eigenPodManager, "strategyManager.eigenPodManager incorrect"); -// require(strategyManager.slasher() == slasher, "strategyManager.slasher incorrect"); -// require( -// strategyManager.strategyWhitelister() == strategyWhitelister, -// "strategyManager.strategyWhitelister incorrect" -// ); -// require( -// cheats.load(address(strategyManager), withdrawalDelayBlocksStorageSlot) == bytes32(withdrawalDelayBlocks), -// "strategyManager.withdrawalDelayBlocks incorrect" -// ); -// // DelegationManager: Check view functions return pre-upgraded values -// require(DelegationManagerStorage(address(delegation)).strategyManager() == strategyManager, "delegation.strategyManager incorrect"); -// require( -// delegation.domainSeparator() == delegationManagerDomainSeparator, -// "delegation.domainSeparator incorrect" -// ); -// require(DelegationManagerStorage(address(delegation)).slasher() == slasher, "delegation.slasher incorrect"); -// require(DelegationManagerStorage(address(delegation)).eigenPodManager() == eigenPodManager, "delegation.eigenPodManager incorrect"); -// // EigenPodManager: check view functions return pre-upgraded values -// require(eigenPodManager.ethPOS() == ethPOS, "eigenPodManager.ethPOS incorrect"); -// require(eigenPodManager.eigenPodBeacon() == eigenPodBeacon, "eigenPodManager.eigenPodBeacon incorrect"); -// require(eigenPodManager.strategyManager() == strategyManager, "eigenPodManager.strategyManager incorrect"); -// require(eigenPodManager.slasher() == slasher, "eigenPodManager.slasher incorrect"); -// require(eigenPodManager.numPods() == numPods, "eigenPodManager.numPods incorrect"); -// require(EigenPodManagerStorage(address(eigenPodManager)).delegationManager() == delegation, "eigenPodManager.delegationManager incorrect"); -// } - -// function _verifyContractsInitialized() internal { -// // Check that contracts are unable to be re-initialized -// cheats.expectRevert(bytes("Initializable: contract is already initialized")); -// StrategyManager(address(strategyManager)).initialize( -// address(this), -// address(this), -// PauserRegistry(address(this)), -// 0 -// ); - -// IStrategy[] memory strategyArray = new IStrategy[](0); -// uint256[] memory withdrawalDelayBlocksArray = new uint256[](0); -// cheats.expectRevert(bytes("Initializable: contract is already initialized")); -// DelegationManager(address(delegation)).initialize( -// address(this), -// PauserRegistry(address(this)), -// 0, // initialPausedStatus -// 0, // minWithdrawalDelayBLocks -// strategyArray, -// withdrawalDelayBlocksArray -// ); - -// cheats.expectRevert(bytes("Initializable: contract is already initialized")); -// EigenPodManager(address(eigenPodManager)).initialize( -// address(this), -// PauserRegistry(address(this)), -// 0 -// ); -// } - -// function _verifyEigenPodCorrectness() public { -// // Check that state is correct -// require( -// address(eigenPodManager.ownerToPod(eigenPodDepositor)) == address(eigenPod), -// "eigenPodManager.ownerToPod incorrect" -// ); -// require(eigenPodManager.hasPod(eigenPodDepositor) == hasPod, "eigenPodManager.hasPod incorrect"); -// require(eigenPod.podOwner() == eigenPodOwner, "eigenPod.podOwner incorrect"); - -// // Unpause eigenpods verify credentials -// uint256 paused = IPausable(address(eigenPodManager)).paused(); -// cheats.prank(IPauserRegistry(IPausable(address(eigenPodManager)).pauserRegistry()).unpauser()); -// IPausable(address(eigenPodManager)).unpause(paused ^ (1 << 2)); // eigenpods verify credentials on 2nd bit - -// cheats.prank(eigenPodOwner); -// eigenPod.startCheckpoint(false); -// } -// } - -// interface IDelegationManagerV0 { -// function DOMAIN_SEPARATOR() external view returns (bytes32); -// } - -// interface m1EigenPod { -// function mostRecentWithdrawalBlockNumber() external view returns (uint64); -// } diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 297589125..13b35f114 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -37,7 +37,9 @@ contract AVSDirectory is * @dev Initializes the immutable addresses of the strategy mananger, delegationManager, slasher, * and eigenpodManager contracts */ - constructor(IDelegationManager _delegation) AVSDirectoryStorage(_delegation) { + constructor( + IDelegationManager _delegation + ) AVSDirectoryStorage(_delegation) { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; } @@ -70,7 +72,9 @@ contract AVSDirectory is * @dev msg.sender must be the AVS. * @dev The AVS may create operator sets before it becomes an operator set AVS. */ - function createOperatorSets(uint32[] calldata operatorSetIds) external { + function createOperatorSets( + uint32[] calldata operatorSetIds + ) external { for (uint256 i = 0; i < operatorSetIds.length; ++i) { require(!isOperatorSet[msg.sender][operatorSetIds[i]], InvalidOperatorSet()); isOperatorSet[msg.sender][operatorSetIds[i]] = true; @@ -234,7 +238,9 @@ contract AVSDirectory is * * @dev Note that the `metadataURI` is *never stored* and is only emitted in the `AVSMetadataURIUpdated` event. */ - function updateAVSMetadataURI(string calldata metadataURI) external override { + function updateAVSMetadataURI( + string calldata metadataURI + ) external override { emit AVSMetadataURIUpdated(msg.sender, metadataURI); } @@ -243,7 +249,9 @@ contract AVSDirectory is * * @param salt A unique and single use value associated with the approver signature. */ - function cancelSalt(bytes32 salt) external override { + function cancelSalt( + bytes32 salt + ) external override { // Mutate `operatorSaltIsSpent` to `true` to prevent future spending. operatorSaltIsSpent[msg.sender][salt] = true; } @@ -314,11 +322,9 @@ contract AVSDirectory is * * @dev Only used by legacy M2 AVSs that have not integrated with operator sets. */ - function deregisterOperatorFromAVS(address operator) - external - override - onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) - { + function deregisterOperatorFromAVS( + address operator + ) external override onlyWhenNotPaused(PAUSED_OPERATOR_REGISTER_DEREGISTER_TO_AVS) { // Assert that operator is registered for the AVS. require(avsOperatorStatus[msg.sender][operator] == OperatorAVSRegistrationStatus.REGISTERED, InvalidOperator()); // Assert that the AVS is not an operator set AVS. @@ -455,7 +461,9 @@ contract AVSDirectory is * @notice Returns the number of operators registered to an operatorSet. * @param operatorSet The operatorSet to get the member count for */ - function getNumOperatorsInOperatorSet(OperatorSet memory operatorSet) external view returns (uint256) { + function getNumOperatorsInOperatorSet( + OperatorSet memory operatorSet + ) external view returns (uint256) { return _operatorSetMembers[_encodeOperatorSet(operatorSet)].length(); } @@ -463,7 +471,9 @@ contract AVSDirectory is * @notice Returns the total number of operator sets an operator is registered to. * @param operator The operator address to query. */ - function inTotalOperatorSets(address operator) external view returns (uint256) { + function inTotalOperatorSets( + address operator + ) external view returns (uint256) { return _operatorSetsMemberOf[operator].length(); } @@ -548,20 +558,26 @@ contract AVSDirectory is } /// @notice Returns an EIP-712 encoded hash struct. - function _calculateDigestHash(bytes32 structHash) internal view returns (bytes32) { + function _calculateDigestHash( + bytes32 structHash + ) internal view returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", _calculateDomainSeparator(), structHash)); } /// @dev Returns an `OperatorSet` encoded into a 32-byte value. /// @param operatorSet The `OperatorSet` to encode. - function _encodeOperatorSet(OperatorSet memory operatorSet) internal pure returns (bytes32) { + function _encodeOperatorSet( + OperatorSet memory operatorSet + ) internal pure returns (bytes32) { return bytes32(abi.encodePacked(operatorSet.avs, uint96(operatorSet.operatorSetId))); } /// @dev Returns an `OperatorSet` decoded from an encoded 32-byte value. /// @param encoded The encoded `OperatorSet` to decode. /// @dev Assumes `encoded` is encoded via `_encodeOperatorSet(operatorSet)`. - function _decodeOperatorSet(bytes32 encoded) internal pure returns (OperatorSet memory) { + function _decodeOperatorSet( + bytes32 encoded + ) internal pure returns (OperatorSet memory) { return OperatorSet({ avs: address(uint160(uint256(encoded) >> 96)), operatorSetId: uint32(uint256(encoded) & type(uint96).max) diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/AVSDirectoryStorage.sol index 7c5811dec..909b88656 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/AVSDirectoryStorage.sol @@ -65,7 +65,9 @@ abstract contract AVSDirectoryStorage is IAVSDirectory { /// @notice Mapping: operator => avs => operatorSetId => operator registration status mapping(address => mapping(address => mapping(uint32 => OperatorSetRegistrationStatus))) public operatorSetStatus; - constructor(IDelegationManager _delegation) { + constructor( + IDelegationManager _delegation + ) { delegation = _delegation; } diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index 999d8ef9d..a99757362 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -217,7 +217,9 @@ contract AllocationManager is * * @param salt A unique and single use value associated with the approver signature. */ - function cancelSalt(bytes32 salt) external override { + function cancelSalt( + bytes32 salt + ) external override { // Mutate `operatorSaltIsSpent` to `true` to prevent future spending. operatorSaltIsSpent[msg.sender][salt] = true; } @@ -698,20 +700,26 @@ contract AllocationManager is } /// @notice Returns an EIP-712 encoded hash struct. - function _calculateDigestHash(bytes32 structHash) internal view returns (bytes32) { + function _calculateDigestHash( + bytes32 structHash + ) internal view returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", _calculateDomainSeparator(), structHash)); } /// @dev Returns an `OperatorSet` encoded into a 32-byte value. /// @param operatorSet The `OperatorSet` to encode. - function _encodeOperatorSet(OperatorSet memory operatorSet) internal pure returns (bytes32) { + function _encodeOperatorSet( + OperatorSet memory operatorSet + ) internal pure returns (bytes32) { return bytes32(abi.encodePacked(operatorSet.avs, uint96(operatorSet.operatorSetId))); } /// @dev Returns an `OperatorSet` decoded from an encoded 32-byte value. /// @param encoded The encoded `OperatorSet` to decode. /// @dev Assumes `encoded` is encoded via `_encodeOperatorSet(operatorSet)`. - function _decodeOperatorSet(bytes32 encoded) internal pure returns (OperatorSet memory) { + function _decodeOperatorSet( + bytes32 encoded + ) internal pure returns (OperatorSet memory) { return OperatorSet({ avs: address(uint160(uint256(encoded) >> 96)), operatorSetId: uint32(uint256(encoded) & type(uint96).max) diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 30fd6d79b..9a35527dc 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -131,7 +131,9 @@ contract DelegationManager is * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. * @param delay the allocation delay in seconds */ - function initializeAllocationDelay(uint32 delay) external { + function initializeAllocationDelay( + uint32 delay + ) external { _initializeAllocationDelay(delay); } @@ -141,7 +143,9 @@ contract DelegationManager is * * @dev The caller must have previously registered as an operator in EigenLayer. */ - function modifyOperatorDetails(OperatorDetails calldata newOperatorDetails) external { + function modifyOperatorDetails( + OperatorDetails calldata newOperatorDetails + ) external { require(isOperator(msg.sender), OperatorNotRegistered()); _setOperatorDetails(msg.sender, newOperatorDetails); } @@ -150,7 +154,9 @@ contract DelegationManager is * @notice Called by an operator to emit an `OperatorMetadataURIUpdated` event indicating the information has updated. * @param metadataURI The URI for metadata associated with an operator */ - function updateOperatorMetadataURI(string calldata metadataURI) external { + function updateOperatorMetadataURI( + string calldata metadataURI + ) external { require(isOperator(msg.sender), OperatorNotRegistered()); emit OperatorMetadataURIUpdated(msg.sender, metadataURI); } @@ -228,11 +234,9 @@ contract DelegationManager is * a staker from their operator. Undelegation immediately removes ALL active shares/strategies from * both the staker and operator, and places the shares and strategies in the withdrawal queue */ - function undelegate(address staker) - external - onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) - returns (bytes32[] memory withdrawalRoots) - { + function undelegate( + address staker + ) external onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) returns (bytes32[] memory withdrawalRoots) { require(isDelegated(staker), NotActivelyDelegated()); require(!isOperator(staker), OperatorsCannotUndelegate()); require(staker != address(0), InputAddressZero()); @@ -292,11 +296,9 @@ contract DelegationManager is * * All withdrawn shares/strategies are placed in a queue and can be fully withdrawn after a delay. */ - function queueWithdrawals(QueuedWithdrawalParams[] calldata queuedWithdrawalParams) - external - onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) - returns (bytes32[] memory) - { + function queueWithdrawals( + QueuedWithdrawalParams[] calldata queuedWithdrawalParams + ) external onlyWhenNotPaused(PAUSED_ENTER_WITHDRAWAL_QUEUE) returns (bytes32[] memory) { bytes32[] memory withdrawalRoots = new bytes32[](queuedWithdrawalParams.length); address operator = delegatedTo[msg.sender]; @@ -464,7 +466,9 @@ contract DelegationManager is * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. * @param delay the allocation delay in seconds */ - function _initializeAllocationDelay(uint32 delay) internal { + function _initializeAllocationDelay( + uint32 delay + ) internal { require(isOperator(msg.sender), OperatorNotRegistered()); require(!_operatorAllocationDelay[msg.sender].isSet, AllocationDelaySet()); _operatorAllocationDelay[msg.sender] = AllocationDelayDetails({isSet: true, allocationDelay: delay}); @@ -1024,21 +1028,27 @@ contract DelegationManager is /** * @notice Returns 'true' if `staker` *is* actively delegated, and 'false' otherwise. */ - function isDelegated(address staker) public view returns (bool) { + function isDelegated( + address staker + ) public view returns (bool) { return (delegatedTo[staker] != address(0)); } /** * @notice Returns true is an operator has previously registered for delegation. */ - function isOperator(address operator) public view returns (bool) { + function isOperator( + address operator + ) public view returns (bool) { return operator != address(0) && delegatedTo[operator] == operator; } /** * @notice Returns the OperatorDetails struct associated with an `operator`. */ - function operatorDetails(address operator) external view returns (OperatorDetails memory) { + function operatorDetails( + address operator + ) external view returns (OperatorDetails memory) { return _operatorDetails[operator]; } @@ -1046,21 +1056,27 @@ contract DelegationManager is * @notice Returns the AllocationDelayDetails struct associated with an `operator` * @dev If the operator has not set an allocation delay, then the `isSet` field will be `false`. */ - function operatorAllocationDelay(address operator) external view returns (AllocationDelayDetails memory) { + function operatorAllocationDelay( + address operator + ) external view returns (AllocationDelayDetails memory) { return _operatorAllocationDelay[operator]; } /** * @notice Returns the delegationApprover account for an operator */ - function delegationApprover(address operator) external view returns (address) { + function delegationApprover( + address operator + ) external view returns (address) { return _operatorDetails[operator].delegationApprover; } /** * @notice Returns the stakerOptOutWindowBlocks for an operator */ - function stakerOptOutWindowBlocks(address operator) external view returns (uint256) { + function stakerOptOutWindowBlocks( + address operator + ) external view returns (uint256) { return _operatorDetails[operator].stakerOptOutWindowBlocks; } @@ -1106,7 +1122,9 @@ contract DelegationManager is * delegatable shares! * @dev Returns two empty arrays in the case that the Staker has no actively-delegateable shares. */ - function getDelegatableShares(address staker) public view returns (IStrategy[] memory, uint256[] memory) { + function getDelegatableShares( + address staker + ) public view returns (IStrategy[] memory, uint256[] memory) { // Get current StrategyManager/EigenPodManager shares and strategies for `staker` // If `staker` is already delegated, these may not be the full withdrawable amounts due to slashing int256 podShares = eigenPodManager.podOwnerShares(staker); @@ -1149,7 +1167,9 @@ contract DelegationManager is } /// @notice Returns the keccak256 hash of `withdrawal`. - function calculateWithdrawalRoot(Withdrawal memory withdrawal) public pure returns (bytes32) { + function calculateWithdrawalRoot( + Withdrawal memory withdrawal + ) public pure returns (bytes32) { return keccak256(abi.encode(withdrawal)); } diff --git a/src/contracts/core/RewardsCoordinator.sol b/src/contracts/core/RewardsCoordinator.sol index 2381d2724..3de80e295 100644 --- a/src/contracts/core/RewardsCoordinator.sol +++ b/src/contracts/core/RewardsCoordinator.sol @@ -47,6 +47,8 @@ contract RewardsCoordinator is uint8 internal constant PAUSED_PROCESS_CLAIM = 2; /// @dev Index for flag that pauses submitRoots and disableRoot uint8 internal constant PAUSED_SUBMIT_DISABLE_ROOTS = 3; + /// @dev Index for flag that pauses calling rewardAllStakersAndOperators + uint8 internal constant PAUSED_REWARD_ALL_STAKERS_AND_OPERATORS = 4; /// @dev Index for flag that pauses calling rewardOperatorSetForRange uint8 internal constant PAUSED_REWARD_OPERATOR_SET = 5; @@ -137,11 +139,9 @@ contract RewardsCoordinator is * @dev This function will revert if the `rewardsSubmission` is malformed, * e.g. if the `strategies` and `weights` arrays are of non-equal lengths */ - function createAVSRewardsSubmission(RewardsSubmission[] calldata rewardsSubmissions) - external - onlyWhenNotPaused(PAUSED_AVS_REWARDS_SUBMISSION) - nonReentrant - { + function createAVSRewardsSubmission( + RewardsSubmission[] calldata rewardsSubmissions + ) external onlyWhenNotPaused(PAUSED_AVS_REWARDS_SUBMISSION) nonReentrant { for (uint256 i = 0; i < rewardsSubmissions.length;) { RewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -175,12 +175,9 @@ contract RewardsCoordinator is * a permissioned call based on isRewardsForAllSubmitter mapping. * @param rewardsSubmissions The rewards submissions being created */ - function createRewardsForAllSubmission(RewardsSubmission[] calldata rewardsSubmissions) - external - onlyWhenNotPaused(PAUSED_REWARDS_FOR_ALL_SUBMISSION) - onlyRewardsForAllSubmitter - nonReentrant - { + function createRewardsForAllSubmission( + RewardsSubmission[] calldata rewardsSubmissions + ) external onlyWhenNotPaused(PAUSED_REWARDS_FOR_ALL_SUBMISSION) onlyRewardsForAllSubmitter nonReentrant { for (uint256 i = 0; i < rewardsSubmissions.length;) { RewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -221,11 +218,9 @@ contract RewardsCoordinator is * @dev The tokens in the rewards submissions are sent to the `RewardsCoordinator` contract * @dev Strategies of each rewards submission must be in ascending order of addresses to check for duplicates */ - function rewardOperatorSetForRange(OperatorSetRewardsSubmission[] calldata rewardsSubmissions) - external - onlyWhenNotPaused(PAUSED_REWARD_OPERATOR_SET) - nonReentrant - { + function rewardOperatorSetForRange( + OperatorSetRewardsSubmission[] calldata rewardsSubmissions + ) external onlyWhenNotPaused(PAUSED_REWARD_OPERATOR_SET) nonReentrant { for (uint256 i = 0; i < rewardsSubmissions.length;) { OperatorSetRewardsSubmission calldata rewardsSubmission = rewardsSubmissions[i]; uint256 nonce = submissionNonce[msg.sender]; @@ -269,7 +264,15 @@ contract RewardsCoordinator is uint256 nonce = submissionNonce[msg.sender]; bytes32 rewardsSubmissionForAllEarnersHash = keccak256(abi.encode(msg.sender, nonce, rewardsSubmission)); - _validateRewardsSubmission(rewardsSubmission); + _validateRewardsSubmission( + rewardsSubmission.strategiesAndMultipliers, + rewardsSubmission.token, + rewardsSubmission.amount, + rewardsSubmission.startTimestamp, + rewardsSubmission.duration, + MAX_RETROACTIVE_LENGTH, + GENESIS_REWARDS_TIMESTAMP + ); isRewardsSubmissionForAllEarnersHash[msg.sender][rewardsSubmissionForAllEarnersHash] = true; submissionNonce[msg.sender] = nonce + 1; @@ -353,7 +356,9 @@ contract RewardsCoordinator is * @notice allow the rewardsUpdater to disable/cancel a pending root submission in case of an error * @param rootIndex The index of the root to be disabled */ - function disableRoot(uint32 rootIndex) external onlyWhenNotPaused(PAUSED_SUBMIT_DISABLE_ROOTS) onlyRewardsUpdater { + function disableRoot( + uint32 rootIndex + ) external onlyWhenNotPaused(PAUSED_SUBMIT_DISABLE_ROOTS) onlyRewardsUpdater { require(rootIndex < _distributionRoots.length, InvalidRootIndex()); DistributionRoot storage root = _distributionRoots[rootIndex]; require(!root.disabled, RootDisabled()); @@ -367,7 +372,9 @@ contract RewardsCoordinator is * @param claimer The address of the entity that can call `processClaim` on behalf of the earner * @dev Only callable by the `earner` */ - function setClaimerFor(address claimer) external { + function setClaimerFor( + address claimer + ) external { address earner = msg.sender; address prevClaimer = claimerFor[earner]; claimerFor[earner] = claimer; @@ -412,7 +419,9 @@ contract RewardsCoordinator is * @dev Only callable by the contract owner * @param _activationDelay The new value for activationDelay */ - function setActivationDelay(uint32 _activationDelay) external onlyOwner { + function setActivationDelay( + uint32 _activationDelay + ) external onlyOwner { _setActivationDelay(_activationDelay); } @@ -421,7 +430,9 @@ contract RewardsCoordinator is * @dev Only callable by the contract owner * @param _globalCommissionBips The commission for all operators across all avss */ - function setGlobalOperatorCommission(uint16 _globalCommissionBips) external onlyOwner { + function setGlobalOperatorCommission( + uint16 _globalCommissionBips + ) external onlyOwner { _setGlobalOperatorCommission(_globalCommissionBips); } @@ -430,7 +441,9 @@ contract RewardsCoordinator is * @dev Only callable by the contract owner * @param _rewardsUpdater The address of the new rewardsUpdater */ - function setRewardsUpdater(address _rewardsUpdater) external onlyOwner { + function setRewardsUpdater( + address _rewardsUpdater + ) external onlyOwner { _setRewardsUpdater(_rewardsUpdater); } @@ -582,17 +595,23 @@ contract RewardsCoordinator is ); } - function _setActivationDelay(uint32 _activationDelay) internal { + function _setActivationDelay( + uint32 _activationDelay + ) internal { emit ActivationDelaySet(activationDelay, _activationDelay); activationDelay = _activationDelay; } - function _setGlobalOperatorCommission(uint16 _globalCommissionBips) internal { + function _setGlobalOperatorCommission( + uint16 _globalCommissionBips + ) internal { emit GlobalCommissionBipsSet(globalOperatorCommissionBips, _globalCommissionBips); globalOperatorCommissionBips = _globalCommissionBips; } - function _setRewardsUpdater(address _rewardsUpdater) internal { + function _setRewardsUpdater( + address _rewardsUpdater + ) internal { emit RewardsUpdaterSet(rewardsUpdater, _rewardsUpdater); rewardsUpdater = _rewardsUpdater; } @@ -604,18 +623,24 @@ contract RewardsCoordinator is */ /// @notice return the hash of the earner's leaf - function calculateEarnerLeafHash(EarnerTreeMerkleLeaf calldata leaf) public pure returns (bytes32) { + function calculateEarnerLeafHash( + EarnerTreeMerkleLeaf calldata leaf + ) public pure returns (bytes32) { return keccak256(abi.encodePacked(EARNER_LEAF_SALT, leaf.earner, leaf.earnerTokenRoot)); } /// @notice returns the hash of the earner's token leaf - function calculateTokenLeafHash(TokenTreeMerkleLeaf calldata leaf) public pure returns (bytes32) { + function calculateTokenLeafHash( + TokenTreeMerkleLeaf calldata leaf + ) public pure returns (bytes32) { return keccak256(abi.encodePacked(TOKEN_LEAF_SALT, leaf.token, leaf.cumulativeEarnings)); } /// @notice returns 'true' if the claim would currently pass the check in `processClaims` /// but will revert if not valid - function checkClaim(RewardsMerkleClaim calldata claim) public view returns (bool) { + function checkClaim( + RewardsMerkleClaim calldata claim + ) public view returns (bool) { _checkClaim(claim, _distributionRoots[claim.rootIndex]); return true; } @@ -645,7 +670,9 @@ contract RewardsCoordinator is return _distributionRoots.length; } - function getDistributionRootAtIndex(uint256 index) external view returns (DistributionRoot memory) { + function getDistributionRootAtIndex( + uint256 index + ) external view returns (DistributionRoot memory) { return _distributionRoots[index]; } @@ -666,7 +693,9 @@ contract RewardsCoordinator is } /// @notice loop through distribution roots from reverse and return hash - function getRootIndexFromHash(bytes32 rootHash) public view returns (uint32) { + function getRootIndexFromHash( + bytes32 rootHash + ) public view returns (uint32) { for (uint32 i = uint32(_distributionRoots.length); i > 0; i--) { if (_distributionRoots[i - 1].root == rootHash) { return i - 1; diff --git a/src/contracts/core/Slasher.sol b/src/contracts/core/Slasher.sol index 98901f9de..85cc9a2ae 100644 --- a/src/contracts/core/Slasher.sol +++ b/src/contracts/core/Slasher.sol @@ -29,11 +29,17 @@ contract Slasher is Initializable, OwnableUpgradeable, ISlasher, Pausable { function initialize(address, IPauserRegistry, uint256) external {} - function optIntoSlashing(address) external {} + function optIntoSlashing( + address + ) external {} - function freezeOperator(address) external {} + function freezeOperator( + address + ) external {} - function resetFrozenStatus(address[] calldata) external {} + function resetFrozenStatus( + address[] calldata + ) external {} function recordFirstStakeUpdate(address, uint32) external {} @@ -45,7 +51,9 @@ contract Slasher is Initializable, OwnableUpgradeable, ISlasher, Pausable { function delegation() external view returns (IDelegationManager) {} - function isFrozen(address) external view returns (bool) {} + function isFrozen( + address + ) external view returns (bool) {} function canSlash(address, address) external view returns (bool) {} @@ -59,13 +67,17 @@ contract Slasher is Initializable, OwnableUpgradeable, ISlasher, Pausable { function operatorToMiddlewareTimes(address, uint256) external view returns (MiddlewareTimes memory) {} - function middlewareTimesLength(address) external view returns (uint256) {} + function middlewareTimesLength( + address + ) external view returns (uint256) {} function getMiddlewareTimesIndexStalestUpdateBlock(address, uint32) external view returns (uint32) {} function getMiddlewareTimesIndexServeUntilBlock(address, uint32) external view returns (uint32) {} - function operatorWhitelistedContractsLinkedListSize(address) external view returns (uint256) {} + function operatorWhitelistedContractsLinkedListSize( + address + ) external view returns (uint256) {} function operatorWhitelistedContractsLinkedListEntry( address, diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index 1f7176f9a..443ce4f42 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -39,7 +39,9 @@ contract StrategyManager is _; } - modifier onlyStrategiesWhitelistedForDeposit(IStrategy strategy) { + modifier onlyStrategiesWhitelistedForDeposit( + IStrategy strategy + ) { require(strategyIsWhitelistedForDeposit[strategy], StrategyNotWhitelisted()); _; } @@ -188,7 +190,9 @@ contract StrategyManager is * @notice Owner-only function to change the `strategyWhitelister` address. * @param newStrategyWhitelister new address for the `strategyWhitelister`. */ - function setStrategyWhitelister(address newStrategyWhitelister) external onlyOwner { + function setStrategyWhitelister( + address newStrategyWhitelister + ) external onlyOwner { _setStrategyWhitelister(newStrategyWhitelister); } @@ -196,10 +200,9 @@ contract StrategyManager is * @notice Owner-only function that adds the provided Strategies to the 'whitelist' of strategies that stakers can deposit into * @param strategiesToWhitelist Strategies that will be added to the `strategyIsWhitelistedForDeposit` mapping (if they aren't in it already) */ - function addStrategiesToDepositWhitelist(IStrategy[] calldata strategiesToWhitelist) - external - onlyStrategyWhitelister - { + function addStrategiesToDepositWhitelist( + IStrategy[] calldata strategiesToWhitelist + ) external onlyStrategyWhitelister { uint256 strategiesToWhitelistLength = strategiesToWhitelist.length; for (uint256 i = 0; i < strategiesToWhitelistLength; ++i) { // change storage and emit event only if strategy is not already in whitelist @@ -214,10 +217,9 @@ contract StrategyManager is * @notice Owner-only function that removes the provided Strategies from the 'whitelist' of strategies that stakers can deposit into * @param strategiesToRemoveFromWhitelist Strategies that will be removed to the `strategyIsWhitelistedForDeposit` mapping (if they are in it) */ - function removeStrategiesFromDepositWhitelist(IStrategy[] calldata strategiesToRemoveFromWhitelist) - external - onlyStrategyWhitelister - { + function removeStrategiesFromDepositWhitelist( + IStrategy[] calldata strategiesToRemoveFromWhitelist + ) external onlyStrategyWhitelister { uint256 strategiesToRemoveFromWhitelistLength = strategiesToRemoveFromWhitelist.length; for (uint256 i = 0; i < strategiesToRemoveFromWhitelistLength; ++i) { // change storage and emit event only if strategy is already in whitelist @@ -360,7 +362,9 @@ contract StrategyManager is * @notice Internal function for modifying the `strategyWhitelister`. Used inside of the `setStrategyWhitelister` and `initialize` functions. * @param newStrategyWhitelister The new address for the `strategyWhitelister` to take. */ - function _setStrategyWhitelister(address newStrategyWhitelister) internal { + function _setStrategyWhitelister( + address newStrategyWhitelister + ) internal { emit StrategyWhitelisterChanged(strategyWhitelister, newStrategyWhitelister); strategyWhitelister = newStrategyWhitelister; } @@ -372,7 +376,9 @@ contract StrategyManager is * @param staker The staker of interest, whose deposits this function will fetch * @return (staker's strategies, shares in these strategies) */ - function getDeposits(address staker) external view returns (IStrategy[] memory, uint256[] memory) { + function getDeposits( + address staker + ) external view returns (IStrategy[] memory, uint256[] memory) { uint256 strategiesLength = stakerStrategyList[staker].length; uint256[] memory shares = new uint256[](strategiesLength); @@ -383,7 +389,9 @@ contract StrategyManager is } /// @notice Simple getter function that returns `stakerStrategyList[staker].length`. - function stakerStrategyListLength(address staker) external view returns (uint256) { + function stakerStrategyListLength( + address staker + ) external view returns (uint256) { return stakerStrategyList[staker].length; } From c29e9e812f552c8b8f172426c971c481f7d10bee Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Thu, 12 Sep 2024 18:34:22 -0400 Subject: [PATCH 25/47] chore: rebase gap fix --- src/contracts/core/DelegationManagerStorage.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index 6486dea49..2c99dbe3e 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -136,5 +136,5 @@ abstract contract DelegationManagerStorage is IDelegationManager { * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ - uint256[39] private __gap; + uint256[37] private __gap; } From 38109d661b8500bee84a48ba2ab36fc36c2778e9 Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Fri, 13 Sep 2024 10:48:31 -0400 Subject: [PATCH 26/47] fix: immutables and slashinglib also fixed scaledStakerShares calculation in calculateSharesToQueueWithdraw --- .../holesky/M2_Deploy_From_Scratch.s.sol | 4 +- script/deploy/local/Deploy_From_Scratch.s.sol | 10 +- script/utils/ExistingDeploymentParser.sol | 4 +- src/contracts/core/AllocationManager.sol | 26 +-- .../core/AllocationManagerStorage.sol | 7 +- src/contracts/core/DelegationManager.sol | 201 +++++------------- .../core/DelegationManagerStorage.sol | 7 +- src/contracts/libraries/SlashingConstants.sol | 19 -- src/contracts/libraries/SlashingLib.sol | 110 ++++++++++ .../integration/IntegrationDeployer.t.sol | 27 ++- src/test/unit/AVSDirectoryUnit.t.sol | 9 +- 11 files changed, 230 insertions(+), 194 deletions(-) delete mode 100644 src/contracts/libraries/SlashingConstants.sol create mode 100644 src/contracts/libraries/SlashingLib.sol diff --git a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol index 8158ecc7f..26b7e0f3f 100644 --- a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol +++ b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol @@ -80,7 +80,7 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); avsDirectoryImplementation = new AVSDirectory(delegationManager); - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); + delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager, MIN_WITHDRAWAL_DELAY); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( @@ -90,7 +90,7 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { slasher, delegationManager ); - allocationManagerImplementation = new AllocationManager(delegationManager, avsDirectory); + allocationManagerImplementation = new AllocationManager(delegationManager, avsDirectory, DEALLOCATION_DELAY); // Third, upgrade the proxy contracts to point to the implementations IStrategy[] memory initializeStrategiesToSetDelayBlocks = new IStrategy[](0); diff --git a/script/deploy/local/Deploy_From_Scratch.s.sol b/script/deploy/local/Deploy_From_Scratch.s.sol index 2c507c7f3..07203c9a5 100644 --- a/script/deploy/local/Deploy_From_Scratch.s.sol +++ b/script/deploy/local/Deploy_From_Scratch.s.sol @@ -89,6 +89,12 @@ contract DeployFromScratch is Script, Test { uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS; uint256 REWARDS_COORDINATOR_INIT_PAUSED_STATUS; + // DelegationManager + uint32 MIN_WITHDRAWAL_DELAY; + + // AllocationManager + uint32 DEALLOCATION_DELAY; + // RewardsCoordinator uint32 REWARDS_COORDINATOR_MAX_REWARDS_DURATION; uint32 REWARDS_COORDINATOR_MAX_RETROACTIVE_LENGTH; @@ -221,7 +227,7 @@ contract DeployFromScratch is Script, Test { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); + delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager, MIN_WITHDRAWAL_DELAY); strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher, avsDirectory); avsDirectoryImplementation = new AVSDirectory(delegation); slasherImplementation = new Slasher(strategyManager, delegation); @@ -244,7 +250,7 @@ contract DeployFromScratch is Script, Test { REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH ); - allocationManagerImplementation = new AllocationManager(delegation, avsDirectory); + allocationManagerImplementation = new AllocationManager(delegation, avsDirectory, DEALLOCATION_DELAY); // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. { diff --git a/script/utils/ExistingDeploymentParser.sol b/script/utils/ExistingDeploymentParser.sol index aab8e3c37..2536f5cc7 100644 --- a/script/utils/ExistingDeploymentParser.sol +++ b/script/utils/ExistingDeploymentParser.sol @@ -108,6 +108,7 @@ contract ExistingDeploymentParser is Script, Test { // DelegationManager uint256 DELEGATION_MANAGER_INIT_PAUSED_STATUS; uint256 DELEGATION_MANAGER_MIN_WITHDRAWAL_DELAY_BLOCKS; + uint32 MIN_WITHDRAWAL_DELAY; // AVSDirectory uint256 AVS_DIRECTORY_INIT_PAUSED_STATUS; // RewardsCoordinator @@ -124,8 +125,9 @@ contract ExistingDeploymentParser is Script, Test { uint32 REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH; // EigenPodManager uint256 EIGENPOD_MANAGER_INIT_PAUSED_STATUS; - // AllocaitonManager + // AllocationManager uint256 ALLOCATION_MANAGER_INIT_PAUSED_STATUS; + uint32 DEALLOCATION_DELAY; // EigenPod uint64 EIGENPOD_GENESIS_TIME; uint64 EIGENPOD_MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR; diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index a99757362..5a87753f1 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -7,7 +7,7 @@ import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol import "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; -import "../libraries/SlashingConstants.sol"; +import "../libraries/SlashingLib.sol"; import "./AllocationManagerStorage.sol"; contract AllocationManager is @@ -23,6 +23,7 @@ contract AllocationManager is uint256 internal constant BIPS_FACTOR = 10_000; /// @dev Maximum number of pending updates that can be queued for allocations/deallocations + /// Note this max applies for a single (operator, strategy, operatorSet) tuple. uint256 public constant MAX_PENDING_UPDATES = 1; /// @dev Returns the chain ID from the time the contract was deployed. @@ -40,8 +41,9 @@ contract AllocationManager is */ constructor( IDelegationManager _delegation, - IAVSDirectory _avsDirectory - ) AllocationManagerStorage(_delegation, _avsDirectory) { + IAVSDirectory _avsDirectory, + uint32 _DEALLOCATION_DELAY + ) AllocationManagerStorage(_delegation, _avsDirectory, _DEALLOCATION_DELAY) { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; } @@ -108,7 +110,7 @@ contract AllocationManager is // effect timestamp for allocations to take effect. This is configurable by operators uint32 effectTimestamp = uint32(block.timestamp) + details.allocationDelay; // completable timestamp for deallocations - uint32 completableTimestamp = uint32(block.timestamp) + SlashingConstants.DEALLOCATION_DELAY; + uint32 completableTimestamp = uint32(block.timestamp) + DEALLOCATION_DELAY; for (uint256 i = 0; i < allocations.length; ++i) { // 1. For the given (operator,strategy) clear all pending free magnitude for the strategy and update freeMagnitude @@ -368,9 +370,9 @@ contract AllocationManager is function _getLatestTotalMagnitude(address operator, IStrategy strategy) internal returns (uint64) { (bool exists,, uint224 totalMagnitude) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); if (!exists) { - totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + totalMagnitude = SlashingLib.INITIAL_TOTAL_MAGNITUDE; _totalMagnitudeUpdate[operator][strategy].push({key: uint32(block.timestamp), value: totalMagnitude}); - operatorMagnitudeInfo[operator][strategy].freeMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + operatorMagnitudeInfo[operator][strategy].freeMagnitude = SlashingLib.INITIAL_TOTAL_MAGNITUDE; } return uint64(totalMagnitude); @@ -531,7 +533,7 @@ contract AllocationManager is (, uint32 lastDeregisteredTimestamp) = avsDirectory.operatorSetStatus(operatorSet.avs, operator, operatorSet.operatorSetId); return avsDirectory.isMember(operator, operatorSet) - || lastDeregisteredTimestamp + SlashingConstants.DEALLOCATION_DELAY >= block.timestamp; + || lastDeregisteredTimestamp + DEALLOCATION_DELAY >= block.timestamp; } /** @@ -548,7 +550,7 @@ contract AllocationManager is for (uint256 i = 0; i < strategies.length; ++i) { (bool exists,, uint224 value) = _totalMagnitudeUpdate[operator][strategies[i]].latestSnapshot(); if (!exists) { - totalMagnitudes[i] = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + totalMagnitudes[i] = SlashingLib.INITIAL_TOTAL_MAGNITUDE; } else { totalMagnitudes[i] = uint64(value); } @@ -574,7 +576,7 @@ contract AllocationManager is _totalMagnitudeUpdate[operator][strategies[i]].upperLookupRecentWithPos(timestamp); // if there is no existing total magnitude snapshot if (value == 0 && pos == 0) { - totalMagnitudes[i] = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + totalMagnitudes[i] = SlashingLib.INITIAL_TOTAL_MAGNITUDE; } else { totalMagnitudes[i] = uint64(value); } @@ -592,7 +594,7 @@ contract AllocationManager is uint64 totalMagnitude; (bool exists,, uint224 value) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); if (!exists) { - totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + totalMagnitude = SlashingLib.INITIAL_TOTAL_MAGNITUDE; } else { totalMagnitude = uint64(value); } @@ -612,12 +614,12 @@ contract AllocationManager is IStrategy strategy, uint32 timestamp ) external view returns (uint64) { - uint64 totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + uint64 totalMagnitude = SlashingLib.INITIAL_TOTAL_MAGNITUDE; (uint224 value, uint256 pos,) = _totalMagnitudeUpdate[operator][strategy].upperLookupRecentWithPos(timestamp); // if there is no existing total magnitude snapshot if (value == 0 && pos == 0) { - totalMagnitude = SlashingConstants.INITIAL_TOTAL_MAGNITUDE; + totalMagnitude = SlashingLib.INITIAL_TOTAL_MAGNITUDE; } else { totalMagnitude = uint64(value); } diff --git a/src/contracts/core/AllocationManagerStorage.sol b/src/contracts/core/AllocationManagerStorage.sol index 2b19fc551..687f70129 100644 --- a/src/contracts/core/AllocationManagerStorage.sol +++ b/src/contracts/core/AllocationManagerStorage.sol @@ -18,6 +18,10 @@ abstract contract AllocationManagerStorage is IAllocationManager { "MagnitudeAdjustments(address operator,MagnitudeAdjustment(address strategy, OperatorSet(address avs, uint32 operatorSetId)[], uint64[] magnitudeDiffs)[],bytes32 salt,uint256 expiry)" ); + /// @notice Delay before deallocations are completable and can be added back into freeMagnitude + /// In this window, deallocations still remain slashable by the operatorSet they were allocated to. + uint32 public immutable DEALLOCATION_DELAY; + /// @notice The DelegationManager contract for EigenLayer IDelegationManager public immutable delegation; @@ -50,9 +54,10 @@ abstract contract AllocationManagerStorage is IAllocationManager { /// @notice Mapping: operator => strategy => operatorSet (encoded) => list of queuedDeallocation indices mapping(address => mapping(IStrategy => mapping(bytes32 => uint256[]))) internal _queuedDeallocationIndices; - constructor(IDelegationManager _delegation, IAVSDirectory _avsDirectory) { + constructor(IDelegationManager _delegation, IAVSDirectory _avsDirectory, uint32 _DEALLOCATION_DELAY) { delegation = _delegation; avsDirectory = _avsDirectory; + DEALLOCATION_DELAY = _DEALLOCATION_DELAY; } /** diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 9a35527dc..331c3b7da 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -6,7 +6,7 @@ import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol"; import "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; -import "../libraries/SlashingConstants.sol"; +import "../libraries/SlashingLib.sol"; import "./DelegationManagerStorage.sol"; /** @@ -45,8 +45,6 @@ contract DelegationManager is /// should be processed as legacy M2 or with slashing considered. uint32 public constant LEGACY_WITHDRAWALS_TIMESTAMP = 1_735_750_800; - uint32 public constant WITHDRAWAL_DELAY = SlashingConstants.DEALLOCATION_DELAY; - /// @notice Canonical, virtual beacon chain ETH strategy IStrategy public constant beaconChainETHStrategy = IStrategy(0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0); @@ -73,8 +71,9 @@ contract DelegationManager is ISlasher _slasher, IEigenPodManager _eigenPodManager, IAVSDirectory _avsDirectory, - IAllocationManager _allocationManager - ) DelegationManagerStorage(_strategyManager, _slasher, _eigenPodManager, _avsDirectory, _allocationManager) { + IAllocationManager _allocationManager, + uint32 _MIN_WITHDRAWAL_DELAY + ) DelegationManagerStorage(_strategyManager, _slasher, _eigenPodManager, _avsDirectory, _allocationManager, _MIN_WITHDRAWAL_DELAY) { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; } @@ -391,9 +390,9 @@ contract DelegationManager is uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategy); // update stakers scaling deposit scaling factor - uint256 newStakerScalingFactor = _calculateStakerScalingFactor({ + uint256 newStakerScalingFactor = SlashingLib.calculateStakerScalingFactor({ staker: staker, - strategy: strategy, + currStakerScalingFactor: _getStakerScalingFactor(staker, strategy), totalMagnitude: totalMagnitude, existingShares: existingShares, addedShares: addedShares @@ -537,9 +536,9 @@ contract DelegationManager is for (uint256 i = 0; i < strategies.length; ++i) { // update stakers scaling deposit scaling factor - uint256 newStakerScalingFactor = _calculateStakerScalingFactor({ + uint256 newStakerScalingFactor = SlashingLib.calculateStakerScalingFactor({ staker: staker, - strategy: strategies[i], + currStakerScalingFactor: _getStakerScalingFactor(staker, strategies[i]), totalMagnitude: totalMagnitudes[i], existingShares: 0, addedShares: shares[i] @@ -587,7 +586,7 @@ contract DelegationManager is isLegacyWithdrawal = true; } else { // this is a post Slashing release withdrawal using timestamps - require(withdrawal.startTimestamp + WITHDRAWAL_DELAY <= block.timestamp, WithdrawalDelayNotElapsed()); + require(withdrawal.startTimestamp + MIN_WITHDRAWAL_DELAY <= block.timestamp, WithdrawalDelayNotElapsed()); } // read delegated operator's totalMagnitudes at time of withdrawal to scale shares again if any slashing has occurred @@ -595,7 +594,7 @@ contract DelegationManager is uint64[] memory totalMagnitudes = allocationManager.getTotalMagnitudesAtTimestamp({ operator: withdrawal.delegatedTo, strategies: withdrawal.strategies, - timestamp: withdrawal.startTimestamp + WITHDRAWAL_DELAY + timestamp: withdrawal.startTimestamp + MIN_WITHDRAWAL_DELAY }); if (receiveAsTokens) { @@ -633,16 +632,26 @@ contract DelegationManager is // Take already scaled staker shares and scale again according to current operator totalMagnitude // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares // are still susceptible to slashing - sharesToWithdraw = _calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); + sharesToWithdraw = SlashingLib.calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); } - _withdrawSharesAsTokens({ - staker: withdrawal.staker, - withdrawer: msg.sender, - strategy: withdrawal.strategies[i], - shares: sharesToWithdraw, - token: tokens[i] - }); + // Withdraws `shares` in `strategy` to `withdrawer`. If the shares are virtual beaconChainETH shares, + // then a call is ultimately forwarded to the `staker`s EigenPod; otherwise a call is ultimately forwarded + // to the `strategy` with info on the `token`. + if (withdrawal.strategies[i] == beaconChainETHStrategy) { + eigenPodManager.withdrawSharesAsTokens({ + podOwner: withdrawal.staker, + destination: msg.sender, + shares: sharesToWithdraw + }); + } else { + strategyManager.withdrawSharesAsTokens({ + recipient: msg.sender, + strategy: withdrawal.strategies[i], + shares: sharesToWithdraw, + token: tokens[i] + }); + } } } @@ -673,7 +682,7 @@ contract DelegationManager is // Take already scaled staker shares and scale again according to current operator totalMagnitude // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares // are still susceptible to slashing - shares = _calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); + shares = SlashingLib.calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); } /** @@ -715,9 +724,9 @@ contract DelegationManager is } // update stakers scaling deposit scaling factor - uint256 newStakerScalingFactor = _calculateStakerScalingFactor({ + uint256 newStakerScalingFactor = SlashingLib.calculateStakerScalingFactor({ staker: withdrawal.staker, - strategy: withdrawal.strategies[i], + currStakerScalingFactor: _getStakerScalingFactor(withdrawal.staker, withdrawal.strategies[i]), totalMagnitude: totalMagnitudes[i], existingShares: existingShares, addedShares: shares @@ -742,7 +751,7 @@ contract DelegationManager is uint64 totalMagnitude ) internal { // based on total magnitude, update operators scaled shares - uint256 scaledShares = _scaleShares(shares, totalMagnitude); + uint256 scaledShares = SlashingLib.scaleShares(shares, totalMagnitude); operatorScaledShares[operator][strategy] += scaledShares; // TODO: What to do about event wrt scaling? @@ -765,7 +774,7 @@ contract DelegationManager is uint64 totalMagnitude ) internal { // based on total magnitude, decrement operator's scaled shares - uint256 scaledShares = _scaleShares(shares, totalMagnitude); + uint256 scaledShares = SlashingLib.scaleShares(shares, totalMagnitude); operatorScaledShares[operator][strategy] -= scaledShares; // TODO: What to do about event wrt scaling? emit OperatorSharesDecreased(operator, staker, strategy, scaledShares); @@ -803,18 +812,23 @@ contract DelegationManager is } else { totalShares = strategyManager.stakerStrategyShares(staker, strategies[i]); } + uint256 stakerScalingFactor = _getStakerScalingFactor(staker, strategies[i]); require( - sharesToWithdraw[i] <= _getWithdrawableShares(staker, strategies[i], totalShares, totalMagnitudes[i]), + sharesToWithdraw[i] <= SlashingLib.getWithdrawableShares({ + staker: staker, + stakerScalingFactor: stakerScalingFactor, + shares: totalShares, + currTotalMagnitude: totalMagnitudes[i] + }), WithdrawalExeedsMax() ); - // calculate scaledShares to place into queue withdrawal and shares to decrement from SM/EPM - uint256 stakerScalingFactor = _getStakerScalingFactor(staker, strategies[i]); + ( // shares to decrement from StrategyManager/EigenPodManager uint256 sharesToDecrement, // scaledShares for staker to place into queueWithdrawal uint256 scaledShares - ) = _calculateSharesToQueueWithdraw(sharesToWithdraw[i], stakerScalingFactor, totalMagnitudes[i]); + ) = SlashingLib.calculateSharesToQueueWithdraw(sharesToWithdraw[i], stakerScalingFactor, totalMagnitudes[i]); scaledStakerShares[i] = scaledShares; // Similar to `isDelegated` logic @@ -867,143 +881,23 @@ contract DelegationManager is return withdrawalRoot; } - /** - * @notice Withdraws `shares` in `strategy` to `withdrawer`. If the shares are virtual beaconChainETH shares, then a call is ultimately forwarded to the - * `staker`s EigenPod; otherwise a call is ultimately forwarded to the `strategy` with info on the `token`. - */ - function _withdrawSharesAsTokens( - address staker, - address withdrawer, - IStrategy strategy, - uint256 shares, - IERC20 token - ) internal { - if (strategy == beaconChainETHStrategy) { - eigenPodManager.withdrawSharesAsTokens({podOwner: staker, destination: withdrawer, shares: shares}); - } else { - strategyManager.withdrawSharesAsTokens({ - recipient: withdrawer, - strategy: strategy, - shares: shares, - token: token - }); - } - } - /** * * SLASHING AND SHARES HELPER FUNCTIONS * */ - /** - * @notice helper pure to calculate the scaledShares to store in queue withdrawal - * and the shares to decrement from StrategyManager/EigenPodManager - */ - function _calculateSharesToQueueWithdraw( - uint256 sharesToWithdraw, - uint256 stakerScalingFactor, - uint64 totalMagnitude - ) internal pure returns (uint256 sharesToDecrement, uint256 scaledStakerShares) { - // TODO: DOUBLE CHECK THIS BEHAVIOR - // NOTE that to prevent numerator overflow, the max sharesToWithdraw is - // x*1e36 <= 2^256-1 - // => x <= 1.1579e41 - // however we know that the max shares in a strategy is 1e38-1 and all the ETH on the beaconchain staked - // in one eigenPod would be ~3e25. This product here is safe - sharesToDecrement = - (sharesToWithdraw * SlashingConstants.PRECISION_FACTOR_SQUARED) / (stakerScalingFactor * totalMagnitude); - scaledStakerShares = sharesToWithdraw * SlashingConstants.PRECISION_FACTOR / totalMagnitude; - return (sharesToDecrement, scaledStakerShares); - } - - /** - * @notice helper pure to calculate the shares to complete a withdrawal after slashing - * We use the totalMagnitude of the delegated operator at the time of withdrawal completion to scale the shares - * back to real StrategyManager/EigenPodManager shares - */ - function _calculateSharesToCompleteWithdraw( - uint256 scaledStakerShares, - uint64 totalMagnitudeAtCompletion - ) internal pure returns (uint256 shares) { - shares = scaledStakerShares * totalMagnitudeAtCompletion / SlashingConstants.PRECISION_FACTOR; - } - - /** - * @notice helper pure to return scaledShares given shares and current totalMagnitude. Used for - * adding/removing staker shares from operatorScaledShares - */ - function _scaleShares(uint256 shares, uint64 totalMagnitude) internal pure returns (uint256) { - return shares * SlashingConstants.PRECISION_FACTOR / totalMagnitude; - } - - /** - * @notice helper pure to return real strategy shares given operator scaledShares and current totalMagnitude. - * Used for returning the total delegated shares for an operator and strategy - */ - function _descaleShares(uint256 scaledShares, uint64 totalMagnitude) internal pure returns (uint256) { - return scaledShares * totalMagnitude / SlashingConstants.PRECISION_FACTOR; - } - /** * @notice staker scaling factor should be initialized and lower bounded to 1e18 */ function _getStakerScalingFactor(address staker, IStrategy strategy) internal view returns (uint256) { uint256 currStakerScalingFactor = stakerScalingFactors[staker][strategy]; if (currStakerScalingFactor == 0) { - currStakerScalingFactor = SlashingConstants.PRECISION_FACTOR; + currStakerScalingFactor = SlashingLib.PRECISION_FACTOR; } return currStakerScalingFactor; } - /** - * @notice helper to calculate the new staker scaling factor after adding shares. This is only used - * when a staker is depositing through the StrategyManager or EigenPodManager. A stakers scaling factor - * is only updated when they have new deposits and their shares are being increased. - */ - function _calculateStakerScalingFactor( - address staker, - IStrategy strategy, - uint64 totalMagnitude, - uint256 existingShares, - uint256 addedShares - ) internal view returns (uint256) { - uint256 newStakerScalingFactor; - - if (existingShares == 0) { - // existing shares are 0, meaning no existing delegated shares. In this case, the new staker scaling factor - // is re-initialized to - newStakerScalingFactor = SlashingConstants.PRECISION_FACTOR / (totalMagnitude); - } else { - uint256 currStakerScalingFactor = _getStakerScalingFactor(staker, strategy); - - // TODO: DOUBLE CHECK THIS BEHAVIOR AND OVERFLOWS - // staker scaling factor is initialized to PRECISION_FACTOR(1e18) and totalMagnitude is initialized to INITIAL_TOTAL_MAGNITUDE(1e18) - // and is monotonically decreasing. You can deduce that the newStakerScalingFactor will never decrease to less than the PRECISION_FACTOR - // so this won't round to 0. - newStakerScalingFactor = ( - currStakerScalingFactor * existingShares * totalMagnitude / SlashingConstants.PRECISION_FACTOR - + addedShares * SlashingConstants.PRECISION_FACTOR - ) / ((existingShares + addedShares) * totalMagnitude); - } - - return newStakerScalingFactor; - } - - /** - * @notice helper to calculate the withdrawable shares for a staker given their shares and the - * current totalMagnitude. `shares` should be the staker's shares in storage in the StrategyManager/EigenPodManager. - */ - function _getWithdrawableShares( - address staker, - IStrategy strategy, - uint256 shares, - uint64 currTotalMagnitude - ) internal view returns (uint256) { - uint256 stakerScalingFactor = _getStakerScalingFactor(staker, strategy); - return stakerScalingFactor * shares * currTotalMagnitude / SlashingConstants.PRECISION_FACTOR; - } - /** * * VIEW FUNCTIONS @@ -1083,7 +977,7 @@ contract DelegationManager is /// @notice a legacy function that returns the total delegated shares for an operator and strategy function operatorShares(address operator, IStrategy strategy) public view returns (uint256) { uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategy); - return _descaleShares(operatorScaledShares[operator][strategy], totalMagnitude); + return SlashingLib.descaleShares(operatorScaledShares[operator][strategy], totalMagnitude); } /** @@ -1110,7 +1004,12 @@ contract DelegationManager is // in the StrategyManager/EigenPodManager because they could have been slashed if (operator != address(0)) { uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategies[i]); - shares[i] = _getWithdrawableShares(staker, strategies[i], shares[i], totalMagnitude); + shares[i] = SlashingLib.getWithdrawableShares({ + staker: staker, + stakerScalingFactor: _getStakerScalingFactor(staker, strategies[i]), + shares: shares[i], + currTotalMagnitude: totalMagnitude + }); } } return shares; diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index 2c99dbe3e..b3575f994 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -28,6 +28,9 @@ abstract contract DelegationManagerStorage is IDelegationManager { "DelegationApproval(address delegationApprover,address staker,address operator,bytes32 salt,uint256 expiry)" ); + /// @notice Minimum withdrawal delay in seconds until all queued withdrawals can be completed. + uint32 public immutable MIN_WITHDRAWAL_DELAY; + /** * @notice Original EIP-712 Domain separator for this contract. * @dev The domain separator may change in the event of a fork that modifies the ChainID. @@ -122,13 +125,15 @@ abstract contract DelegationManagerStorage is IDelegationManager { ISlasher _slasher, IEigenPodManager _eigenPodManager, IAVSDirectory _avsDirectory, - IAllocationManager _allocationManager + IAllocationManager _allocationManager, + uint32 _MIN_WITHDRAWAL_DELAY ) { strategyManager = _strategyManager; eigenPodManager = _eigenPodManager; slasher = _slasher; avsDirectory = _avsDirectory; allocationManager = _allocationManager; + MIN_WITHDRAWAL_DELAY = _MIN_WITHDRAWAL_DELAY; } /** diff --git a/src/contracts/libraries/SlashingConstants.sol b/src/contracts/libraries/SlashingConstants.sol deleted file mode 100644 index 2c61942e3..000000000 --- a/src/contracts/libraries/SlashingConstants.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "../interfaces/IAVSDirectory.sol"; - -library SlashingConstants { - /// @dev The initial total magnitude for an operator - uint64 public constant INITIAL_TOTAL_MAGNITUDE = 1e18; - - /// @notice that stakerScalingFactor and totalMagnitude have initial default values to 1e18 as "1" - /// to preserve precision with uint256 math. We use `PRECISION_FACTOR` where these variables are used - /// and divide to represent as 1 - uint256 public constant PRECISION_FACTOR = 1e18; - uint256 public constant PRECISION_FACTOR_SQUARED = 1e36; - - /// @dev Delay before deallocations are completable and can be added back into freeMagnitude - /// This is also the same delay for withdrawals to be completable - uint32 public constant DEALLOCATION_DELAY = 17.5 days; -} diff --git a/src/contracts/libraries/SlashingLib.sol b/src/contracts/libraries/SlashingLib.sol new file mode 100644 index 000000000..eb5782736 --- /dev/null +++ b/src/contracts/libraries/SlashingLib.sol @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +library SlashingLib { + /// @dev The initial total magnitude for an operator + uint64 public constant INITIAL_TOTAL_MAGNITUDE = 1e18; + + /// @notice that stakerScalingFactor and totalMagnitude have initial default values to 1e18 as "1" + /// to preserve precision with uint256 math. We use `PRECISION_FACTOR` where these variables are used + /// and divide to represent as 1 + uint256 public constant PRECISION_FACTOR = 1e18; + + /// @dev Delay before deallocations are completable and can be added back into freeMagnitude + /// This is also the same delay for withdrawals to be completable + uint32 public constant DEALLOCATION_DELAY = 17.5 days; + + /** + * @notice helper pure to calculate the scaledShares to store in queue withdrawal + * and the shares to decrement from StrategyManager/EigenPodManager + */ + function calculateSharesToQueueWithdraw( + uint256 sharesToWithdraw, + uint256 stakerScalingFactor, + uint64 totalMagnitude + ) internal pure returns (uint256 sharesToDecrement, uint256 scaledStakerShares) { + // TODO: DOUBLE CHECK THIS BEHAVIOR + // NOTE that to prevent numerator overflow, the max sharesToWithdraw is + // x*1e36 <= 2^256-1 + // => x <= 1.1579e41 + // however we know that the max shares in a strategy is 1e38-1 and all the ETH on the beaconchain staked + // in one eigenPod would be ~3e25. This product here is safe + sharesToDecrement = + (sharesToWithdraw * PRECISION_FACTOR / stakerScalingFactor) * PRECISION_FACTOR / totalMagnitude; + scaledStakerShares = sharesToWithdraw * PRECISION_FACTOR / totalMagnitude; + return (sharesToDecrement, scaledStakerShares); + } + + /** + * @notice helper pure to calculate the shares to complete a withdrawal after slashing + * We use the totalMagnitude of the delegated operator at the time of withdrawal completion to scale the shares + * back to real StrategyManager/EigenPodManager shares + */ + function calculateSharesToCompleteWithdraw( + uint256 scaledStakerShares, + uint64 totalMagnitudeAtCompletion + ) internal pure returns (uint256 shares) { + shares = scaledStakerShares * totalMagnitudeAtCompletion / PRECISION_FACTOR; + } + + /** + * @notice helper to calculate the withdrawable shares for a staker given their shares and the + * current totalMagnitude. `shares` should be the staker's shares in storage in the StrategyManager/EigenPodManager. + */ + function getWithdrawableShares( + address staker, + uint256 stakerScalingFactor, + uint256 shares, + uint64 currTotalMagnitude + ) internal pure returns (uint256) { + return (stakerScalingFactor * shares / PRECISION_FACTOR) * currTotalMagnitude / PRECISION_FACTOR; + } + + /** + * @notice helper pure to return scaledShares given shares and current totalMagnitude. Used for + * adding/removing staker shares from operatorScaledShares + */ + function scaleShares(uint256 shares, uint64 totalMagnitude) internal pure returns (uint256) { + return shares * PRECISION_FACTOR / totalMagnitude; + } + + /** + * @notice helper pure to return real strategy shares given operator scaledShares and current totalMagnitude. + * Used for returning the total delegated shares for an operator and strategy + */ + function descaleShares(uint256 scaledShares, uint64 totalMagnitude) internal pure returns (uint256) { + return scaledShares * totalMagnitude / PRECISION_FACTOR; + } + + /** + * @notice helper to calculate the new staker scaling factor after adding shares. This is only used + * when a staker is depositing through the StrategyManager or EigenPodManager. A stakers scaling factor + * is only updated when they have new deposits and their shares are being increased. + */ + function calculateStakerScalingFactor( + address staker, + uint256 currStakerScalingFactor, + uint64 totalMagnitude, + uint256 existingShares, + uint256 addedShares + ) internal pure returns (uint256) { + uint256 newStakerScalingFactor; + + if (existingShares == 0) { + // existing shares are 0, meaning no existing delegated shares. In this case, the new staker scaling factor + // is re-initialized to + newStakerScalingFactor = SlashingLib.PRECISION_FACTOR / (totalMagnitude); + } else { + // TODO: DOUBLE CHECK THIS BEHAVIOR AND OVERFLOWS + // staker scaling factor is initialized to PRECISION_FACTOR(1e18) and totalMagnitude is initialized to INITIAL_TOTAL_MAGNITUDE(1e18) + // and is monotonically decreasing. You can deduce that the newStakerScalingFactor will never decrease to less than the PRECISION_FACTOR + // so this won't round to 0. + newStakerScalingFactor = ( + currStakerScalingFactor * existingShares * totalMagnitude / PRECISION_FACTOR + + addedShares * PRECISION_FACTOR + ) / ((existingShares + addedShares) * totalMagnitude); + } + + return newStakerScalingFactor; + } +} diff --git a/src/test/integration/IntegrationDeployer.t.sol b/src/test/integration/IntegrationDeployer.t.sol index 6c5a7102f..8703908b5 100644 --- a/src/test/integration/IntegrationDeployer.t.sol +++ b/src/test/integration/IntegrationDeployer.t.sol @@ -256,7 +256,14 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); + delegationManagerImplementation = new DelegationManager( + strategyManager, + slasher, + eigenPodManager, + avsDirectory, + allocationManager, + MIN_WITHDRAWAL_DELAY + ); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( @@ -399,7 +406,14 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { ); // First, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); + delegationManagerImplementation = new DelegationManager( + strategyManager, + slasher, + eigenPodManager, + avsDirectory, + allocationManager, + MIN_WITHDRAWAL_DELAY + ); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( @@ -493,7 +507,14 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { ); // First, deploy the *implementation* contracts, using the *proxy contracts* as inputs - delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager); + delegationManagerImplementation = new DelegationManager( + strategyManager, + slasher, + eigenPodManager, + avsDirectory, + allocationManager, + MIN_WITHDRAWAL_DELAY + ); strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( diff --git a/src/test/unit/AVSDirectoryUnit.t.sol b/src/test/unit/AVSDirectoryUnit.t.sol index bc91566ac..5a3b79e62 100644 --- a/src/test/unit/AVSDirectoryUnit.t.sol +++ b/src/test/unit/AVSDirectoryUnit.t.sol @@ -43,6 +43,10 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { // reused in various tests. in storage to help handle stack-too-deep errors address defaultAVS = address(this); + // deallocation delay in AllocationManager + uint32 DEALLOCATION_DELAY = 17.5 days; + // withdrawal delay in DelegationManager + uint32 MIN_WITHDRAWAL_DELAY = 17.5 days; uint256 minWithdrawalDelayBlocks = 216_000; IStrategy[] public initializeStrategiesToSetDelayBlocks; uint256[] public initializeWithdrawalDelayBlocks; @@ -72,14 +76,15 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) ); - allocationManagerImplementation = new AllocationManager(delegationManager, avsDirectory); + allocationManagerImplementation = new AllocationManager(delegationManager, avsDirectory, DEALLOCATION_DELAY); delegationManagerImplementation = new DelegationManager( strategyManagerMock, slasherMock, eigenPodManagerMock, avsDirectory, - allocationManager + allocationManager, + MIN_WITHDRAWAL_DELAY ); avsDirectoryImplementation = new AVSDirectory(delegationManager); From 5e5895a0f6f967bf9c0fb688b6bc6972f116819f Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Fri, 13 Sep 2024 10:49:09 -0400 Subject: [PATCH 27/47] chore: fmt --- src/contracts/core/DelegationManager.sol | 27 +++++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 331c3b7da..2296cdfb2 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -73,7 +73,16 @@ contract DelegationManager is IAVSDirectory _avsDirectory, IAllocationManager _allocationManager, uint32 _MIN_WITHDRAWAL_DELAY - ) DelegationManagerStorage(_strategyManager, _slasher, _eigenPodManager, _avsDirectory, _allocationManager, _MIN_WITHDRAWAL_DELAY) { + ) + DelegationManagerStorage( + _strategyManager, + _slasher, + _eigenPodManager, + _avsDirectory, + _allocationManager, + _MIN_WITHDRAWAL_DELAY + ) + { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; } @@ -632,7 +641,8 @@ contract DelegationManager is // Take already scaled staker shares and scale again according to current operator totalMagnitude // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares // are still susceptible to slashing - sharesToWithdraw = SlashingLib.calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); + sharesToWithdraw = + SlashingLib.calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); } // Withdraws `shares` in `strategy` to `withdrawer`. If the shares are virtual beaconChainETH shares, @@ -814,12 +824,13 @@ contract DelegationManager is } uint256 stakerScalingFactor = _getStakerScalingFactor(staker, strategies[i]); require( - sharesToWithdraw[i] <= SlashingLib.getWithdrawableShares({ - staker: staker, - stakerScalingFactor: stakerScalingFactor, - shares: totalShares, - currTotalMagnitude: totalMagnitudes[i] - }), + sharesToWithdraw[i] + <= SlashingLib.getWithdrawableShares({ + staker: staker, + stakerScalingFactor: stakerScalingFactor, + shares: totalShares, + currTotalMagnitude: totalMagnitudes[i] + }), WithdrawalExeedsMax() ); From 1ec813a3976125e08992cdd66eafb5b1512227ff Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Fri, 13 Sep 2024 07:58:06 -0700 Subject: [PATCH 28/47] feat: add pending allocations methods (#744) * feat: add view functions for allocations * fix: local build pipeline --- .../deploy_from_scratch.anvil.config.json | 3 + script/deploy/local/Deploy_From_Scratch.s.sol | 31 +++++++- src/contracts/core/AllocationManager.sol | 70 +++++++++++++++++++ .../interfaces/IAllocationManager.sol | 32 +++++++++ 4 files changed, 134 insertions(+), 2 deletions(-) diff --git a/script/configs/local/deploy_from_scratch.anvil.config.json b/script/configs/local/deploy_from_scratch.anvil.config.json index 96df127e1..819815a98 100644 --- a/script/configs/local/deploy_from_scratch.anvil.config.json +++ b/script/configs/local/deploy_from_scratch.anvil.config.json @@ -51,5 +51,8 @@ "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP": 1720656000, "OPERATOR_SET_MAX_RETROACTIVE_LENGTH": 2592000 }, + "allocationManager": { + "init_paused_status": 0 + }, "ethPOSDepositAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa" } \ No newline at end of file diff --git a/script/deploy/local/Deploy_From_Scratch.s.sol b/script/deploy/local/Deploy_From_Scratch.s.sol index 07203c9a5..0710f14b7 100644 --- a/script/deploy/local/Deploy_From_Scratch.s.sol +++ b/script/deploy/local/Deploy_From_Scratch.s.sol @@ -32,7 +32,7 @@ import "forge-std/Test.sol"; // source .env // # To deploy and verify our contract -// forge script script/deploy/devnet/Deploy_From_Scratch.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast --sig "run(string memory configFile)" -- deploy_from_scratch.anvil.config.json +// forge script script/deploy/local/Deploy_From_Scratch.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast --sig "run(string memory configFile)" -- local/deploy_from_scratch.anvil.config.json contract DeployFromScratch is Script, Test { Vm cheats = Vm(HEVM_ADDRESS); @@ -107,6 +107,9 @@ contract DeployFromScratch is Script, Test { uint32 REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP; uint32 REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH; + // AllocationManager + uint256 ALLOCATION_MANAGER_INIT_PAUSED_STATUS; + // one week in blocks -- 50400 uint32 STRATEGY_MANAGER_INIT_WITHDRAWAL_DELAY_BLOCKS; uint256 DELEGATION_WITHDRAWAL_DELAY_BLOCKS; @@ -117,7 +120,7 @@ contract DeployFromScratch is Script, Test { emit log_named_uint("You are deploying on ChainID", chainId); // READ JSON CONFIG DATA - deployConfigPath = string(bytes(string.concat("script/configs/devnet/", configFileName))); + deployConfigPath = string(bytes(string.concat("script/configs/", configFileName))); string memory config_data = vm.readFile(deployConfigPath); // bytes memory parsedData = vm.parseJson(config_data); @@ -156,6 +159,10 @@ contract DeployFromScratch is Script, Test { stdJson.readUint(config_data, ".strategyManager.init_withdrawal_delay_blocks") ); + ALLOCATION_MANAGER_INIT_PAUSED_STATUS = uint32( + stdJson.readUint(config_data, ".allocationManager.init_paused_status") + ); + // tokens to deploy strategies for StrategyConfig[] memory strategyConfigs; @@ -320,6 +327,17 @@ contract DeployFromScratch is Script, Test { ) ); + eigenLayerProxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(allocationManager))), + address(allocationManagerImplementation), + abi.encodeWithSelector( + AllocationManager.initialize.selector, + executorMultisig, + eigenLayerPauserReg, + ALLOCATION_MANAGER_INIT_PAUSED_STATUS + ) + ); + // deploy StrategyBaseTVLLimits contract implementation baseStrategyImplementation = new StrategyBaseTVLLimits(strategyManager); // create upgradeable proxies that each point to the implementation and initialize them @@ -397,6 +415,8 @@ contract DeployFromScratch is Script, Test { vm.serializeAddress(deployed_addresses, "delegationManagerImplementation", address(delegationImplementation)); vm.serializeAddress(deployed_addresses, "avsDirectory", address(avsDirectory)); vm.serializeAddress(deployed_addresses, "avsDirectoryImplementation", address(avsDirectoryImplementation)); + vm.serializeAddress(deployed_addresses, "allocationManager", address(allocationManager)); + vm.serializeAddress(deployed_addresses, "allocationManagerImplementation", address(allocationManagerImplementation)); vm.serializeAddress(deployed_addresses, "strategyManager", address(strategyManager)); vm.serializeAddress( deployed_addresses, @@ -537,6 +557,13 @@ contract DeployFromScratch is Script, Test { "rewardsCoordinator: implementation set incorrectly" ); + require( + eigenLayerProxyAdmin.getProxyImplementation( + TransparentUpgradeableProxy(payable(address(allocationManager))) + ) == address(allocationManagerImplementation), + "allocationManager: implementation set incorrectly" + ); + for (uint256 i = 0; i < deployedStrategyArray.length; ++i) { require( eigenLayerProxyAdmin.getProxyImplementation( diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index 5a87753f1..a9544542a 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -627,6 +627,76 @@ contract AllocationManager is return totalMagnitude; } + /** + * @notice Returns the latest pending allocation of an operator for a given strategy and operatorSets. + * One of the assumptions here is we don't allow more than one pending allocation for an operatorSet at a time. + * If that changes, we would need to change this function to return all pending allocations for an operatorSet. + * @param operator the operator to get the pending allocations for + * @param strategy the strategy to get the pending allocations for + * @param operatorSets the operatorSets to get the pending allocations for + * @return pendingMagnitude the pending allocations for each operatorSet + * @return timestamps the timestamps for each pending allocation + */ + function getPendingAllocations( + address operator, + IStrategy strategy, + OperatorSet[] calldata operatorSets + ) external view returns (uint64[] memory, uint32[] memory) { + uint64[] memory pendingMagnitude = new uint64[](operatorSets.length); + uint32[] memory timestamps = new uint32[](operatorSets.length); + for (uint256 i = 0; i < operatorSets.length; ++i) { + // We use latestSnapshot to get the latest pending allocation for an operatorSet. + (bool exists, uint32 key, uint224 value) = + _magnitudeUpdate[operator][strategy][_encodeOperatorSet(operatorSets[i])].latestSnapshot(); + if (exists) { + if (key > block.timestamp) { + pendingMagnitude[i] = uint64(value); + timestamps[i] = key; + } else { + pendingMagnitude[i] = 0; + timestamps[i] = 0; + } + } + } + return (pendingMagnitude, timestamps); + } + + /** + * @notice Returns the pending deallocations of an operator for a given strategy and operatorSets. + * One of the assumptions here is we don't allow more than one pending deallocation for an operatorSet at a time. + * If that changes, we would need to change this function to return all pending deallocations for an operatorSet. + * @param operator the operator to get the pending deallocations for + * @param strategy the strategy to get the pending deallocations for + * @param operatorSets the operatorSets to get the pending deallocations for + * @return pendingMagnitudeDiff the pending difference in deallocations for each operatorSet + * @return timestamps the timestamps for each pending deallocation + */ + function getPendingDeallocations( + address operator, + IStrategy strategy, + OperatorSet[] calldata operatorSets + ) external view returns (uint64[] memory, uint32[] memory) { + uint64[] memory pendingMagnitudeDiff = new uint64[](operatorSets.length); + uint32[] memory timestamps = new uint32[](operatorSets.length); + for (uint256 i = 0; i < operatorSets.length; ++i) { + uint256[] memory indices = + _queuedDeallocationIndices[operator][strategy][_encodeOperatorSet(operatorSets[i])]; + uint256 length = indices.length; + uint256 deallocationIndex = indices[length - 1]; + PendingFreeMagnitude memory latestPendingMagnitude = + _pendingFreeMagnitude[operator][strategy][deallocationIndex]; + if (latestPendingMagnitude.completableTimestamp > block.timestamp) { + pendingMagnitudeDiff[i] = latestPendingMagnitude.magnitudeDiff; + timestamps[i] = latestPendingMagnitude.completableTimestamp; + } else { + // There is no pending deallocation, so we set the pending magnitude and timestamp to 0 + pendingMagnitudeDiff[i] = 0; + timestamps[i] = 0; + } + } + return (pendingMagnitudeDiff, timestamps); + } + // /** // * @notice fetches the minimum slashable shares for a certain operator and operatorSet for a list of strategies // * from the current timestamp until the given timestamp diff --git a/src/contracts/interfaces/IAllocationManager.sol b/src/contracts/interfaces/IAllocationManager.sol index 836781efa..07df2dcad 100644 --- a/src/contracts/interfaces/IAllocationManager.sol +++ b/src/contracts/interfaces/IAllocationManager.sol @@ -176,6 +176,38 @@ interface IAllocationManager is ISignatureUtils { uint16 numToComplete ) external view returns (uint64); + /** + * @notice Returns the pending allocations of an operator for a given strategy and operatorSets + * One of the assumptions here is we don't allow more than one pending allocation for an operatorSet at a time. + * If that changes, we would need to change this function to return all pending allocations for an operatorSet. + * @param operator the operator to get the pending allocations for + * @param strategy the strategy to get the pending allocations for + * @param operatorSets the operatorSets to get the pending allocations for + * @return pendingMagnitude the pending allocations for each operatorSet + * @return timestamps the timestamps for each pending allocation + */ + function getPendingAllocations( + address operator, + IStrategy strategy, + OperatorSet[] calldata operatorSets + ) external view returns (uint64[] memory, uint32[] memory); + + /** + * @notice Returns the pending deallocations of an operator for a given strategy and operatorSets. + * One of the assumptions here is we don't allow more than one pending deallocation for an operatorSet at a time. + * If that changes, we would need to change this function to return all pending deallocations for an operatorSet. + * @param operator the operator to get the pending deallocations for + * @param strategy the strategy to get the pending deallocations for + * @param operatorSets the operatorSets to get the pending deallocations for + * @return pendingMagnitudeDiff the pending difference in deallocations for each operatorSet + * @return timestamps the timestamps for each pending deallocation + */ + function getPendingDeallocations( + address operator, + IStrategy strategy, + OperatorSet[] calldata operatorSets + ) external view returns (uint64[] memory, uint32[] memory); + /** * @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days * @param operator the operator to check slashability for From 8950c4ccc64fe62c636f139fa04dcbdbcc0397c3 Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Fri, 13 Sep 2024 11:01:07 -0400 Subject: [PATCH 29/47] chore: rm avsd from strategymanager --- script/deploy/holesky/M2_Deploy_From_Scratch.s.sol | 2 +- script/deploy/local/Deploy_From_Scratch.s.sol | 2 +- src/contracts/core/StrategyManager.sol | 5 ++--- src/contracts/core/StrategyManagerStorage.sol | 6 +----- src/test/integration/IntegrationDeployer.t.sol | 6 +++--- src/test/unit/StrategyManagerUnit.t.sol | 2 +- 6 files changed, 9 insertions(+), 14 deletions(-) diff --git a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol index 26b7e0f3f..5fddcd608 100644 --- a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol +++ b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol @@ -81,7 +81,7 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); avsDirectoryImplementation = new AVSDirectory(delegationManager); delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager, MIN_WITHDRAWAL_DELAY); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( IETHPOSDeposit(ETHPOSDepositAddress), diff --git a/script/deploy/local/Deploy_From_Scratch.s.sol b/script/deploy/local/Deploy_From_Scratch.s.sol index 0710f14b7..4a95126db 100644 --- a/script/deploy/local/Deploy_From_Scratch.s.sol +++ b/script/deploy/local/Deploy_From_Scratch.s.sol @@ -235,7 +235,7 @@ contract DeployFromScratch is Script, Test { // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager, MIN_WITHDRAWAL_DELAY); - strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher, avsDirectory); + strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher); avsDirectoryImplementation = new AVSDirectory(delegation); slasherImplementation = new Slasher(strategyManager, delegation); eigenPodManagerImplementation = new EigenPodManager( diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index 443ce4f42..74517e3a8 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -59,9 +59,8 @@ contract StrategyManager is constructor( IDelegationManager _delegation, IEigenPodManager _eigenPodManager, - ISlasher _slasher, - IAVSDirectory _avsDirectory - ) StrategyManagerStorage(_delegation, _eigenPodManager, _slasher, _avsDirectory) { + ISlasher _slasher + ) StrategyManagerStorage(_delegation, _eigenPodManager, _slasher) { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; } diff --git a/src/contracts/core/StrategyManagerStorage.sol b/src/contracts/core/StrategyManagerStorage.sol index 1425f07a6..cdc51786c 100644 --- a/src/contracts/core/StrategyManagerStorage.sol +++ b/src/contracts/core/StrategyManagerStorage.sol @@ -6,7 +6,6 @@ import "../interfaces/IStrategy.sol"; import "../interfaces/IEigenPodManager.sol"; import "../interfaces/IDelegationManager.sol"; import "../interfaces/ISlasher.sol"; -import "../interfaces/IAVSDirectory.sol"; /** * @title Storage variables for the `StrategyManager` contract. @@ -28,7 +27,6 @@ abstract contract StrategyManagerStorage is IStrategyManager { IDelegationManager public immutable delegation; IEigenPodManager public immutable eigenPodManager; ISlasher public immutable slasher; - IAVSDirectory public immutable avsDirectory; /** * @notice Original EIP-712 Domain separator for this contract. @@ -77,13 +75,11 @@ abstract contract StrategyManagerStorage is IStrategyManager { constructor( IDelegationManager _delegation, IEigenPodManager _eigenPodManager, - ISlasher _slasher, - IAVSDirectory _avsDirectory + ISlasher _slasher ) { delegation = _delegation; eigenPodManager = _eigenPodManager; slasher = _slasher; - avsDirectory = _avsDirectory; } /** diff --git a/src/test/integration/IntegrationDeployer.t.sol b/src/test/integration/IntegrationDeployer.t.sol index 8703908b5..b9bcfe9c8 100644 --- a/src/test/integration/IntegrationDeployer.t.sol +++ b/src/test/integration/IntegrationDeployer.t.sol @@ -264,7 +264,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { allocationManager, MIN_WITHDRAWAL_DELAY ); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( ethPOSDeposit, @@ -414,7 +414,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { allocationManager, MIN_WITHDRAWAL_DELAY ); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( ethPOSDeposit, @@ -515,7 +515,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { allocationManager, MIN_WITHDRAWAL_DELAY ); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( ethPOSDeposit, diff --git a/src/test/unit/StrategyManagerUnit.t.sol b/src/test/unit/StrategyManagerUnit.t.sol index a89a6012a..3fe5b793b 100644 --- a/src/test/unit/StrategyManagerUnit.t.sol +++ b/src/test/unit/StrategyManagerUnit.t.sol @@ -37,7 +37,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv function setUp() public override { EigenLayerUnitTestSetup.setUp(); - strategyManagerImplementation = new StrategyManager(delegationManagerMock, eigenPodManagerMock, slasherMock, avsDirectoryMock); + strategyManagerImplementation = new StrategyManager(delegationManagerMock, eigenPodManagerMock, slasherMock); strategyManager = StrategyManager( address( new TransparentUpgradeableProxy( From d94cd80ea8a264f00e929a813fc81c593ee2e51d Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Fri, 13 Sep 2024 11:21:49 -0400 Subject: [PATCH 30/47] fix: rearrange scaling factor eqtn --- src/contracts/core/StrategyManagerStorage.sol | 6 +----- src/contracts/libraries/SlashingLib.sol | 8 ++++---- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/contracts/core/StrategyManagerStorage.sol b/src/contracts/core/StrategyManagerStorage.sol index cdc51786c..485d23d0e 100644 --- a/src/contracts/core/StrategyManagerStorage.sol +++ b/src/contracts/core/StrategyManagerStorage.sol @@ -72,11 +72,7 @@ abstract contract StrategyManagerStorage is IStrategyManager { */ mapping(IStrategy => bool) private __deprecated_thirdPartyTransfersForbidden; - constructor( - IDelegationManager _delegation, - IEigenPodManager _eigenPodManager, - ISlasher _slasher - ) { + constructor(IDelegationManager _delegation, IEigenPodManager _eigenPodManager, ISlasher _slasher) { delegation = _delegation; eigenPodManager = _eigenPodManager; slasher = _slasher; diff --git a/src/contracts/libraries/SlashingLib.sol b/src/contracts/libraries/SlashingLib.sol index eb5782736..96196558a 100644 --- a/src/contracts/libraries/SlashingLib.sol +++ b/src/contracts/libraries/SlashingLib.sol @@ -93,16 +93,16 @@ library SlashingLib { if (existingShares == 0) { // existing shares are 0, meaning no existing delegated shares. In this case, the new staker scaling factor // is re-initialized to - newStakerScalingFactor = SlashingLib.PRECISION_FACTOR / (totalMagnitude); + newStakerScalingFactor = PRECISION_FACTOR / (totalMagnitude); } else { // TODO: DOUBLE CHECK THIS BEHAVIOR AND OVERFLOWS // staker scaling factor is initialized to PRECISION_FACTOR(1e18) and totalMagnitude is initialized to INITIAL_TOTAL_MAGNITUDE(1e18) // and is monotonically decreasing. You can deduce that the newStakerScalingFactor will never decrease to less than the PRECISION_FACTOR // so this won't round to 0. newStakerScalingFactor = ( - currStakerScalingFactor * existingShares * totalMagnitude / PRECISION_FACTOR - + addedShares * PRECISION_FACTOR - ) / ((existingShares + addedShares) * totalMagnitude); + existingShares * currStakerScalingFactor / PRECISION_FACTOR * totalMagnitude / PRECISION_FACTOR + + addedShares + ) / ((existingShares + addedShares) * totalMagnitude / PRECISION_FACTOR); } return newStakerScalingFactor; From 4543960d6b1c1551f1e3bf98eb52829bc1bcfdc7 Mon Sep 17 00:00:00 2001 From: Michael Sun Date: Fri, 13 Sep 2024 11:40:20 -0400 Subject: [PATCH 31/47] fix: reinit staker scaling factor on undelegate --- src/contracts/core/DelegationManager.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 2296cdfb2..93319be36 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -291,6 +291,10 @@ contract DelegationManager is sharesToWithdraw: singleShare, totalMagnitudes: singleTotalMagnitude }); + + // all shares and queued withdrawn and no delegated operator + // reset staker's scaling factor to default + stakerScalingFactors[staker][strategies[i]] = SlashingLib.PRECISION_FACTOR; } } From 73fae80b714acf0c4848acc71adac786fa9b17dc Mon Sep 17 00:00:00 2001 From: Michael Sun <35479365+8sunyuan@users.noreply.github.com> Date: Fri, 13 Sep 2024 17:32:08 -0400 Subject: [PATCH 32/47] refactor: receive as shares callback (#746) * refactor: add shares * chore: comment out block to be refactored * combine complete withdrawal funcs --------- Co-authored-by: gpsanant --- src/contracts/core/DelegationManager.sol | 151 ++++-------------- src/contracts/core/StrategyManager.sol | 33 ++-- src/contracts/interfaces/IStrategyManager.sol | 7 +- src/test/mocks/StrategyManagerMock.sol | 2 +- 4 files changed, 47 insertions(+), 146 deletions(-) diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 93319be36..4a7fea7c1 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -610,33 +610,7 @@ contract DelegationManager is timestamp: withdrawal.startTimestamp + MIN_WITHDRAWAL_DELAY }); - if (receiveAsTokens) { - // complete the withdrawal by converting shares to tokens - _completeReceiveAsTokens(withdrawal, tokens, totalMagnitudes, isLegacyWithdrawal); - } else { - // Award shares back in StrategyManager/EigenPodManager. - _completeReceiveAsShares(withdrawal, tokens, totalMagnitudes, isLegacyWithdrawal); - } - - // Remove `withdrawalRoot` from pending roots - delete pendingWithdrawals[withdrawalRoot]; - emit WithdrawalCompleted(withdrawalRoot); - } - - /** - * @dev This function completes a queued withdrawal for a staker by converting shares to tokens and transferring to the withdrawer. - * This will apply any slashing that has occurred since the scaledShares were initially set in the Withdrawal struct - * by reading the original delegated operator's totalMagnitude at the time of withdrawal completion. - */ - function _completeReceiveAsTokens( - Withdrawal calldata withdrawal, - IERC20[] calldata tokens, - uint64[] memory totalMagnitudes, - bool isLegacyWithdrawal - ) internal { - // Finalize action by converting scaled shares to tokens for each strategy, or - // by re-awarding shares in each strategy. - for (uint256 i = 0; i < withdrawal.strategies.length; ++i) { + for (uint256 i = 0; i < withdrawal.strategies.length; i++) { uint256 sharesToWithdraw; if (isLegacyWithdrawal) { // This is a legacy M2 withdrawal. There is no slashing applied to the withdrawn shares. @@ -649,104 +623,43 @@ contract DelegationManager is SlashingLib.calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); } - // Withdraws `shares` in `strategy` to `withdrawer`. If the shares are virtual beaconChainETH shares, - // then a call is ultimately forwarded to the `staker`s EigenPod; otherwise a call is ultimately forwarded - // to the `strategy` with info on the `token`. - if (withdrawal.strategies[i] == beaconChainETHStrategy) { - eigenPodManager.withdrawSharesAsTokens({ - podOwner: withdrawal.staker, - destination: msg.sender, - shares: sharesToWithdraw - }); - } else { - strategyManager.withdrawSharesAsTokens({ - recipient: msg.sender, - strategy: withdrawal.strategies[i], - shares: sharesToWithdraw, - token: tokens[i] - }); - } - } - } - - /** - * @dev This function completes a queued withdrawal for a staker by receiving them back as shares - * in the StrategyManager/EigenPodManager. If the withdrawer is delegated to an operator, this will also - * increase the operator's scaled shares. - * This will apply any slashing that has occurred since the scaledShares were initially set in the Withdrawal struct - * by reading the original delegated operator's totalMagnitude at the time of withdrawal completion. - */ - function _completeReceiveAsShares( - Withdrawal calldata withdrawal, - IERC20[] calldata tokens, - uint64[] memory totalMagnitudes, - bool isLegacyWithdrawal - ) internal { - // read delegated operator for scaling and adding shares back if needed - address currentOperator = delegatedTo[msg.sender]; - - for (uint256 i = 0; i < withdrawal.strategies.length; ++i) { - // store existing shares to calculate new staker scaling factor later - uint256 existingShares; - uint256 shares; - if (isLegacyWithdrawal) { - // This is a legacy M2 withdrawal. There is no slashing applied to withdrawn shares - shares = withdrawal.scaledShares[i]; - } else { - // Take already scaled staker shares and scale again according to current operator totalMagnitude - // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares - // are still susceptible to slashing - shares = SlashingLib.calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); - } - - /** - * When awarding podOwnerShares in EigenPodManager, we need to be sure to only give them back to the original podOwner. - * Other strategy shares can + will be awarded to the withdrawer. - */ - if (withdrawal.strategies[i] == beaconChainETHStrategy) { - address staker = withdrawal.staker; - /** - * Update shares amount depending upon the returned value. - * The return value will be lower than the input value in the case where the staker has an existing share deficit - */ - (shares, existingShares) = eigenPodManager.addShares({podOwner: staker, shares: shares}); - address podOwnerOperator = delegatedTo[staker]; - // Similar to `isDelegated` logic - if (podOwnerOperator != address(0)) { - _increaseOperatorScaledShares({ - operator: podOwnerOperator, - // the 'staker' here is the address receiving new shares - staker: staker, + if (receiveAsTokens) { + // withdraws the underlying token of the strategy to the staker + + // Withdraws `shares` in `strategy` to `withdrawer`. If the shares are virtual beaconChainETH shares, + // then a call is ultimately forwarded to the `staker`s EigenPod; otherwise a call is ultimately forwarded + // to the `strategy` with info on the `token`. + if (withdrawal.strategies[i] == beaconChainETHStrategy) { + eigenPodManager.withdrawSharesAsTokens({ + podOwner: withdrawal.staker, + destination: msg.sender, + shares: sharesToWithdraw + }); + } else { + strategyManager.withdrawSharesAsTokens({ + recipient: msg.sender, strategy: withdrawal.strategies[i], - shares: shares, - totalMagnitude: totalMagnitudes[i] + shares: sharesToWithdraw, + token: tokens[i] }); } } else { - existingShares = strategyManager.addShares(msg.sender, tokens[i], withdrawal.strategies[i], shares); - // Similar to `isDelegated` logic - if (currentOperator != address(0)) { - _increaseOperatorScaledShares({ - operator: currentOperator, - // the 'staker' here is the address receiving new shares - staker: msg.sender, - strategy: withdrawal.strategies[i], - shares: shares, - totalMagnitude: totalMagnitudes[i] - }); + // adds the withdrawable shares back to the stakers account + + // Award shares back in StrategyManager/EigenPodManager. + if (withdrawal.strategies[i] == beaconChainETHStrategy) { + // Award shares back in EigenPodManager. + // big fukn TODO: refactor EPM to increaseDelegatedShares if applicable. this is completely broken as is + eigenPodManager.addShares({podOwner: withdrawal.staker, shares: sharesToWithdraw}); + } else { + strategyManager.addShares(msg.sender, tokens[i], withdrawal.strategies[i], sharesToWithdraw); } - } - - // update stakers scaling deposit scaling factor - uint256 newStakerScalingFactor = SlashingLib.calculateStakerScalingFactor({ - staker: withdrawal.staker, - currStakerScalingFactor: _getStakerScalingFactor(withdrawal.staker, withdrawal.strategies[i]), - totalMagnitude: totalMagnitudes[i], - existingShares: existingShares, - addedShares: shares - }); - stakerScalingFactors[withdrawal.staker][withdrawal.strategies[i]] = newStakerScalingFactor; + } } + + // Remove `withdrawalRoot` from pending roots + delete pendingWithdrawals[withdrawalRoot]; + emit WithdrawalCompleted(withdrawalRoot); } /** diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index 74517e3a8..b28d50ef6 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -168,9 +168,8 @@ contract StrategyManager is IERC20 token, IStrategy strategy, uint256 shares - ) external onlyDelegationManager returns (uint256 existingShares) { - uint256 existingShares = _addShares(staker, token, strategy, shares); - return existingShares; + ) external onlyDelegationManager { + _addShares(staker, token, strategy, shares); } /// @notice Used by the DelegationManager to convert withdrawn shares to tokens and send them to a recipient @@ -241,12 +240,7 @@ contract StrategyManager is * delegated shares are tracked, increases the stored share amount in `stakerStrategyShares[staker][strategy]`, and adds `strategy` * to the `staker`'s list of strategies, if it is not in the list already. */ - function _addShares( - address staker, - IERC20 token, - IStrategy strategy, - uint256 shares - ) internal returns (uint256 existingShares) { + function _addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) internal { // sanity checks on inputs require(staker != address(0), StakerAddressZero()); require(shares != 0, SharesAmountZero()); @@ -258,11 +252,18 @@ contract StrategyManager is } // add the returned shares to their existing shares for this strategy - existingShares = stakerStrategyShares[staker][strategy]; + uint256 existingShares = stakerStrategyShares[staker][strategy]; stakerStrategyShares[staker][strategy] += shares; + // Increase shares delegated to operator, if needed + delegation.increaseDelegatedShares({ + staker: staker, + strategy: strategy, + existingShares: existingShares, + addedShares: shares + }); + emit Deposit(staker, token, strategy, shares); - return existingShares; } /** @@ -287,15 +288,7 @@ contract StrategyManager is uint256 shares = strategy.deposit(token, amount); // add the returned shares to the staker's existing shares for this strategy - uint256 existingShares = _addShares(staker, token, strategy, shares); - - // Increase shares delegated to operator, if needed - delegation.increaseDelegatedShares({ - staker: staker, - strategy: strategy, - existingShares: existingShares, - addedShares: shares - }); + _addShares(staker, token, strategy, shares); return shares; } diff --git a/src/contracts/interfaces/IStrategyManager.sol b/src/contracts/interfaces/IStrategyManager.sol index c2037337e..5e95e835f 100644 --- a/src/contracts/interfaces/IStrategyManager.sol +++ b/src/contracts/interfaces/IStrategyManager.sol @@ -99,12 +99,7 @@ interface IStrategyManager { function removeShares(address staker, IStrategy strategy, uint256 shares) external; /// @notice Used by the DelegationManager to award a Staker some shares that have passed through the withdrawal queue - function addShares( - address staker, - IERC20 token, - IStrategy strategy, - uint256 shares - ) external returns (uint256 existingShares); + function addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external; /// @notice Used by the DelegationManager to convert withdrawn descaled shares to tokens and send them to a recipient function withdrawSharesAsTokens(address recipient, IStrategy strategy, uint256 shares, IERC20 token) external; diff --git a/src/test/mocks/StrategyManagerMock.sol b/src/test/mocks/StrategyManagerMock.sol index 2aec094df..656725d41 100644 --- a/src/test/mocks/StrategyManagerMock.sol +++ b/src/test/mocks/StrategyManagerMock.sol @@ -110,7 +110,7 @@ contract StrategyManagerMock is function removeShares(address staker, IStrategy strategy, uint256 shares) external {} - function addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external returns (uint256 existingShares) {} + function addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external {} function withdrawSharesAsTokens(address recipient, IStrategy strategy, uint256 shares, IERC20 token) external {} From fe6a5aab162283a4c07a02177dbd3c6729d18979 Mon Sep 17 00:00:00 2001 From: Gautham Anant <32277907+gpsanant@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:44:16 -0700 Subject: [PATCH 33/47] add allocation delay (#748) * rebase * make ALLOCATION_DELAY_CONFIGURATION_DELAY immutable * fmt --- .../DelegationManagerStorage/binding.go | 526 +++++++++++++----- .../EigenPodManagerStorage/binding.go | 6 +- pkg/bindings/IDelegationManager/binding.go | 377 +++++++++---- pkg/bindings/IEigenPodManager/binding.go | 6 +- pkg/bindings/IStrategyManager/binding.go | 6 +- pkg/bindings/StrategyManager/binding.go | 41 +- .../StrategyManagerStorage/binding.go | 37 +- .../deploy_from_scratch.anvil.config.json | 55 ++ .../deploy_from_scratch.holesky.config.json | 55 ++ script/deploy/devnet/Upgrade.s.sol | 24 + .../holesky/M2_Deploy_From_Scratch.s.sol | 4 +- script/deploy/local/Deploy_From_Scratch.s.sol | 12 +- .../mainnet/Deploy_Strategy_Factory.s.sol | 61 ++ script/utils/ExistingDeploymentParser.sol | 1 + src/contracts/core/AllocationManager.sol | 59 +- .../core/AllocationManagerStorage.sol | 25 +- src/contracts/core/DelegationManager.sol | 40 +- .../core/DelegationManagerStorage.sol | 6 +- src/contracts/core/StrategyManager.sol | 7 +- src/contracts/core/StrategyManagerStorage.sol | 10 +- .../interfaces/IAllocationManager.sol | 33 ++ .../interfaces/IDelegationManager.sol | 29 - src/contracts/interfaces/IStrategyFactory.sol | 2 +- src/contracts/libraries/SlashingConstants.sol | 19 + .../integration/IntegrationDeployer.t.sol | 6 +- src/test/integration/users/User.t.sol | 2 +- src/test/mocks/DelegationManagerMock.sol | 3 - src/test/unit/AVSDirectoryUnit.t.sol | 5 +- src/test/unit/StrategyManagerUnit.t.sol | 2 +- 29 files changed, 1097 insertions(+), 362 deletions(-) create mode 100644 script/configs/devnet/deploy_from_scratch.anvil.config.json create mode 100644 script/configs/devnet/deploy_from_scratch.holesky.config.json create mode 100644 script/deploy/devnet/Upgrade.s.sol create mode 100644 script/deploy/mainnet/Deploy_Strategy_Factory.s.sol create mode 100644 src/contracts/libraries/SlashingConstants.sol diff --git a/pkg/bindings/DelegationManagerStorage/binding.go b/pkg/bindings/DelegationManagerStorage/binding.go index 4b84442e1..c6e4bb0dd 100644 --- a/pkg/bindings/DelegationManagerStorage/binding.go +++ b/pkg/bindings/DelegationManagerStorage/binding.go @@ -29,6 +29,12 @@ var ( _ = abi.ConvertType ) +// IDelegationManagerAllocationDelayDetails is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerAllocationDelayDetails struct { + IsSet bool + AllocationDelay uint32 +} + // IDelegationManagerOperatorDetails is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerOperatorDetails struct { DeprecatedEarningsReceiver common.Address @@ -45,13 +51,13 @@ type IDelegationManagerQueuedWithdrawalParams struct { // IDelegationManagerWithdrawal is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerWithdrawal struct { - Staker common.Address - DelegatedTo common.Address - Withdrawer common.Address - Nonce *big.Int - StartBlock uint32 - Strategies []common.Address - Shares []*big.Int + Staker common.Address + DelegatedTo common.Address + Withdrawer common.Address + Nonce *big.Int + StartTimestamp uint32 + Strategies []common.Address + ScaledShares []*big.Int } // ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. @@ -273,66 +279,66 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) DOMAINTY return _DelegationManagerStorage.Contract.DOMAINTYPEHASH(&_DelegationManagerStorage.CallOpts) } -// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. // -// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) MAXWITHDRAWALDELAYBLOCKS(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) STAKERDELEGATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "MAX_WITHDRAWAL_DELAY_BLOCKS") + err := _DelegationManagerStorage.contract.Call(opts, &out, "STAKER_DELEGATION_TYPEHASH") if err != nil { - return *new(*big.Int), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. // -// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { - return _DelegationManagerStorage.Contract.MAXWITHDRAWALDELAYBLOCKS(&_DelegationManagerStorage.CallOpts) +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _DelegationManagerStorage.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManagerStorage.CallOpts) } -// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. // -// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { - return _DelegationManagerStorage.Contract.MAXWITHDRAWALDELAYBLOCKS(&_DelegationManagerStorage.CallOpts) +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _DelegationManagerStorage.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManagerStorage.CallOpts) } -// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. // -// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) STAKERDELEGATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function avsDirectory() view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "STAKER_DELEGATION_TYPEHASH") + err := _DelegationManagerStorage.contract.Call(opts, &out, "avsDirectory") if err != nil { - return *new([32]byte), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. // -// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) -func (_DelegationManagerStorage *DelegationManagerStorageSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { - return _DelegationManagerStorage.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManagerStorage.CallOpts) +// Solidity: function avsDirectory() view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageSession) AvsDirectory() (common.Address, error) { + return _DelegationManagerStorage.Contract.AvsDirectory(&_DelegationManagerStorage.CallOpts) } -// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. // -// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { - return _DelegationManagerStorage.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManagerStorage.CallOpts) +// Solidity: function avsDirectory() view returns(address) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) AvsDirectory() (common.Address, error) { + return _DelegationManagerStorage.Contract.AvsDirectory(&_DelegationManagerStorage.CallOpts) } // BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. @@ -676,37 +682,6 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) EigenPod return _DelegationManagerStorage.Contract.EigenPodManager(&_DelegationManagerStorage.CallOpts) } -// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. -// -// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) GetOperatorShares(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]*big.Int, error) { - var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "getOperatorShares", operator, strategies) - - if err != nil { - return *new([]*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) - - return out0, err - -} - -// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. -// -// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) -func (_DelegationManagerStorage *DelegationManagerStorageSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { - return _DelegationManagerStorage.Contract.GetOperatorShares(&_DelegationManagerStorage.CallOpts, operator, strategies) -} - -// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. -// -// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { - return _DelegationManagerStorage.Contract.GetOperatorShares(&_DelegationManagerStorage.CallOpts, operator, strategies) -} - // GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. // // Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) @@ -800,6 +775,37 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) IsOperat return _DelegationManagerStorage.Contract.IsOperator(&_DelegationManagerStorage.CallOpts, operator) } +// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. +// +// Solidity: function minWithdrawalDelay() view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) MinWithdrawalDelay(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "minWithdrawalDelay") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. +// +// Solidity: function minWithdrawalDelay() view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) MinWithdrawalDelay() (*big.Int, error) { + return _DelegationManagerStorage.Contract.MinWithdrawalDelay(&_DelegationManagerStorage.CallOpts) +} + +// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. +// +// Solidity: function minWithdrawalDelay() view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) MinWithdrawalDelay() (*big.Int, error) { + return _DelegationManagerStorage.Contract.MinWithdrawalDelay(&_DelegationManagerStorage.CallOpts) +} + // MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. // // Solidity: function minWithdrawalDelayBlocks() view returns(uint256) @@ -831,6 +837,37 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) MinWithd return _DelegationManagerStorage.Contract.MinWithdrawalDelayBlocks(&_DelegationManagerStorage.CallOpts) } +// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. +// +// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) OperatorAllocationDelay(opts *bind.CallOpts, operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "operatorAllocationDelay", operator) + + if err != nil { + return *new(IDelegationManagerAllocationDelayDetails), err + } + + out0 := *abi.ConvertType(out[0], new(IDelegationManagerAllocationDelayDetails)).(*IDelegationManagerAllocationDelayDetails) + + return out0, err + +} + +// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. +// +// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) +func (_DelegationManagerStorage *DelegationManagerStorageSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { + return _DelegationManagerStorage.Contract.OperatorAllocationDelay(&_DelegationManagerStorage.CallOpts, operator) +} + +// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. +// +// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { + return _DelegationManagerStorage.Contract.OperatorAllocationDelay(&_DelegationManagerStorage.CallOpts, operator) +} + // OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. // // Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) @@ -862,12 +899,12 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) Operator return _DelegationManagerStorage.Contract.OperatorDetails(&_DelegationManagerStorage.CallOpts, operator) } -// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. // -// Solidity: function operatorShares(address , address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) OperatorShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { +// Solidity: function operatorScaledShares(address , address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) OperatorScaledShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "operatorShares", arg0, arg1) + err := _DelegationManagerStorage.contract.Call(opts, &out, "operatorScaledShares", arg0, arg1) if err != nil { return *new(*big.Int), err @@ -879,18 +916,18 @@ func (_DelegationManagerStorage *DelegationManagerStorageCaller) OperatorShares( } -// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. // -// Solidity: function operatorShares(address , address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageSession) OperatorShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManagerStorage.Contract.OperatorShares(&_DelegationManagerStorage.CallOpts, arg0, arg1) +// Solidity: function operatorScaledShares(address , address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) OperatorScaledShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.OperatorScaledShares(&_DelegationManagerStorage.CallOpts, arg0, arg1) } -// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. // -// Solidity: function operatorShares(address , address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) OperatorShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManagerStorage.Contract.OperatorShares(&_DelegationManagerStorage.CallOpts, arg0, arg1) +// Solidity: function operatorScaledShares(address , address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) OperatorScaledShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.OperatorScaledShares(&_DelegationManagerStorage.CallOpts, arg0, arg1) } // PendingWithdrawals is a free data retrieval call binding the contract method 0xb7f06ebe. @@ -1017,6 +1054,37 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) StakerOp return _DelegationManagerStorage.Contract.StakerOptOutWindowBlocks(&_DelegationManagerStorage.CallOpts, operator) } +// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. +// +// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) StakerScalingFactors(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "stakerScalingFactors", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. +// +// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) StakerScalingFactors(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.StakerScalingFactors(&_DelegationManagerStorage.CallOpts, arg0, arg1) +} + +// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. +// +// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) StakerScalingFactors(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.StakerScalingFactors(&_DelegationManagerStorage.CallOpts, arg0, arg1) +} + // StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. // // Solidity: function strategyManager() view returns(address) @@ -1079,67 +1147,98 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) Strategy return _DelegationManagerStorage.Contract.StrategyWithdrawalDelayBlocks(&_DelegationManagerStorage.CallOpts, arg0) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. +// +// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) StrategyWithdrawalDelays(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "strategyWithdrawalDelays", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. +// +// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) StrategyWithdrawalDelays(arg0 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.StrategyWithdrawalDelays(&_DelegationManagerStorage.CallOpts, arg0) +} + +// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManagerStorage.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) StrategyWithdrawalDelays(arg0 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.StrategyWithdrawalDelays(&_DelegationManagerStorage.CallOpts, arg0) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawal(&_DelegationManagerStorage.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawal(&_DelegationManagerStorage.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawal(&_DelegationManagerStorage.TransactOpts, withdrawal, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManagerStorage.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawal(&_DelegationManagerStorage.TransactOpts, withdrawal, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawals(&_DelegationManagerStorage.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawals(&_DelegationManagerStorage.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawals(&_DelegationManagerStorage.TransactOpts, withdrawals, tokens, receiveAsTokens) +} + +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. +// +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawals(&_DelegationManagerStorage.TransactOpts, withdrawals, tokens, receiveAsTokens) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, shares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, removedShares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.DecreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, shares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.DecreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, removedShares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.DecreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, shares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.DecreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, removedShares) } // DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. @@ -1184,25 +1283,46 @@ func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) Dele return _DelegationManagerStorage.Contract.DelegateToBySignature(&_DelegationManagerStorage.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. +// +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, existingShares, addedShares) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. +// +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.IncreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, existingShares, addedShares) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. +// +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.IncreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, existingShares, addedShares) +} + +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, shares) +// Solidity: function initializeAllocationDelay(uint32 delay) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) InitializeAllocationDelay(opts *bind.TransactOpts, delay uint32) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "initializeAllocationDelay", delay) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.IncreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, shares) +// Solidity: function initializeAllocationDelay(uint32 delay) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.InitializeAllocationDelay(&_DelegationManagerStorage.TransactOpts, delay) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.IncreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, shares) +// Solidity: function initializeAllocationDelay(uint32 delay) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.InitializeAllocationDelay(&_DelegationManagerStorage.TransactOpts, delay) } // ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. @@ -1247,25 +1367,25 @@ func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) Queu return _DelegationManagerStorage.Contract.QueueWithdrawals(&_DelegationManagerStorage.TransactOpts, queuedWithdrawalParams) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { - return _DelegationManagerStorage.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, allocationDelay, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() -func (_DelegationManagerStorage *DelegationManagerStorageSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.RegisterAsOperator(&_DelegationManagerStorage.TransactOpts, registeringOperatorDetails, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.RegisterAsOperator(&_DelegationManagerStorage.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.RegisterAsOperator(&_DelegationManagerStorage.TransactOpts, registeringOperatorDetails, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.RegisterAsOperator(&_DelegationManagerStorage.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) } // Undelegate is a paid mutator transaction binding the contract method 0xda8be864. @@ -2769,6 +2889,142 @@ func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseStrategy return event, nil } +// DelegationManagerStorageStrategyWithdrawalDelaySetIterator is returned from FilterStrategyWithdrawalDelaySet and is used to iterate over the raw logs and unpacked data for StrategyWithdrawalDelaySet events raised by the DelegationManagerStorage contract. +type DelegationManagerStorageStrategyWithdrawalDelaySetIterator struct { + Event *DelegationManagerStorageStrategyWithdrawalDelaySet // 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 *DelegationManagerStorageStrategyWithdrawalDelaySetIterator) 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(DelegationManagerStorageStrategyWithdrawalDelaySet) + 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(DelegationManagerStorageStrategyWithdrawalDelaySet) + 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 *DelegationManagerStorageStrategyWithdrawalDelaySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DelegationManagerStorageStrategyWithdrawalDelaySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DelegationManagerStorageStrategyWithdrawalDelaySet represents a StrategyWithdrawalDelaySet event raised by the DelegationManagerStorage contract. +type DelegationManagerStorageStrategyWithdrawalDelaySet struct { + Strategy common.Address + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyWithdrawalDelaySet is a free log retrieval operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. +// +// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterStrategyWithdrawalDelaySet(opts *bind.FilterOpts) (*DelegationManagerStorageStrategyWithdrawalDelaySetIterator, error) { + + logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "StrategyWithdrawalDelaySet") + if err != nil { + return nil, err + } + return &DelegationManagerStorageStrategyWithdrawalDelaySetIterator{contract: _DelegationManagerStorage.contract, event: "StrategyWithdrawalDelaySet", logs: logs, sub: sub}, nil +} + +// WatchStrategyWithdrawalDelaySet is a free log subscription operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. +// +// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchStrategyWithdrawalDelaySet(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageStrategyWithdrawalDelaySet) (event.Subscription, error) { + + logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "StrategyWithdrawalDelaySet") + 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(DelegationManagerStorageStrategyWithdrawalDelaySet) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", 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 +} + +// ParseStrategyWithdrawalDelaySet is a log parse operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. +// +// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) +func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseStrategyWithdrawalDelaySet(log types.Log) (*DelegationManagerStorageStrategyWithdrawalDelaySet, error) { + event := new(DelegationManagerStorageStrategyWithdrawalDelaySet) + if err := _DelegationManagerStorage.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // DelegationManagerStorageWithdrawalCompletedIterator is returned from FilterWithdrawalCompleted and is used to iterate over the raw logs and unpacked data for WithdrawalCompleted events raised by the DelegationManagerStorage contract. type DelegationManagerStorageWithdrawalCompletedIterator struct { Event *DelegationManagerStorageWithdrawalCompleted // Event containing the contract specifics and raw log diff --git a/pkg/bindings/EigenPodManagerStorage/binding.go b/pkg/bindings/EigenPodManagerStorage/binding.go index 9dfa796b2..5046efda9 100644 --- a/pkg/bindings/EigenPodManagerStorage/binding.go +++ b/pkg/bindings/EigenPodManagerStorage/binding.go @@ -616,21 +616,21 @@ func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) StrategyMana // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) AddShares(opts *bind.TransactOpts, podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManagerStorage.contract.Transact(opts, "addShares", podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) func (_EigenPodManagerStorage *EigenPodManagerStorageSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManagerStorage.Contract.AddShares(&_EigenPodManagerStorage.TransactOpts, podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManagerStorage.Contract.AddShares(&_EigenPodManagerStorage.TransactOpts, podOwner, shares) } diff --git a/pkg/bindings/IDelegationManager/binding.go b/pkg/bindings/IDelegationManager/binding.go index 2f5320df7..44d76dc0d 100644 --- a/pkg/bindings/IDelegationManager/binding.go +++ b/pkg/bindings/IDelegationManager/binding.go @@ -29,6 +29,12 @@ var ( _ = abi.ConvertType ) +// IDelegationManagerAllocationDelayDetails is an auto generated low-level Go binding around an user-defined struct. +type IDelegationManagerAllocationDelayDetails struct { + IsSet bool + AllocationDelay uint32 +} + // IDelegationManagerOperatorDetails is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerOperatorDetails struct { DeprecatedEarningsReceiver common.Address @@ -45,13 +51,13 @@ type IDelegationManagerQueuedWithdrawalParams struct { // IDelegationManagerWithdrawal is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerWithdrawal struct { - Staker common.Address - DelegatedTo common.Address - Withdrawer common.Address - Nonce *big.Int - StartBlock uint32 - Strategies []common.Address - Shares []*big.Int + Staker common.Address + DelegatedTo common.Address + Withdrawer common.Address + Nonce *big.Int + StartTimestamp uint32 + Strategies []common.Address + ScaledShares []*big.Int } // ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. @@ -614,37 +620,6 @@ func (_IDelegationManager *IDelegationManagerCallerSession) DomainSeparator() ([ return _IDelegationManager.Contract.DomainSeparator(&_IDelegationManager.CallOpts) } -// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. -// -// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) -func (_IDelegationManager *IDelegationManagerCaller) GetOperatorShares(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]*big.Int, error) { - var out []interface{} - err := _IDelegationManager.contract.Call(opts, &out, "getOperatorShares", operator, strategies) - - if err != nil { - return *new([]*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) - - return out0, err - -} - -// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. -// -// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) -func (_IDelegationManager *IDelegationManagerSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { - return _IDelegationManager.Contract.GetOperatorShares(&_IDelegationManager.CallOpts, operator, strategies) -} - -// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. -// -// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) -func (_IDelegationManager *IDelegationManagerCallerSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { - return _IDelegationManager.Contract.GetOperatorShares(&_IDelegationManager.CallOpts, operator, strategies) -} - // GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. // // Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) @@ -769,6 +744,37 @@ func (_IDelegationManager *IDelegationManagerCallerSession) MinWithdrawalDelayBl return _IDelegationManager.Contract.MinWithdrawalDelayBlocks(&_IDelegationManager.CallOpts) } +// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. +// +// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) +func (_IDelegationManager *IDelegationManagerCaller) OperatorAllocationDelay(opts *bind.CallOpts, operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "operatorAllocationDelay", operator) + + if err != nil { + return *new(IDelegationManagerAllocationDelayDetails), err + } + + out0 := *abi.ConvertType(out[0], new(IDelegationManagerAllocationDelayDetails)).(*IDelegationManagerAllocationDelayDetails) + + return out0, err + +} + +// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. +// +// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) +func (_IDelegationManager *IDelegationManagerSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { + return _IDelegationManager.Contract.OperatorAllocationDelay(&_IDelegationManager.CallOpts, operator) +} + +// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. +// +// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) +func (_IDelegationManager *IDelegationManagerCallerSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { + return _IDelegationManager.Contract.OperatorAllocationDelay(&_IDelegationManager.CallOpts, operator) +} + // OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. // // Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) @@ -800,12 +806,12 @@ func (_IDelegationManager *IDelegationManagerCallerSession) OperatorDetails(oper return _IDelegationManager.Contract.OperatorDetails(&_IDelegationManager.CallOpts, operator) } -// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. // -// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) -func (_IDelegationManager *IDelegationManagerCaller) OperatorShares(opts *bind.CallOpts, operator common.Address, strategy common.Address) (*big.Int, error) { +// Solidity: function operatorScaledShares(address operator, address strategy) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCaller) OperatorScaledShares(opts *bind.CallOpts, operator common.Address, strategy common.Address) (*big.Int, error) { var out []interface{} - err := _IDelegationManager.contract.Call(opts, &out, "operatorShares", operator, strategy) + err := _IDelegationManager.contract.Call(opts, &out, "operatorScaledShares", operator, strategy) if err != nil { return *new(*big.Int), err @@ -817,18 +823,18 @@ func (_IDelegationManager *IDelegationManagerCaller) OperatorShares(opts *bind.C } -// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. // -// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) -func (_IDelegationManager *IDelegationManagerSession) OperatorShares(operator common.Address, strategy common.Address) (*big.Int, error) { - return _IDelegationManager.Contract.OperatorShares(&_IDelegationManager.CallOpts, operator, strategy) +// Solidity: function operatorScaledShares(address operator, address strategy) view returns(uint256) +func (_IDelegationManager *IDelegationManagerSession) OperatorScaledShares(operator common.Address, strategy common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.OperatorScaledShares(&_IDelegationManager.CallOpts, operator, strategy) } -// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. +// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. // -// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) -func (_IDelegationManager *IDelegationManagerCallerSession) OperatorShares(operator common.Address, strategy common.Address) (*big.Int, error) { - return _IDelegationManager.Contract.OperatorShares(&_IDelegationManager.CallOpts, operator, strategy) +// Solidity: function operatorScaledShares(address operator, address strategy) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCallerSession) OperatorScaledShares(operator common.Address, strategy common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.OperatorScaledShares(&_IDelegationManager.CallOpts, operator, strategy) } // StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. @@ -924,67 +930,67 @@ func (_IDelegationManager *IDelegationManagerCallerSession) StrategyWithdrawalDe return _IDelegationManager.Contract.StrategyWithdrawalDelayBlocks(&_IDelegationManager.CallOpts, strategy) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { - return _IDelegationManager.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { - return _IDelegationManager.Contract.CompleteQueuedWithdrawal(&_IDelegationManager.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { + return _IDelegationManager.Contract.CompleteQueuedWithdrawal(&_IDelegationManager.TransactOpts, withdrawal, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { - return _IDelegationManager.Contract.CompleteQueuedWithdrawal(&_IDelegationManager.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { + return _IDelegationManager.Contract.CompleteQueuedWithdrawal(&_IDelegationManager.TransactOpts, withdrawal, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { - return _IDelegationManager.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { - return _IDelegationManager.Contract.CompleteQueuedWithdrawals(&_IDelegationManager.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { + return _IDelegationManager.Contract.CompleteQueuedWithdrawals(&_IDelegationManager.TransactOpts, withdrawals, tokens, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { - return _IDelegationManager.Contract.CompleteQueuedWithdrawals(&_IDelegationManager.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { + return _IDelegationManager.Contract.CompleteQueuedWithdrawals(&_IDelegationManager.TransactOpts, withdrawals, tokens, receiveAsTokens) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_IDelegationManager *IDelegationManagerTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, shares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() +func (_IDelegationManager *IDelegationManagerTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, removedShares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_IDelegationManager *IDelegationManagerSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.Contract.DecreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, shares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() +func (_IDelegationManager *IDelegationManagerSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.Contract.DecreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, removedShares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_IDelegationManager *IDelegationManagerTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.Contract.DecreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, shares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.Contract.DecreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, removedShares) } // DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. @@ -1029,25 +1035,46 @@ func (_IDelegationManager *IDelegationManagerTransactorSession) DelegateToBySign return _IDelegationManager.Contract.DelegateToBySignature(&_IDelegationManager.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. +// +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() +func (_IDelegationManager *IDelegationManagerTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, existingShares, addedShares) +} + +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_IDelegationManager *IDelegationManagerTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, shares) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() +func (_IDelegationManager *IDelegationManagerSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.Contract.IncreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, existingShares, addedShares) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_IDelegationManager *IDelegationManagerSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.Contract.IncreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, shares) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.Contract.IncreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, existingShares, addedShares) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() -func (_IDelegationManager *IDelegationManagerTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.Contract.IncreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, shares) +// Solidity: function initializeAllocationDelay(uint32 delay) returns() +func (_IDelegationManager *IDelegationManagerTransactor) InitializeAllocationDelay(opts *bind.TransactOpts, delay uint32) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "initializeAllocationDelay", delay) +} + +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. +// +// Solidity: function initializeAllocationDelay(uint32 delay) returns() +func (_IDelegationManager *IDelegationManagerSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { + return _IDelegationManager.Contract.InitializeAllocationDelay(&_IDelegationManager.TransactOpts, delay) +} + +// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. +// +// Solidity: function initializeAllocationDelay(uint32 delay) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { + return _IDelegationManager.Contract.InitializeAllocationDelay(&_IDelegationManager.TransactOpts, delay) } // ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. @@ -1092,25 +1119,25 @@ func (_IDelegationManager *IDelegationManagerTransactorSession) QueueWithdrawals return _IDelegationManager.Contract.QueueWithdrawals(&_IDelegationManager.TransactOpts, queuedWithdrawalParams) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() -func (_IDelegationManager *IDelegationManagerTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { - return _IDelegationManager.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() +func (_IDelegationManager *IDelegationManagerTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, allocationDelay, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() -func (_IDelegationManager *IDelegationManagerSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { - return _IDelegationManager.Contract.RegisterAsOperator(&_IDelegationManager.TransactOpts, registeringOperatorDetails, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() +func (_IDelegationManager *IDelegationManagerSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { + return _IDelegationManager.Contract.RegisterAsOperator(&_IDelegationManager.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() -func (_IDelegationManager *IDelegationManagerTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { - return _IDelegationManager.Contract.RegisterAsOperator(&_IDelegationManager.TransactOpts, registeringOperatorDetails, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { + return _IDelegationManager.Contract.RegisterAsOperator(&_IDelegationManager.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) } // Undelegate is a paid mutator transaction binding the contract method 0xda8be864. @@ -2614,6 +2641,142 @@ func (_IDelegationManager *IDelegationManagerFilterer) ParseStrategyWithdrawalDe return event, nil } +// IDelegationManagerStrategyWithdrawalDelaySetIterator is returned from FilterStrategyWithdrawalDelaySet and is used to iterate over the raw logs and unpacked data for StrategyWithdrawalDelaySet events raised by the IDelegationManager contract. +type IDelegationManagerStrategyWithdrawalDelaySetIterator struct { + Event *IDelegationManagerStrategyWithdrawalDelaySet // 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 *IDelegationManagerStrategyWithdrawalDelaySetIterator) 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(IDelegationManagerStrategyWithdrawalDelaySet) + 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(IDelegationManagerStrategyWithdrawalDelaySet) + 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 *IDelegationManagerStrategyWithdrawalDelaySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IDelegationManagerStrategyWithdrawalDelaySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IDelegationManagerStrategyWithdrawalDelaySet represents a StrategyWithdrawalDelaySet event raised by the IDelegationManager contract. +type IDelegationManagerStrategyWithdrawalDelaySet struct { + Strategy common.Address + PreviousValue *big.Int + NewValue *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyWithdrawalDelaySet is a free log retrieval operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. +// +// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) +func (_IDelegationManager *IDelegationManagerFilterer) FilterStrategyWithdrawalDelaySet(opts *bind.FilterOpts) (*IDelegationManagerStrategyWithdrawalDelaySetIterator, error) { + + logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "StrategyWithdrawalDelaySet") + if err != nil { + return nil, err + } + return &IDelegationManagerStrategyWithdrawalDelaySetIterator{contract: _IDelegationManager.contract, event: "StrategyWithdrawalDelaySet", logs: logs, sub: sub}, nil +} + +// WatchStrategyWithdrawalDelaySet is a free log subscription operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. +// +// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) +func (_IDelegationManager *IDelegationManagerFilterer) WatchStrategyWithdrawalDelaySet(opts *bind.WatchOpts, sink chan<- *IDelegationManagerStrategyWithdrawalDelaySet) (event.Subscription, error) { + + logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "StrategyWithdrawalDelaySet") + 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(IDelegationManagerStrategyWithdrawalDelaySet) + if err := _IDelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", 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 +} + +// ParseStrategyWithdrawalDelaySet is a log parse operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. +// +// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) +func (_IDelegationManager *IDelegationManagerFilterer) ParseStrategyWithdrawalDelaySet(log types.Log) (*IDelegationManagerStrategyWithdrawalDelaySet, error) { + event := new(IDelegationManagerStrategyWithdrawalDelaySet) + if err := _IDelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // IDelegationManagerWithdrawalCompletedIterator is returned from FilterWithdrawalCompleted and is used to iterate over the raw logs and unpacked data for WithdrawalCompleted events raised by the IDelegationManager contract. type IDelegationManagerWithdrawalCompletedIterator struct { Event *IDelegationManagerWithdrawalCompleted // Event containing the contract specifics and raw log diff --git a/pkg/bindings/IEigenPodManager/binding.go b/pkg/bindings/IEigenPodManager/binding.go index 4239a7cc7..8884cba01 100644 --- a/pkg/bindings/IEigenPodManager/binding.go +++ b/pkg/bindings/IEigenPodManager/binding.go @@ -585,21 +585,21 @@ func (_IEigenPodManager *IEigenPodManagerCallerSession) StrategyManager() (commo // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) func (_IEigenPodManager *IEigenPodManagerTransactor) AddShares(opts *bind.TransactOpts, podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _IEigenPodManager.contract.Transact(opts, "addShares", podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) func (_IEigenPodManager *IEigenPodManagerSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _IEigenPodManager.Contract.AddShares(&_IEigenPodManager.TransactOpts, podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) func (_IEigenPodManager *IEigenPodManagerTransactorSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _IEigenPodManager.Contract.AddShares(&_IEigenPodManager.TransactOpts, podOwner, shares) } diff --git a/pkg/bindings/IStrategyManager/binding.go b/pkg/bindings/IStrategyManager/binding.go index c3c822407..590460b37 100644 --- a/pkg/bindings/IStrategyManager/binding.go +++ b/pkg/bindings/IStrategyManager/binding.go @@ -462,21 +462,21 @@ func (_IStrategyManager *IStrategyManagerCallerSession) ThirdPartyTransfersForbi // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) func (_IStrategyManager *IStrategyManagerTransactor) AddShares(opts *bind.TransactOpts, staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _IStrategyManager.contract.Transact(opts, "addShares", staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) func (_IStrategyManager *IStrategyManagerSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _IStrategyManager.Contract.AddShares(&_IStrategyManager.TransactOpts, staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) func (_IStrategyManager *IStrategyManagerTransactorSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _IStrategyManager.Contract.AddShares(&_IStrategyManager.TransactOpts, staker, token, strategy, shares) } diff --git a/pkg/bindings/StrategyManager/binding.go b/pkg/bindings/StrategyManager/binding.go index 54dbe6aed..810b6ece3 100644 --- a/pkg/bindings/StrategyManager/binding.go +++ b/pkg/bindings/StrategyManager/binding.go @@ -44,7 +44,7 @@ var StrategyManagerABI = StrategyManagerMetaData.ABI var StrategyManagerBin = StrategyManagerMetaData.Bin // DeployStrategyManager deploys a new Ethereum contract, binding an instance of StrategyManager to it. -func DeployStrategyManager(auth *bind.TransactOpts, backend bind.ContractBackend, _delegation common.Address, _eigenPodManager common.Address, _slasher common.Address) (common.Address, *types.Transaction, *StrategyManager, error) { +func DeployStrategyManager(auth *bind.TransactOpts, backend bind.ContractBackend, _delegation common.Address, _eigenPodManager common.Address, _slasher common.Address, _avsDirectory common.Address) (common.Address, *types.Transaction, *StrategyManager, error) { parsed, err := StrategyManagerMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployStrategyManager(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(StrategyManagerBin), backend, _delegation, _eigenPodManager, _slasher) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StrategyManagerBin), backend, _delegation, _eigenPodManager, _slasher, _avsDirectory) if err != nil { return common.Address{}, nil, nil, err } @@ -264,6 +264,37 @@ func (_StrategyManager *StrategyManagerCallerSession) DOMAINTYPEHASH() ([32]byte return _StrategyManager.Contract.DOMAINTYPEHASH(&_StrategyManager.CallOpts) } +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_StrategyManager *StrategyManagerCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManager.contract.Call(opts, &out, "avsDirectory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_StrategyManager *StrategyManagerSession) AvsDirectory() (common.Address, error) { + return _StrategyManager.Contract.AvsDirectory(&_StrategyManager.CallOpts) +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_StrategyManager *StrategyManagerCallerSession) AvsDirectory() (common.Address, error) { + return _StrategyManager.Contract.AvsDirectory(&_StrategyManager.CallOpts) +} + // Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // // Solidity: function delegation() view returns(address) @@ -763,21 +794,21 @@ func (_StrategyManager *StrategyManagerCallerSession) ThirdPartyTransfersForbidd // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) func (_StrategyManager *StrategyManagerTransactor) AddShares(opts *bind.TransactOpts, staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManager.contract.Transact(opts, "addShares", staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) func (_StrategyManager *StrategyManagerSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManager.Contract.AddShares(&_StrategyManager.TransactOpts, staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) func (_StrategyManager *StrategyManagerTransactorSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManager.Contract.AddShares(&_StrategyManager.TransactOpts, staker, token, strategy, shares) } diff --git a/pkg/bindings/StrategyManagerStorage/binding.go b/pkg/bindings/StrategyManagerStorage/binding.go index e8619211c..3f7efbd2b 100644 --- a/pkg/bindings/StrategyManagerStorage/binding.go +++ b/pkg/bindings/StrategyManagerStorage/binding.go @@ -242,6 +242,37 @@ func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) DOMAINTYPEHA return _StrategyManagerStorage.Contract.DOMAINTYPEHASH(&_StrategyManagerStorage.CallOpts) } +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StrategyManagerStorage.contract.Call(opts, &out, "avsDirectory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageSession) AvsDirectory() (common.Address, error) { + return _StrategyManagerStorage.Contract.AvsDirectory(&_StrategyManagerStorage.CallOpts) +} + +// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// +// Solidity: function avsDirectory() view returns(address) +func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) AvsDirectory() (common.Address, error) { + return _StrategyManagerStorage.Contract.AvsDirectory(&_StrategyManagerStorage.CallOpts) +} + // Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // // Solidity: function delegation() view returns(address) @@ -586,21 +617,21 @@ func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) ThirdPartyTr // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) func (_StrategyManagerStorage *StrategyManagerStorageTransactor) AddShares(opts *bind.TransactOpts, staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManagerStorage.contract.Transact(opts, "addShares", staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) func (_StrategyManagerStorage *StrategyManagerStorageSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManagerStorage.Contract.AddShares(&_StrategyManagerStorage.TransactOpts, staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) func (_StrategyManagerStorage *StrategyManagerStorageTransactorSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManagerStorage.Contract.AddShares(&_StrategyManagerStorage.TransactOpts, staker, token, strategy, shares) } diff --git a/script/configs/devnet/deploy_from_scratch.anvil.config.json b/script/configs/devnet/deploy_from_scratch.anvil.config.json new file mode 100644 index 000000000..96df127e1 --- /dev/null +++ b/script/configs/devnet/deploy_from_scratch.anvil.config.json @@ -0,0 +1,55 @@ +{ + "maintainer": "samlaf@eigenlabs.org", + "multisig_addresses": { + "operationsMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "communityMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "pauserMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "executorMultisig": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "timelock": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + }, + "strategies": [ + { + "token_address": "0x0000000000000000000000000000000000000000", + "token_symbol": "WETH", + "max_per_deposit": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "max_deposits": 115792089237316195423570985008687907853269984665640564039457584007913129639935 + } + ], + "strategyManager": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "eigenPod": { + "PARTIAL_WITHDRAWAL_FRAUD_PROOF_PERIOD_BLOCKS": 1, + "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR": "32000000000" + }, + "eigenPodManager": { + "init_paused_status": 30 + }, + "delayedWithdrawalRouter": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "slasher": { + "init_paused_status": 0 + }, + "delegation": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "rewardsCoordinator": { + "init_paused_status": 0, + "CALCULATION_INTERVAL_SECONDS": 604800, + "MAX_REWARDS_DURATION": 6048000, + "MAX_RETROACTIVE_LENGTH": 7776000, + "MAX_FUTURE_LENGTH": 2592000, + "GENESIS_REWARDS_TIMESTAMP": 1710979200, + "rewards_updater_address": "0x18a0f92Ad9645385E8A8f3db7d0f6CF7aBBb0aD4", + "activation_delay": 7200, + "calculation_interval_seconds": 604800, + "global_operator_commission_bips": 1000, + "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP": 1720656000, + "OPERATOR_SET_MAX_RETROACTIVE_LENGTH": 2592000 + }, + "ethPOSDepositAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa" +} \ No newline at end of file diff --git a/script/configs/devnet/deploy_from_scratch.holesky.config.json b/script/configs/devnet/deploy_from_scratch.holesky.config.json new file mode 100644 index 000000000..3dc1f204d --- /dev/null +++ b/script/configs/devnet/deploy_from_scratch.holesky.config.json @@ -0,0 +1,55 @@ +{ + "maintainer": "samlaf@eigenlabs.org", + "multisig_addresses": { + "operationsMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", + "communityMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", + "pauserMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", + "executorMultisig": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", + "timelock": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479" + }, + "strategies": [ + { + "token_address": "0x0000000000000000000000000000000000000000", + "token_symbol": "WETH", + "max_per_deposit": 115792089237316195423570985008687907853269984665640564039457584007913129639935, + "max_deposits": 115792089237316195423570985008687907853269984665640564039457584007913129639935 + } + ], + "strategyManager": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "eigenPod": { + "PARTIAL_WITHDRAWAL_FRAUD_PROOF_PERIOD_BLOCKS": 1, + "MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR": "32000000000" + }, + "eigenPodManager": { + "init_paused_status": 30 + }, + "delayedWithdrawalRouter": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "slasher": { + "init_paused_status": 0 + }, + "delegation": { + "init_paused_status": 0, + "init_withdrawal_delay_blocks": 1 + }, + "rewardsCoordinator": { + "init_paused_status": 0, + "CALCULATION_INTERVAL_SECONDS": 604800, + "MAX_REWARDS_DURATION": 6048000, + "MAX_RETROACTIVE_LENGTH": 7776000, + "MAX_FUTURE_LENGTH": 2592000, + "GENESIS_REWARDS_TIMESTAMP": 1710979200, + "rewards_updater_address": "0xDA29BB71669f46F2a779b4b62f03644A84eE3479", + "activation_delay": 7200, + "calculation_interval_seconds": 604800, + "global_operator_commission_bips": 1000, + "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP": 1720656000, + "OPERATOR_SET_MAX_RETROACTIVE_LENGTH": 2592000 + }, + "ethPOSDepositAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa" +} \ No newline at end of file diff --git a/script/deploy/devnet/Upgrade.s.sol b/script/deploy/devnet/Upgrade.s.sol new file mode 100644 index 000000000..8127d4420 --- /dev/null +++ b/script/deploy/devnet/Upgrade.s.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; +import "../../utils/ExistingDeploymentParser.sol"; + +// # To load the variables in the .env file +// source .env + +// Generic upgrade script, DOES NOT UPDATE IMPLEMENTATION IN OUTPUT FILE +// forge script script/deploy/devnet/Upgrade.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY +contract Upgrade is ExistingDeploymentParser { + + function run() external { + // EDIT this for your script + _parseDeployedContracts("script/output/holesky/pre_preprod_slashing.holesky.json"); + + vm.startBroadcast(); + AVSDirectory newAVSDirectoryImplementation = new AVSDirectory(delegationManager); + eigenLayerProxyAdmin.upgrade(TransparentUpgradeableProxy(payable(address(avsDirectory))), address(newAVSDirectoryImplementation)); + vm.stopBroadcast(); + + } +} \ No newline at end of file diff --git a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol index 5fddcd608..9b721da46 100644 --- a/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol +++ b/script/deploy/holesky/M2_Deploy_From_Scratch.s.sol @@ -81,7 +81,7 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); avsDirectoryImplementation = new AVSDirectory(delegationManager); delegationManagerImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager, MIN_WITHDRAWAL_DELAY); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( IETHPOSDeposit(ETHPOSDepositAddress), @@ -90,7 +90,7 @@ contract M2_Deploy_Holesky_From_Scratch is ExistingDeploymentParser { slasher, delegationManager ); - allocationManagerImplementation = new AllocationManager(delegationManager, avsDirectory, DEALLOCATION_DELAY); + allocationManagerImplementation = new AllocationManager(delegationManager, avsDirectory, DEALLOCATION_DELAY, ALLOCATION_DELAY_CONFIGURATION_DELAY); // Third, upgrade the proxy contracts to point to the implementations IStrategy[] memory initializeStrategiesToSetDelayBlocks = new IStrategy[](0); diff --git a/script/deploy/local/Deploy_From_Scratch.s.sol b/script/deploy/local/Deploy_From_Scratch.s.sol index 4a95126db..8e6c5539c 100644 --- a/script/deploy/local/Deploy_From_Scratch.s.sol +++ b/script/deploy/local/Deploy_From_Scratch.s.sol @@ -94,6 +94,7 @@ contract DeployFromScratch is Script, Test { // AllocationManager uint32 DEALLOCATION_DELAY; + uint32 ALLOCATION_DELAY_CONFIGURATION_DELAY; // RewardsCoordinator uint32 REWARDS_COORDINATOR_MAX_REWARDS_DURATION; @@ -162,6 +163,12 @@ contract DeployFromScratch is Script, Test { ALLOCATION_MANAGER_INIT_PAUSED_STATUS = uint32( stdJson.readUint(config_data, ".allocationManager.init_paused_status") ); + DEALLOCATION_DELAY = uint32( + stdJson.readUint(config_data, ".allocationManager.DEALLOCATION_DELAY") + ); + ALLOCATION_DELAY_CONFIGURATION_DELAY = uint32( + stdJson.readUint(config_data, ".allocationManager.ALLOCATION_DELAY_CONFIGURATION_DELAY") + ); // tokens to deploy strategies for StrategyConfig[] memory strategyConfigs; @@ -234,8 +241,9 @@ contract DeployFromScratch is Script, Test { eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); // Second, deploy the *implementation* contracts, using the *proxy contracts* as inputs + delegationImplementation = new DelegationManager(strategyManager, slasher, eigenPodManager, avsDirectory, allocationManager, MIN_WITHDRAWAL_DELAY); - strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher); + strategyManagerImplementation = new StrategyManager(delegation, eigenPodManager, slasher, avsDirectory); avsDirectoryImplementation = new AVSDirectory(delegation); slasherImplementation = new Slasher(strategyManager, delegation); eigenPodManagerImplementation = new EigenPodManager( @@ -257,7 +265,7 @@ contract DeployFromScratch is Script, Test { REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH ); - allocationManagerImplementation = new AllocationManager(delegation, avsDirectory, DEALLOCATION_DELAY); + allocationManagerImplementation = new AllocationManager(delegation, avsDirectory, DEALLOCATION_DELAY, ALLOCATION_DELAY_CONFIGURATION_DELAY); // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. { diff --git a/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol b/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol new file mode 100644 index 000000000..fa5d93707 --- /dev/null +++ b/script/deploy/mainnet/Deploy_Strategy_Factory.s.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "@openzeppelin/contracts/utils/Create2.sol"; +import "../../utils/ExistingDeploymentParser.sol"; + +import "../../../src/contracts/strategies/StrategyFactory.sol"; + +/** + * @notice Script used for the first deployment of EigenLayer core contracts to Holesky + * FORK LOCAL + * anvil --fork-url $RPC_MAINNET + * forge script script/deploy/mainnet/Deploy_Strategy_Factory.s.sol:MainnetStrategyFactoryDeploy --rpc-url http://127.0.0.1:8545 --private-key $PRIVATE_KEY --broadcast -vvvv + * + * MAINNET + * forge script script/deploy/mainnet/Deploy_Strategy_Factory.s.sol:MainnetStrategyFactoryDeploy --rpc-url $RPC_MAINNET --private-key $PRIVATE_KEY --verify --broadcast -vvvv + * + */ + +contract MainnetStrategyFactoryDeploy is ExistingDeploymentParser { + function run() external virtual { + // Use rewards config + _parseInitialDeploymentParams( + "script/configs/mainnet/v0.3.0-mainnet-rewards.config.json" + ); + _parseDeployedContracts( + "script/configs/mainnet/Mainnet_curent_deployment.config.json" + ); + + // START RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.startBroadcast(); + + emit log_named_address("Deployer Address", msg.sender); + + _deployStrategyFactory(); + + // STOP RECORDING TRANSACTIONS FOR DEPLOYMENT + vm.stopBroadcast(); + + // Sanity Checks + _verifyContractPointers(); + _verifyImplementations(); + _verifyContractsInitialized(); + _verifyInitializationParams(); + + logAndOutputContractAddresses("script/output/mainnet/v0.3.2-mainnet-strategy-factory.output.json"); + } + + /** + * @notice Deploy StrategyFactory for Mainnet + */ + + function _deployStrategyFactory() internal { + strategyFactoryImplementation = new StrategyFactory( + strategyManager + ); + + + + } +} \ No newline at end of file diff --git a/script/utils/ExistingDeploymentParser.sol b/script/utils/ExistingDeploymentParser.sol index 2536f5cc7..53f9e5e9c 100644 --- a/script/utils/ExistingDeploymentParser.sol +++ b/script/utils/ExistingDeploymentParser.sol @@ -128,6 +128,7 @@ contract ExistingDeploymentParser is Script, Test { // AllocationManager uint256 ALLOCATION_MANAGER_INIT_PAUSED_STATUS; uint32 DEALLOCATION_DELAY; + uint32 ALLOCATION_DELAY_CONFIGURATION_DELAY; // EigenPod uint64 EIGENPOD_GENESIS_TIME; uint64 EIGENPOD_MAX_RESTAKED_BALANCE_GWEI_PER_VALIDATOR; diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index a9544542a..71849a60a 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -42,10 +42,14 @@ contract AllocationManager is constructor( IDelegationManager _delegation, IAVSDirectory _avsDirectory, - uint32 _DEALLOCATION_DELAY - ) AllocationManagerStorage(_delegation, _avsDirectory, _DEALLOCATION_DELAY) { + uint32 _DEALLOCATION_DELAY, + uint32 _ALLOCATION_DELAY_CONFIGURATION_DELAY + ) + AllocationManagerStorage(_delegation, _avsDirectory, _DEALLOCATION_DELAY, _ALLOCATION_DELAY_CONFIGURATION_DELAY) + { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; + DEALLOCATION_DELAY = _DEALLOCATION_DELAY; } /** @@ -62,6 +66,30 @@ contract AllocationManager is _transferOwnership(initialOwner); } + /** + * @notice Called by operators to set their allocation delay. + * @param delay the allocation delay in seconds + * @dev msg.sender is assumed to be the operator + */ + function setAllocationDelay( + uint32 delay + ) external { + require(delegation.isOperator(msg.sender), OperatorNotRegistered()); + + AllocationDelayInfo storage delayInfo = _allocationDelayInfo[msg.sender]; + + bool pendingInEffect = delayInfo.pendingDelay != 0 && block.timestamp >= delayInfo.pendingDelayEffectTimestamp; + + if (pendingInEffect) { + delayInfo.delay = delayInfo.pendingDelay; + } + + delayInfo.pendingDelay = delay; + delayInfo.pendingDelayEffectTimestamp = uint32(block.timestamp + ALLOCATION_DELAY_CONFIGURATION_DELAY); + + emit AllocationDelaySet(msg.sender, delay); + } + /** * @notice For all pending deallocations that have become completable, their pending free magnitude can be * added back to the free magnitude of the (operator, strategy) amount. This function takes a list of strategies @@ -105,10 +133,13 @@ contract AllocationManager is _verifyOperatorSignature(operator, allocations, operatorSignature); } require(delegation.isOperator(operator), OperatorNotRegistered()); - IDelegationManager.AllocationDelayDetails memory details = delegation.operatorAllocationDelay(operator); - require(details.isSet, UninitializedAllocationDelay()); + + (bool isSet, uint32 delay) = allocationDelay(operator); + + require(isSet, UninitializedAllocationDelay()); + // effect timestamp for allocations to take effect. This is configurable by operators - uint32 effectTimestamp = uint32(block.timestamp) + details.allocationDelay; + uint32 effectTimestamp = uint32(block.timestamp) + delay; // completable timestamp for deallocations uint32 completableTimestamp = uint32(block.timestamp) + DEALLOCATION_DELAY; @@ -405,6 +436,24 @@ contract AllocationManager is return (freeMagnitudeToAdd, nextIndex); } + /** + * @notice Returns the allocation delay of an operator + * @param operator The operator to get the allocation delay for + */ + function allocationDelay( + address operator + ) public view returns (bool isSet, uint32 delay) { + AllocationDelayInfo memory delayInfo = _allocationDelayInfo[operator]; + + bool pendingInEffect = delayInfo.pendingDelay != 0 && block.timestamp >= delayInfo.pendingDelayEffectTimestamp; + + isSet = delayInfo.pendingDelayEffectTimestamp != 0; + + if (pendingInEffect) return (isSet, delayInfo.pendingDelay); + + return (isSet, delayInfo.delay); + } + /** * @param operator the operator to get the slashable magnitude for * @param strategies the strategies to get the slashable magnitude for diff --git a/src/contracts/core/AllocationManagerStorage.sol b/src/contracts/core/AllocationManagerStorage.sol index 687f70129..8abe6a3a1 100644 --- a/src/contracts/core/AllocationManagerStorage.sol +++ b/src/contracts/core/AllocationManagerStorage.sol @@ -18,16 +18,19 @@ abstract contract AllocationManagerStorage is IAllocationManager { "MagnitudeAdjustments(address operator,MagnitudeAdjustment(address strategy, OperatorSet(address avs, uint32 operatorSetId)[], uint64[] magnitudeDiffs)[],bytes32 salt,uint256 expiry)" ); - /// @notice Delay before deallocations are completable and can be added back into freeMagnitude - /// In this window, deallocations still remain slashable by the operatorSet they were allocated to. - uint32 public immutable DEALLOCATION_DELAY; - /// @notice The DelegationManager contract for EigenLayer IDelegationManager public immutable delegation; /// @notice The AVSDirectory contract for EigenLayer IAVSDirectory public immutable avsDirectory; + /// @notice Delay before deallocations are completable and can be added back into freeMagnitude + /// In this window, deallocations still remain slashable by the operatorSet they were allocated to. + uint32 public immutable DEALLOCATION_DELAY; + + /// @dev Delay before alloaction delay modifications take effect. + uint32 public immutable ALLOCATION_DELAY_CONFIGURATION_DELAY; // QUESTION: 21 days? + /** * @notice Original EIP-712 Domain separator for this contract. * @dev The domain separator may change in the event of a fork that modifies the ChainID. @@ -54,10 +57,20 @@ abstract contract AllocationManagerStorage is IAllocationManager { /// @notice Mapping: operator => strategy => operatorSet (encoded) => list of queuedDeallocation indices mapping(address => mapping(IStrategy => mapping(bytes32 => uint256[]))) internal _queuedDeallocationIndices; - constructor(IDelegationManager _delegation, IAVSDirectory _avsDirectory, uint32 _DEALLOCATION_DELAY) { + /// @notice Mapping: operator => allocation delay (in seconds) for the operator. + /// This determines how long it takes for allocations to take effect in the future. + mapping(address => AllocationDelayInfo) internal _allocationDelayInfo; + + constructor( + IDelegationManager _delegation, + IAVSDirectory _avsDirectory, + uint32 _DEALLOCATION_DELAY, + uint32 _ALLOCATION_DELAY_CONFIGURATION_DELAY + ) { delegation = _delegation; avsDirectory = _avsDirectory; DEALLOCATION_DELAY = _DEALLOCATION_DELAY; + ALLOCATION_DELAY_CONFIGURATION_DELAY = _ALLOCATION_DELAY_CONFIGURATION_DELAY; } /** @@ -65,5 +78,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[43] private __gap; + uint256[42] private __gap; } diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 4a7fea7c1..1b6fe1f43 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -110,7 +110,6 @@ contract DelegationManager is /** * @notice Registers the caller as an operator in EigenLayer. * @param registeringOperatorDetails is the `OperatorDetails` for the operator. - * @param allocationDelay is a one-time configurable delay for the operator when performing slashable magnitude allocations. * @param metadataURI is a URI for the operator's metadata, i.e. a link providing more details on the operator. * * @dev Once an operator is registered, they cannot 'deregister' as an operator, and they will forever be considered "delegated to themself". @@ -119,7 +118,6 @@ contract DelegationManager is */ function registerAsOperator( OperatorDetails calldata registeringOperatorDetails, - uint32 allocationDelay, string calldata metadataURI ) external { require(!isDelegated(msg.sender), ActivelyDelegated()); @@ -127,24 +125,11 @@ contract DelegationManager is SignatureWithExpiry memory emptySignatureAndExpiry; // delegate from the operator to themselves _delegate(msg.sender, msg.sender, emptySignatureAndExpiry, bytes32(0)); - // set the allocation delay - _initializeAllocationDelay(allocationDelay); // emit events emit OperatorRegistered(msg.sender, registeringOperatorDetails); emit OperatorMetadataURIUpdated(msg.sender, metadataURI); } - /** - * @notice Called by operators to set their allocation delay one time. Cannot be updated - * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. - * @param delay the allocation delay in seconds - */ - function initializeAllocationDelay( - uint32 delay - ) external { - _initializeAllocationDelay(delay); - } - /** * @notice Updates an operator's stored `OperatorDetails`. * @param newOperatorDetails is the updated `OperatorDetails` for the operator, to replace their current OperatorDetails`. @@ -473,19 +458,6 @@ contract DelegationManager is emit OperatorDetailsModified(msg.sender, newOperatorDetails); } - /** - * @notice Called by operators to set their allocation delay one time. Cannot be updated - * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. - * @param delay the allocation delay in seconds - */ - function _initializeAllocationDelay( - uint32 delay - ) internal { - require(isOperator(msg.sender), OperatorNotRegistered()); - require(!_operatorAllocationDelay[msg.sender].isSet, AllocationDelaySet()); - _operatorAllocationDelay[msg.sender] = AllocationDelayDetails({isSet: true, allocationDelay: delay}); - } - /** * @notice Delegates *from* a `staker` *to* an `operator`. * @param staker The address to delegate *from* -- this address is delegating control of its own assets. @@ -654,7 +626,7 @@ contract DelegationManager is } else { strategyManager.addShares(msg.sender, tokens[i], withdrawal.strategies[i], sharesToWithdraw); } - } + } } // Remove `withdrawalRoot` from pending roots @@ -874,16 +846,6 @@ contract DelegationManager is return _operatorDetails[operator]; } - /** - * @notice Returns the AllocationDelayDetails struct associated with an `operator` - * @dev If the operator has not set an allocation delay, then the `isSet` field will be `false`. - */ - function operatorAllocationDelay( - address operator - ) external view returns (AllocationDelayDetails memory) { - return _operatorAllocationDelay[operator]; - } - /** * @notice Returns the delegationApprover account for an operator */ diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index b3575f994..07d7c3801 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -116,10 +116,6 @@ abstract contract DelegationManagerStorage is IDelegationManager { /// This is updated upon each deposit based on the staker's currently delegated operator's totalMagnitude. mapping(address => mapping(IStrategy => uint256)) public stakerScalingFactors; - /// @notice Mapping: operator => allocation delay (in seconds) for the operator. - /// This determines how long it takes for allocations to take effect in the future. Can only be set one time for each operator - mapping(address => AllocationDelayDetails) internal _operatorAllocationDelay; - constructor( IStrategyManager _strategyManager, ISlasher _slasher, @@ -141,5 +137,5 @@ abstract contract DelegationManagerStorage is IDelegationManager { * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ - uint256[37] private __gap; + uint256[38] private __gap; } diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index b28d50ef6..a82074ed4 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -59,8 +59,9 @@ contract StrategyManager is constructor( IDelegationManager _delegation, IEigenPodManager _eigenPodManager, - ISlasher _slasher - ) StrategyManagerStorage(_delegation, _eigenPodManager, _slasher) { + ISlasher _slasher, + IAVSDirectory _avsDirectory + ) StrategyManagerStorage(_delegation, _eigenPodManager, _slasher, _avsDirectory) { _disableInitializers(); ORIGINAL_CHAIN_ID = block.chainid; } @@ -285,7 +286,7 @@ contract StrategyManager is token.safeTransferFrom(msg.sender, address(strategy), amount); // deposit the assets into the specified strategy and get the equivalent amount of shares in that strategy - uint256 shares = strategy.deposit(token, amount); + shares = strategy.deposit(token, amount); // add the returned shares to the staker's existing shares for this strategy _addShares(staker, token, strategy, shares); diff --git a/src/contracts/core/StrategyManagerStorage.sol b/src/contracts/core/StrategyManagerStorage.sol index 485d23d0e..1425f07a6 100644 --- a/src/contracts/core/StrategyManagerStorage.sol +++ b/src/contracts/core/StrategyManagerStorage.sol @@ -6,6 +6,7 @@ import "../interfaces/IStrategy.sol"; import "../interfaces/IEigenPodManager.sol"; import "../interfaces/IDelegationManager.sol"; import "../interfaces/ISlasher.sol"; +import "../interfaces/IAVSDirectory.sol"; /** * @title Storage variables for the `StrategyManager` contract. @@ -27,6 +28,7 @@ abstract contract StrategyManagerStorage is IStrategyManager { IDelegationManager public immutable delegation; IEigenPodManager public immutable eigenPodManager; ISlasher public immutable slasher; + IAVSDirectory public immutable avsDirectory; /** * @notice Original EIP-712 Domain separator for this contract. @@ -72,10 +74,16 @@ abstract contract StrategyManagerStorage is IStrategyManager { */ mapping(IStrategy => bool) private __deprecated_thirdPartyTransfersForbidden; - constructor(IDelegationManager _delegation, IEigenPodManager _eigenPodManager, ISlasher _slasher) { + constructor( + IDelegationManager _delegation, + IEigenPodManager _eigenPodManager, + ISlasher _slasher, + IAVSDirectory _avsDirectory + ) { delegation = _delegation; eigenPodManager = _eigenPodManager; slasher = _slasher; + avsDirectory = _avsDirectory; } /** diff --git a/src/contracts/interfaces/IAllocationManager.sol b/src/contracts/interfaces/IAllocationManager.sol index 07df2dcad..1a20f922d 100644 --- a/src/contracts/interfaces/IAllocationManager.sol +++ b/src/contracts/interfaces/IAllocationManager.sol @@ -64,6 +64,21 @@ interface IAllocationManager is ISignatureUtils { uint64 freeMagnitude; } + /** + * @notice Struct containing allocation delay metadata for a given operator. + * @param delay Current allocation delay if `pendingDelay` is non-zero and `pendingDelayEffectTimestamp` has elapsed. + * @param pendingDelay Current allocation delay if it's non-zero and `pendingDelayEffectTimestamp` has elapsed. + * @param pendingDelayEffectTimestamp The timestamp for which `pendingDelay` becomes the curren allocation delay. + */ + struct AllocationDelayInfo { + uint32 delay; + uint32 pendingDelay; + uint32 pendingDelayEffectTimestamp; + } + + /// @notice Emitted when operator updates their allocation delay. + event AllocationDelaySet(address operator, uint32 delay); + /// @notice Emitted when an operator set is created by an AVS. event OperatorSetCreated(OperatorSet operatorSet); @@ -100,6 +115,15 @@ interface IAllocationManager is ISignatureUtils { * */ + /** + * @notice Called by operators to set their allocation delay. + * @param delay the allocation delay in seconds + * @dev msg.sender is assumed to be the operator + */ + function setAllocationDelay( + uint32 delay + ) external; + /** * @notice Modifies the propotions of slashable stake allocated to a list of operatorSets for a set of strategies * @param operator address to modify allocations for @@ -163,6 +187,15 @@ interface IAllocationManager is ISignatureUtils { * */ + /** + * @notice Returns the allocation delay of an operator + * @param operator The operator to get the allocation delay for + * @dev Defaults to `DEFAULT_ALLOCATION_DELAY` if none is set + */ + function allocationDelay( + address operator + ) external view returns (bool isSet, uint32 delay); + /** * @notice Get the allocatable magnitude for an operator and strategy based on number of pending deallocations * that could be completed at the same time. This is the sum of freeMagnitude and the sum of all pending completable deallocations. diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index bfe9035c7..a3ba8c136 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -77,16 +77,6 @@ interface IDelegationManager is ISignatureUtils { uint32 stakerOptOutWindowBlocks; } - /** - * @notice struct used to store the allocation delay for an operator - * @param isSet whether the allocation delay is set. Can only be configured one time for each operator - * @param allocationDelay the delay in seconds for the operator's allocations - */ - struct AllocationDelayDetails { - bool isSet; - uint32 allocationDelay; - } - /** * @notice Abstract struct used in calculating an EIP712 signature for a staker to approve that they (the staker themselves) delegate to a specific operator. * @dev Used in computing the `STAKER_DELEGATION_TYPEHASH` and as a reference in the computation of the stakerDigestHash in the `delegateToBySignature` function. @@ -193,7 +183,6 @@ interface IDelegationManager is ISignatureUtils { /** * @notice Registers the caller as an operator in EigenLayer. * @param registeringOperatorDetails is the `OperatorDetails` for the operator. - * @param allocationDelay is a one-time configurable delay for the operator when performing slashable magnitude allocations. * @param metadataURI is a URI for the operator's metadata, i.e. a link providing more details on the operator. * * @dev Once an operator is registered, they cannot 'deregister' as an operator, and they will forever be considered "delegated to themself". @@ -201,19 +190,9 @@ interface IDelegationManager is ISignatureUtils { */ function registerAsOperator( OperatorDetails calldata registeringOperatorDetails, - uint32 allocationDelay, string calldata metadataURI ) external; - /** - * @notice Called by operators to set their allocation delay one time. Cannot be updated - * after being set. This delay is required to be set for an operator to be able to allocate slashable magnitudes. - * @param delay the allocation delay in seconds - */ - function initializeAllocationDelay( - uint32 delay - ) external; - /** * @notice Updates an operator's stored `OperatorDetails`. * @param newOperatorDetails is the updated `OperatorDetails` for the operator, to replace their current OperatorDetails`. @@ -385,14 +364,6 @@ interface IDelegationManager is ISignatureUtils { address operator ) external view returns (OperatorDetails memory); - /** - * @notice Returns the AllocationDelayDetails struct associated with an `operator` - * @dev If the operator has not set an allocation delay, then the `isSet` field will be `false`. - */ - function operatorAllocationDelay( - address operator - ) external view returns (AllocationDelayDetails memory); - /** * @notice Returns the delegationApprover account for an operator */ diff --git a/src/contracts/interfaces/IStrategyFactory.sol b/src/contracts/interfaces/IStrategyFactory.sol index 27a448d65..75d7e349a 100644 --- a/src/contracts/interfaces/IStrategyFactory.sol +++ b/src/contracts/interfaces/IStrategyFactory.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; +pragma solidity ^0.8.27; import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/src/contracts/libraries/SlashingConstants.sol b/src/contracts/libraries/SlashingConstants.sol new file mode 100644 index 000000000..2c61942e3 --- /dev/null +++ b/src/contracts/libraries/SlashingConstants.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "../interfaces/IAVSDirectory.sol"; + +library SlashingConstants { + /// @dev The initial total magnitude for an operator + uint64 public constant INITIAL_TOTAL_MAGNITUDE = 1e18; + + /// @notice that stakerScalingFactor and totalMagnitude have initial default values to 1e18 as "1" + /// to preserve precision with uint256 math. We use `PRECISION_FACTOR` where these variables are used + /// and divide to represent as 1 + uint256 public constant PRECISION_FACTOR = 1e18; + uint256 public constant PRECISION_FACTOR_SQUARED = 1e36; + + /// @dev Delay before deallocations are completable and can be added back into freeMagnitude + /// This is also the same delay for withdrawals to be completable + uint32 public constant DEALLOCATION_DELAY = 17.5 days; +} diff --git a/src/test/integration/IntegrationDeployer.t.sol b/src/test/integration/IntegrationDeployer.t.sol index b9bcfe9c8..8703908b5 100644 --- a/src/test/integration/IntegrationDeployer.t.sol +++ b/src/test/integration/IntegrationDeployer.t.sol @@ -264,7 +264,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { allocationManager, MIN_WITHDRAWAL_DELAY ); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( ethPOSDeposit, @@ -414,7 +414,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { allocationManager, MIN_WITHDRAWAL_DELAY ); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( ethPOSDeposit, @@ -515,7 +515,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { allocationManager, MIN_WITHDRAWAL_DELAY ); - strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher); + strategyManagerImplementation = new StrategyManager(delegationManager, eigenPodManager, slasher, avsDirectory); slasherImplementation = new Slasher(strategyManager, delegationManager); eigenPodManagerImplementation = new EigenPodManager( ethPOSDeposit, diff --git a/src/test/integration/users/User.t.sol b/src/test/integration/users/User.t.sol index dacfad209..2ac2325d5 100644 --- a/src/test/integration/users/User.t.sol +++ b/src/test/integration/users/User.t.sol @@ -85,7 +85,7 @@ contract User is PrintUtils { stakerOptOutWindowBlocks: 0 }); - delegationManager.registerAsOperator(details, 0, "metadata"); + delegationManager.registerAsOperator(details, "metadata"); } /// @dev Delegate to the operator without a signature diff --git a/src/test/mocks/DelegationManagerMock.sol b/src/test/mocks/DelegationManagerMock.sol index 7cf65f706..77e15625e 100644 --- a/src/test/mocks/DelegationManagerMock.sol +++ b/src/test/mocks/DelegationManagerMock.sol @@ -23,7 +23,6 @@ contract DelegationManagerMock is IDelegationManager, Test { function registerAsOperator( OperatorDetails calldata /*registeringOperatorDetails*/, - uint32 /*allocationDelay*/, string calldata /*metadataURI*/ ) external pure {} @@ -70,8 +69,6 @@ contract DelegationManagerMock is IDelegationManager, Test { return returnValue; } - function operatorAllocationDelay(address operator) external view returns (AllocationDelayDetails memory) {} - function delegationApprover(address operator) external pure returns (address) { return operator; } diff --git a/src/test/unit/AVSDirectoryUnit.t.sol b/src/test/unit/AVSDirectoryUnit.t.sol index 5a3b79e62..c185d08ef 100644 --- a/src/test/unit/AVSDirectoryUnit.t.sol +++ b/src/test/unit/AVSDirectoryUnit.t.sol @@ -45,6 +45,7 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { // deallocation delay in AllocationManager uint32 DEALLOCATION_DELAY = 17.5 days; + uint32 ALLOCATION_DELAY_CONFIGURATION_DELAY = 21 days; // withdrawal delay in DelegationManager uint32 MIN_WITHDRAWAL_DELAY = 17.5 days; uint256 minWithdrawalDelayBlocks = 216_000; @@ -76,7 +77,7 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) ); - allocationManagerImplementation = new AllocationManager(delegationManager, avsDirectory, DEALLOCATION_DELAY); + allocationManagerImplementation = new AllocationManager(delegationManager, avsDirectory, DEALLOCATION_DELAY, ALLOCATION_DELAY_CONFIGURATION_DELAY); delegationManagerImplementation = new DelegationManager( strategyManagerMock, @@ -194,7 +195,7 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { ) internal filterFuzzedAddressInputs(operator) { _filterOperatorDetails(operator, operatorDetails); cheats.prank(operator); - delegationManager.registerAsOperator(operatorDetails, 0,metadataURI); + delegationManager.registerAsOperator(operatorDetails, metadataURI); } function _filterOperatorDetails( diff --git a/src/test/unit/StrategyManagerUnit.t.sol b/src/test/unit/StrategyManagerUnit.t.sol index 3fe5b793b..a89a6012a 100644 --- a/src/test/unit/StrategyManagerUnit.t.sol +++ b/src/test/unit/StrategyManagerUnit.t.sol @@ -37,7 +37,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv function setUp() public override { EigenLayerUnitTestSetup.setUp(); - strategyManagerImplementation = new StrategyManager(delegationManagerMock, eigenPodManagerMock, slasherMock); + strategyManagerImplementation = new StrategyManager(delegationManagerMock, eigenPodManagerMock, slasherMock, avsDirectoryMock); strategyManager = StrategyManager( address( new TransparentUpgradeableProxy( From b87188640d256b37570a8c28c6e4601f302712fa Mon Sep 17 00:00:00 2001 From: "clandestine.eth" <96172957+0xClandestine@users.noreply.github.com> Date: Mon, 16 Sep 2024 20:07:31 -0400 Subject: [PATCH 34/47] feat: add `registerAsOperator` delay config back (#752) * feat: add `registerAsOperator` delay config back * chore: forge fmt src/contracts * Update DelegationManager.sol --- src/contracts/core/AllocationManager.sol | 45 +++++++++++++------ src/contracts/core/DelegationManager.sol | 3 ++ .../interfaces/IAllocationManager.sol | 10 +++++ .../interfaces/IDelegationManager.sol | 2 + src/test/integration/users/User.t.sol | 2 +- src/test/mocks/DelegationManagerMock.sol | 1 + src/test/unit/AVSDirectoryUnit.t.sol | 2 +- 7 files changed, 50 insertions(+), 15 deletions(-) diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index 71849a60a..d39ef3062 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -66,6 +66,17 @@ contract AllocationManager is _transferOwnership(initialOwner); } + /** + * @notice Called by the delagation manager to set delay when operators register. + * @param operator The operator to set the delay on behalf of. + * @param delay The allocation delay in seconds. + * @dev msg.sender is assumed to be the delegation manager. + */ + function setAllocationDelay(address operator, uint32 delay) external { + require(msg.sender == address(delegation), OnlyDelegationManager()); + _setAllocationDelay(operator, delay); + } + /** * @notice Called by operators to set their allocation delay. * @param delay the allocation delay in seconds @@ -75,19 +86,7 @@ contract AllocationManager is uint32 delay ) external { require(delegation.isOperator(msg.sender), OperatorNotRegistered()); - - AllocationDelayInfo storage delayInfo = _allocationDelayInfo[msg.sender]; - - bool pendingInEffect = delayInfo.pendingDelay != 0 && block.timestamp >= delayInfo.pendingDelayEffectTimestamp; - - if (pendingInEffect) { - delayInfo.delay = delayInfo.pendingDelay; - } - - delayInfo.pendingDelay = delay; - delayInfo.pendingDelayEffectTimestamp = uint32(block.timestamp + ALLOCATION_DELAY_CONFIGURATION_DELAY); - - emit AllocationDelaySet(msg.sender, delay); + _setAllocationDelay(msg.sender, delay); } /** @@ -257,6 +256,26 @@ contract AllocationManager is operatorSaltIsSpent[msg.sender][salt] = true; } + /** + * @notice Helper for setting an operators allocation delay. + * @param operator The operator to set the delay on behalf of. + * @param delay The allocation delay in seconds. + */ + function _setAllocationDelay(address operator, uint32 delay) internal { + AllocationDelayInfo storage delayInfo = _allocationDelayInfo[operator]; + + bool pendingInEffect = delayInfo.pendingDelay != 0 && block.timestamp >= delayInfo.pendingDelayEffectTimestamp; + + if (pendingInEffect) { + delayInfo.delay = delayInfo.pendingDelay; + } + + delayInfo.pendingDelay = delay; + delayInfo.pendingDelayEffectTimestamp = uint32(block.timestamp + ALLOCATION_DELAY_CONFIGURATION_DELAY); + + emit AllocationDelaySet(operator, delay); + } + /** * @notice For a single strategy, update freeMagnitude by adding completable pending free magnitudes * @param operator address to update freeMagnitude for diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 1b6fe1f43..b96132c37 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -110,6 +110,7 @@ contract DelegationManager is /** * @notice Registers the caller as an operator in EigenLayer. * @param registeringOperatorDetails is the `OperatorDetails` for the operator. + * @param allocationDelay The delay before allocations take effect. * @param metadataURI is a URI for the operator's metadata, i.e. a link providing more details on the operator. * * @dev Once an operator is registered, they cannot 'deregister' as an operator, and they will forever be considered "delegated to themself". @@ -118,9 +119,11 @@ contract DelegationManager is */ function registerAsOperator( OperatorDetails calldata registeringOperatorDetails, + uint32 allocationDelay, string calldata metadataURI ) external { require(!isDelegated(msg.sender), ActivelyDelegated()); + allocationManager.setAllocationDelay(msg.sender, allocationDelay); _setOperatorDetails(msg.sender, registeringOperatorDetails); SignatureWithExpiry memory emptySignatureAndExpiry; // delegate from the operator to themselves diff --git a/src/contracts/interfaces/IAllocationManager.sol b/src/contracts/interfaces/IAllocationManager.sol index 1a20f922d..8aace1e3e 100644 --- a/src/contracts/interfaces/IAllocationManager.sol +++ b/src/contracts/interfaces/IAllocationManager.sol @@ -18,6 +18,8 @@ interface IAllocationManager is ISignatureUtils { error InvalidOperatorSet(); /// @dev Thrown when an invalid operator is provided. error InvalidOperator(); + /// @dev Thrown when caller is not the delegation manager. + error OnlyDelegationManager(); /// @dev Thrown when provided operator sets are not in ascending order. error OperatorSetsNotInAscendingOrder(); /// @dev Thrown when an allocation is attempted for a given operator when they have pending allocations or deallocations. @@ -115,6 +117,14 @@ interface IAllocationManager is ISignatureUtils { * */ + /** + * @notice Called by the delagation manager to set delay when operators register. + * @param operator The operator to set the delay on behalf of. + * @param delay The allocation delay in seconds. + * @dev msg.sender is assumed to be the delegation manager. + */ + function setAllocationDelay(address operator, uint32 delay) external; + /** * @notice Called by operators to set their allocation delay. * @param delay the allocation delay in seconds diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index a3ba8c136..b4665e30c 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -183,6 +183,7 @@ interface IDelegationManager is ISignatureUtils { /** * @notice Registers the caller as an operator in EigenLayer. * @param registeringOperatorDetails is the `OperatorDetails` for the operator. + * @param allocationDelay The delay before allocations take effect. * @param metadataURI is a URI for the operator's metadata, i.e. a link providing more details on the operator. * * @dev Once an operator is registered, they cannot 'deregister' as an operator, and they will forever be considered "delegated to themself". @@ -190,6 +191,7 @@ interface IDelegationManager is ISignatureUtils { */ function registerAsOperator( OperatorDetails calldata registeringOperatorDetails, + uint32 allocationDelay, string calldata metadataURI ) external; diff --git a/src/test/integration/users/User.t.sol b/src/test/integration/users/User.t.sol index 2ac2325d5..dacfad209 100644 --- a/src/test/integration/users/User.t.sol +++ b/src/test/integration/users/User.t.sol @@ -85,7 +85,7 @@ contract User is PrintUtils { stakerOptOutWindowBlocks: 0 }); - delegationManager.registerAsOperator(details, "metadata"); + delegationManager.registerAsOperator(details, 0, "metadata"); } /// @dev Delegate to the operator without a signature diff --git a/src/test/mocks/DelegationManagerMock.sol b/src/test/mocks/DelegationManagerMock.sol index 77e15625e..9063f70cf 100644 --- a/src/test/mocks/DelegationManagerMock.sol +++ b/src/test/mocks/DelegationManagerMock.sol @@ -23,6 +23,7 @@ contract DelegationManagerMock is IDelegationManager, Test { function registerAsOperator( OperatorDetails calldata /*registeringOperatorDetails*/, + uint32, string calldata /*metadataURI*/ ) external pure {} diff --git a/src/test/unit/AVSDirectoryUnit.t.sol b/src/test/unit/AVSDirectoryUnit.t.sol index c185d08ef..547348ac4 100644 --- a/src/test/unit/AVSDirectoryUnit.t.sol +++ b/src/test/unit/AVSDirectoryUnit.t.sol @@ -195,7 +195,7 @@ contract AVSDirectoryUnitTests is EigenLayerUnitTestSetup, IAVSDirectoryEvents { ) internal filterFuzzedAddressInputs(operator) { _filterOperatorDetails(operator, operatorDetails); cheats.prank(operator); - delegationManager.registerAsOperator(operatorDetails, metadataURI); + delegationManager.registerAsOperator(operatorDetails, 0, metadataURI); } function _filterOperatorDetails( From f82bc020ca0b2aa11319a437d330e4806ce73a34 Mon Sep 17 00:00:00 2001 From: "clandestine.eth" <96172957+0xClandestine@users.noreply.github.com> Date: Tue, 17 Sep 2024 12:27:44 -0400 Subject: [PATCH 35/47] chore: make storage-report --- docs/storage-report/AVSDirectory.md | 37 +++++++------ docs/storage-report/AVSDirectoryStorage.md | 17 +++--- docs/storage-report/AllocationManager.md | 21 ++++++++ .../AllocationManagerStorage.md | 11 ++++ docs/storage-report/DelegationManager.md | 49 ++++++++--------- .../DelegationManagerStorage.md | 29 +++++----- docs/storage-report/RewardsCoordinator.md | 54 ++++++++++--------- .../RewardsCoordinatorStorage.md | 34 ++++++------ docs/storage-report/StrategyManager.md | 2 +- docs/storage-report/StrategyManagerStorage.md | 2 +- 10 files changed, 152 insertions(+), 104 deletions(-) create mode 100644 docs/storage-report/AllocationManager.md create mode 100644 docs/storage-report/AllocationManagerStorage.md diff --git a/docs/storage-report/AVSDirectory.md b/docs/storage-report/AVSDirectory.md index cf36169ac..2abae63dd 100644 --- a/docs/storage-report/AVSDirectory.md +++ b/docs/storage-report/AVSDirectory.md @@ -1,16 +1,21 @@ -| Name | Type | Slot | Offset | Bytes | Contract | -|---------------------|------------------------------------------------------------------------------------------|------|--------|-------|--------------------------------------------------| -| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| _initializing | bool | 0 | 1 | 1 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| _owner | address | 51 | 0 | 20 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| _DOMAIN_SEPARATOR | bytes32 | 151 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| avsOperatorStatus | mapping(address => mapping(address => enum IAVSDirectory.OperatorAVSRegistrationStatus)) | 152 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 153 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| __gap | uint256[47] | 154 | 0 | 1504 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| _status | uint256 | 201 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | -| __gap | uint256[49] | 202 | 0 | 1568 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| Name | Type | Slot | Offset | Bytes | Contract | +|-----------------------|---------------------------------------------------------------------------------------------------------------|------|--------|-------|--------------------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| _initializing | bool | 0 | 1 | 1 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| _owner | address | 51 | 0 | 20 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| _DOMAIN_SEPARATOR | bytes32 | 151 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| avsOperatorStatus | mapping(address => mapping(address => enum IAVSDirectory.OperatorAVSRegistrationStatus)) | 152 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 153 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| isOperatorSetAVS | mapping(address => bool) | 154 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| isOperatorSet | mapping(address => mapping(uint32 => bool)) | 155 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| _operatorSetsMemberOf | mapping(address => struct EnumerableSet.Bytes32Set) | 156 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| _operatorSetMembers | mapping(bytes32 => struct EnumerableSet.AddressSet) | 157 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| operatorSetStatus | mapping(address => mapping(address => mapping(uint32 => struct IAVSDirectory.OperatorSetRegistrationStatus))) | 158 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| __gap | uint256[42] | 159 | 0 | 1344 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| _status | uint256 | 201 | 0 | 32 | src/contracts/core/AVSDirectory.sol:AVSDirectory | +| __gap | uint256[49] | 202 | 0 | 1568 | src/contracts/core/AVSDirectory.sol:AVSDirectory | diff --git a/docs/storage-report/AVSDirectoryStorage.md b/docs/storage-report/AVSDirectoryStorage.md index a337342d0..a35572ea5 100644 --- a/docs/storage-report/AVSDirectoryStorage.md +++ b/docs/storage-report/AVSDirectoryStorage.md @@ -1,6 +1,11 @@ -| Name | Type | Slot | Offset | Bytes | Contract | -|---------------------|------------------------------------------------------------------------------------------|------|--------|-------|----------------------------------------------------------------| -| _DOMAIN_SEPARATOR | bytes32 | 0 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | -| avsOperatorStatus | mapping(address => mapping(address => enum IAVSDirectory.OperatorAVSRegistrationStatus)) | 1 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | -| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 2 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | -| __gap | uint256[47] | 3 | 0 | 1504 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | +| Name | Type | Slot | Offset | Bytes | Contract | +|-----------------------|---------------------------------------------------------------------------------------------------------------|------|--------|-------|----------------------------------------------------------------| +| _DOMAIN_SEPARATOR | bytes32 | 0 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | +| avsOperatorStatus | mapping(address => mapping(address => enum IAVSDirectory.OperatorAVSRegistrationStatus)) | 1 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | +| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 2 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | +| isOperatorSetAVS | mapping(address => bool) | 3 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | +| isOperatorSet | mapping(address => mapping(uint32 => bool)) | 4 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | +| _operatorSetsMemberOf | mapping(address => struct EnumerableSet.Bytes32Set) | 5 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | +| _operatorSetMembers | mapping(bytes32 => struct EnumerableSet.AddressSet) | 6 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | +| operatorSetStatus | mapping(address => mapping(address => mapping(uint32 => struct IAVSDirectory.OperatorSetRegistrationStatus))) | 7 | 0 | 32 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | +| __gap | uint256[42] | 8 | 0 | 1344 | src/contracts/core/AVSDirectoryStorage.sol:AVSDirectoryStorage | diff --git a/docs/storage-report/AllocationManager.md b/docs/storage-report/AllocationManager.md new file mode 100644 index 000000000..d3182dc95 --- /dev/null +++ b/docs/storage-report/AllocationManager.md @@ -0,0 +1,21 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------------------|-----------------------------------------------------------------------------------------------------|------|--------|-------|------------------------------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/AllocationManager.sol:AllocationManager | +| _initializing | bool | 0 | 1 | 1 | src/contracts/core/AllocationManager.sol:AllocationManager | +| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/AllocationManager.sol:AllocationManager | +| _owner | address | 51 | 0 | 20 | src/contracts/core/AllocationManager.sol:AllocationManager | +| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/AllocationManager.sol:AllocationManager | +| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/AllocationManager.sol:AllocationManager | +| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager | +| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/AllocationManager.sol:AllocationManager | +| _DOMAIN_SEPARATOR | bytes32 | 151 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager | +| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 152 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager | +| _totalMagnitudeUpdate | mapping(address => mapping(contract IStrategy => struct Snapshots.History)) | 153 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager | +| _magnitudeUpdate | mapping(address => mapping(contract IStrategy => mapping(bytes32 => struct Snapshots.History))) | 154 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager | +| operatorMagnitudeInfo | mapping(address => mapping(contract IStrategy => struct IAllocationManager.OperatorMagnitudeInfo)) | 155 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager | +| _pendingFreeMagnitude | mapping(address => mapping(contract IStrategy => struct IAllocationManager.PendingFreeMagnitude[])) | 156 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager | +| _queuedDeallocationIndices | mapping(address => mapping(contract IStrategy => mapping(bytes32 => uint256[]))) | 157 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager | +| _allocationDelayInfo | mapping(address => struct IAllocationManager.AllocationDelayInfo) | 158 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager | +| __gap | uint256[42] | 159 | 0 | 1344 | src/contracts/core/AllocationManager.sol:AllocationManager | +| _status | uint256 | 201 | 0 | 32 | src/contracts/core/AllocationManager.sol:AllocationManager | +| __gap | uint256[49] | 202 | 0 | 1568 | src/contracts/core/AllocationManager.sol:AllocationManager | diff --git a/docs/storage-report/AllocationManagerStorage.md b/docs/storage-report/AllocationManagerStorage.md new file mode 100644 index 000000000..52ad78099 --- /dev/null +++ b/docs/storage-report/AllocationManagerStorage.md @@ -0,0 +1,11 @@ +| Name | Type | Slot | Offset | Bytes | Contract | +|----------------------------|-----------------------------------------------------------------------------------------------------|------|--------|-------|--------------------------------------------------------------------------| +| _DOMAIN_SEPARATOR | bytes32 | 0 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage | +| operatorSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 1 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage | +| _totalMagnitudeUpdate | mapping(address => mapping(contract IStrategy => struct Snapshots.History)) | 2 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage | +| _magnitudeUpdate | mapping(address => mapping(contract IStrategy => mapping(bytes32 => struct Snapshots.History))) | 3 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage | +| operatorMagnitudeInfo | mapping(address => mapping(contract IStrategy => struct IAllocationManager.OperatorMagnitudeInfo)) | 4 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage | +| _pendingFreeMagnitude | mapping(address => mapping(contract IStrategy => struct IAllocationManager.PendingFreeMagnitude[])) | 5 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage | +| _queuedDeallocationIndices | mapping(address => mapping(contract IStrategy => mapping(bytes32 => uint256[]))) | 6 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage | +| _allocationDelayInfo | mapping(address => struct IAllocationManager.AllocationDelayInfo) | 7 | 0 | 32 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage | +| __gap | uint256[42] | 8 | 0 | 1344 | src/contracts/core/AllocationManagerStorage.sol:AllocationManagerStorage | diff --git a/docs/storage-report/DelegationManager.md b/docs/storage-report/DelegationManager.md index 61594f32a..c0f76e259 100644 --- a/docs/storage-report/DelegationManager.md +++ b/docs/storage-report/DelegationManager.md @@ -1,24 +1,25 @@ -| Name | Type | Slot | Offset | Bytes | Contract | -|-------------------------------|---------------------------------------------------------------|------|--------|-------|------------------------------------------------------------| -| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/DelegationManager.sol:DelegationManager | -| _initializing | bool | 0 | 1 | 1 | src/contracts/core/DelegationManager.sol:DelegationManager | -| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/DelegationManager.sol:DelegationManager | -| _owner | address | 51 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager | -| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/DelegationManager.sol:DelegationManager | -| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager | -| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/DelegationManager.sol:DelegationManager | -| _DOMAIN_SEPARATOR | bytes32 | 151 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| operatorShares | mapping(address => mapping(contract IStrategy => uint256)) | 152 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| _operatorDetails | mapping(address => struct IDelegationManager.OperatorDetails) | 153 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| delegatedTo | mapping(address => address) | 154 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| stakerNonce | mapping(address => uint256) | 155 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| delegationApproverSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 156 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| minWithdrawalDelayBlocks | uint256 | 157 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| pendingWithdrawals | mapping(bytes32 => bool) | 158 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| cumulativeWithdrawalsQueued | mapping(address => uint256) | 159 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| __deprecated_stakeRegistry | address | 160 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager | -| strategyWithdrawalDelayBlocks | mapping(contract IStrategy => uint256) | 161 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| __gap | uint256[39] | 162 | 0 | 1248 | src/contracts/core/DelegationManager.sol:DelegationManager | -| _status | uint256 | 201 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | -| __gap | uint256[49] | 202 | 0 | 1568 | src/contracts/core/DelegationManager.sol:DelegationManager | +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------------------------------|---------------------------------------------------------------|------|--------|-------|------------------------------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/DelegationManager.sol:DelegationManager | +| _initializing | bool | 0 | 1 | 1 | src/contracts/core/DelegationManager.sol:DelegationManager | +| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/DelegationManager.sol:DelegationManager | +| _owner | address | 51 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager | +| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/DelegationManager.sol:DelegationManager | +| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager | +| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/DelegationManager.sol:DelegationManager | +| _DOMAIN_SEPARATOR | bytes32 | 151 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| operatorScaledShares | mapping(address => mapping(contract IStrategy => uint256)) | 152 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| _operatorDetails | mapping(address => struct IDelegationManager.OperatorDetails) | 153 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| delegatedTo | mapping(address => address) | 154 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| stakerNonce | mapping(address => uint256) | 155 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| delegationApproverSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 156 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| __deprecated_minWithdrawalDelayBlocks | uint256 | 157 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| pendingWithdrawals | mapping(bytes32 => bool) | 158 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| cumulativeWithdrawalsQueued | mapping(address => uint256) | 159 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| __deprecated_stakeRegistry | address | 160 | 0 | 20 | src/contracts/core/DelegationManager.sol:DelegationManager | +| __deprecated_strategyWithdrawalDelayBlocks | mapping(contract IStrategy => uint256) | 161 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| stakerScalingFactors | mapping(address => mapping(contract IStrategy => uint256)) | 162 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| __gap | uint256[38] | 163 | 0 | 1216 | src/contracts/core/DelegationManager.sol:DelegationManager | +| _status | uint256 | 201 | 0 | 32 | src/contracts/core/DelegationManager.sol:DelegationManager | +| __gap | uint256[49] | 202 | 0 | 1568 | src/contracts/core/DelegationManager.sol:DelegationManager | diff --git a/docs/storage-report/DelegationManagerStorage.md b/docs/storage-report/DelegationManagerStorage.md index 2ae1eb04b..6f31d6c99 100644 --- a/docs/storage-report/DelegationManagerStorage.md +++ b/docs/storage-report/DelegationManagerStorage.md @@ -1,14 +1,15 @@ -| Name | Type | Slot | Offset | Bytes | Contract | -|-------------------------------|---------------------------------------------------------------|------|--------|-------|--------------------------------------------------------------------------| -| _DOMAIN_SEPARATOR | bytes32 | 0 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | -| operatorShares | mapping(address => mapping(contract IStrategy => uint256)) | 1 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | -| _operatorDetails | mapping(address => struct IDelegationManager.OperatorDetails) | 2 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | -| delegatedTo | mapping(address => address) | 3 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | -| stakerNonce | mapping(address => uint256) | 4 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | -| delegationApproverSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 5 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | -| minWithdrawalDelayBlocks | uint256 | 6 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | -| pendingWithdrawals | mapping(bytes32 => bool) | 7 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | -| cumulativeWithdrawalsQueued | mapping(address => uint256) | 8 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | -| __deprecated_stakeRegistry | address | 9 | 0 | 20 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | -| strategyWithdrawalDelayBlocks | mapping(contract IStrategy => uint256) | 10 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | -| __gap | uint256[39] | 11 | 0 | 1248 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------------------------------|---------------------------------------------------------------|------|--------|-------|--------------------------------------------------------------------------| +| _DOMAIN_SEPARATOR | bytes32 | 0 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| operatorScaledShares | mapping(address => mapping(contract IStrategy => uint256)) | 1 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| _operatorDetails | mapping(address => struct IDelegationManager.OperatorDetails) | 2 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| delegatedTo | mapping(address => address) | 3 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| stakerNonce | mapping(address => uint256) | 4 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| delegationApproverSaltIsSpent | mapping(address => mapping(bytes32 => bool)) | 5 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| __deprecated_minWithdrawalDelayBlocks | uint256 | 6 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| pendingWithdrawals | mapping(bytes32 => bool) | 7 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| cumulativeWithdrawalsQueued | mapping(address => uint256) | 8 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| __deprecated_stakeRegistry | address | 9 | 0 | 20 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| __deprecated_strategyWithdrawalDelayBlocks | mapping(contract IStrategy => uint256) | 10 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| stakerScalingFactors | mapping(address => mapping(contract IStrategy => uint256)) | 11 | 0 | 32 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | +| __gap | uint256[38] | 12 | 0 | 1216 | src/contracts/core/DelegationManagerStorage.sol:DelegationManagerStorage | diff --git a/docs/storage-report/RewardsCoordinator.md b/docs/storage-report/RewardsCoordinator.md index c3ac38649..726906890 100644 --- a/docs/storage-report/RewardsCoordinator.md +++ b/docs/storage-report/RewardsCoordinator.md @@ -1,26 +1,28 @@ -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------------------------|---------------------------------------------------------|------|--------|-------|--------------------------------------------------------------| -| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| _initializing | bool | 0 | 1 | 1 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| _owner | address | 51 | 0 | 20 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| _status | uint256 | 151 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| __gap | uint256[49] | 152 | 0 | 1568 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| _DOMAIN_SEPARATOR | bytes32 | 201 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| _distributionRoots | struct IRewardsCoordinator.DistributionRoot[] | 202 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| rewardsUpdater | address | 203 | 0 | 20 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| activationDelay | uint32 | 203 | 20 | 4 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| currRewardsCalculationEndTimestamp | uint32 | 203 | 24 | 4 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| globalOperatorCommissionBips | uint16 | 203 | 28 | 2 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| claimerFor | mapping(address => address) | 204 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| cumulativeClaimed | mapping(address => mapping(contract IERC20 => uint256)) | 205 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| submissionNonce | mapping(address => uint256) | 206 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| isAVSRewardsSubmissionHash | mapping(address => mapping(bytes32 => bool)) | 207 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| isRewardsSubmissionForAllHash | mapping(address => mapping(bytes32 => bool)) | 208 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| isRewardsForAllSubmitter | mapping(address => bool) | 209 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| isRewardsSubmissionForAllEarnersHash | mapping(address => mapping(bytes32 => bool)) | 210 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | -| __gap | uint256[39] | 211 | 0 | 1248 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|--------|-------|--------------------------------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| _initializing | bool | 0 | 1 | 1 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| __gap | uint256[50] | 1 | 0 | 1600 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| _owner | address | 51 | 0 | 20 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| __gap | uint256[49] | 52 | 0 | 1568 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| pauserRegistry | contract IPauserRegistry | 101 | 0 | 20 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| _paused | uint256 | 102 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| __gap | uint256[48] | 103 | 0 | 1536 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| _status | uint256 | 151 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| __gap | uint256[49] | 152 | 0 | 1568 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| _DOMAIN_SEPARATOR | bytes32 | 201 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| _distributionRoots | struct IRewardsCoordinator.DistributionRoot[] | 202 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| rewardsUpdater | address | 203 | 0 | 20 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| activationDelay | uint32 | 203 | 20 | 4 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| currRewardsCalculationEndTimestamp | uint32 | 203 | 24 | 4 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| globalOperatorCommissionBips | uint16 | 203 | 28 | 2 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| claimerFor | mapping(address => address) | 204 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| cumulativeClaimed | mapping(address => mapping(contract IERC20 => uint256)) | 205 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| submissionNonce | mapping(address => uint256) | 206 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| isAVSRewardsSubmissionHash | mapping(address => mapping(bytes32 => bool)) | 207 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| isRewardsSubmissionForAllHash | mapping(address => mapping(bytes32 => bool)) | 208 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| isRewardsForAllSubmitter | mapping(address => bool) | 209 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| isRewardsSubmissionForAllEarnersHash | mapping(address => mapping(bytes32 => bool)) | 210 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| isOperatorSetRewardsSubmissionHash | mapping(address => mapping(bytes32 => bool)) | 211 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| operatorCommissionUpdates | mapping(address => mapping(address => mapping(uint32 => mapping(enum IRewardsCoordinator.RewardType => struct IRewardsCoordinator.OperatorCommissionUpdate[])))) | 212 | 0 | 32 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | +| __gap | uint256[37] | 213 | 0 | 1184 | src/contracts/core/RewardsCoordinator.sol:RewardsCoordinator | diff --git a/docs/storage-report/RewardsCoordinatorStorage.md b/docs/storage-report/RewardsCoordinatorStorage.md index e5f8f26bc..36571b647 100644 --- a/docs/storage-report/RewardsCoordinatorStorage.md +++ b/docs/storage-report/RewardsCoordinatorStorage.md @@ -1,16 +1,18 @@ -| Name | Type | Slot | Offset | Bytes | Contract | -|--------------------------------------|---------------------------------------------------------|------|--------|-------|----------------------------------------------------------------------------| -| _DOMAIN_SEPARATOR | bytes32 | 0 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| _distributionRoots | struct IRewardsCoordinator.DistributionRoot[] | 1 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| rewardsUpdater | address | 2 | 0 | 20 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| activationDelay | uint32 | 2 | 20 | 4 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| currRewardsCalculationEndTimestamp | uint32 | 2 | 24 | 4 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| globalOperatorCommissionBips | uint16 | 2 | 28 | 2 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| claimerFor | mapping(address => address) | 3 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| cumulativeClaimed | mapping(address => mapping(contract IERC20 => uint256)) | 4 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| submissionNonce | mapping(address => uint256) | 5 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| isAVSRewardsSubmissionHash | mapping(address => mapping(bytes32 => bool)) | 6 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| isRewardsSubmissionForAllHash | mapping(address => mapping(bytes32 => bool)) | 7 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| isRewardsForAllSubmitter | mapping(address => bool) | 8 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| isRewardsSubmissionForAllEarnersHash | mapping(address => mapping(bytes32 => bool)) | 9 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | -| __gap | uint256[39] | 10 | 0 | 1248 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| Name | Type | Slot | Offset | Bytes | Contract | +|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|--------|-------|----------------------------------------------------------------------------| +| _DOMAIN_SEPARATOR | bytes32 | 0 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| _distributionRoots | struct IRewardsCoordinator.DistributionRoot[] | 1 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| rewardsUpdater | address | 2 | 0 | 20 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| activationDelay | uint32 | 2 | 20 | 4 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| currRewardsCalculationEndTimestamp | uint32 | 2 | 24 | 4 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| globalOperatorCommissionBips | uint16 | 2 | 28 | 2 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| claimerFor | mapping(address => address) | 3 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| cumulativeClaimed | mapping(address => mapping(contract IERC20 => uint256)) | 4 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| submissionNonce | mapping(address => uint256) | 5 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| isAVSRewardsSubmissionHash | mapping(address => mapping(bytes32 => bool)) | 6 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| isRewardsSubmissionForAllHash | mapping(address => mapping(bytes32 => bool)) | 7 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| isRewardsForAllSubmitter | mapping(address => bool) | 8 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| isRewardsSubmissionForAllEarnersHash | mapping(address => mapping(bytes32 => bool)) | 9 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| isOperatorSetRewardsSubmissionHash | mapping(address => mapping(bytes32 => bool)) | 10 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| operatorCommissionUpdates | mapping(address => mapping(address => mapping(uint32 => mapping(enum IRewardsCoordinator.RewardType => struct IRewardsCoordinator.OperatorCommissionUpdate[])))) | 11 | 0 | 32 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | +| __gap | uint256[37] | 12 | 0 | 1184 | src/contracts/core/RewardsCoordinatorStorage.sol:RewardsCoordinatorStorage | diff --git a/docs/storage-report/StrategyManager.md b/docs/storage-report/StrategyManager.md index 8f7e5cb4b..2a489f6cb 100644 --- a/docs/storage-report/StrategyManager.md +++ b/docs/storage-report/StrategyManager.md @@ -20,5 +20,5 @@ | __deprecated_numWithdrawalsQueued | mapping(address => uint256) | 208 | 0 | 32 | src/contracts/core/StrategyManager.sol:StrategyManager | | strategyIsWhitelistedForDeposit | mapping(contract IStrategy => bool) | 209 | 0 | 32 | src/contracts/core/StrategyManager.sol:StrategyManager | | beaconChainETHSharesToDecrementOnWithdrawal | mapping(address => uint256) | 210 | 0 | 32 | src/contracts/core/StrategyManager.sol:StrategyManager | -| thirdPartyTransfersForbidden | mapping(contract IStrategy => bool) | 211 | 0 | 32 | src/contracts/core/StrategyManager.sol:StrategyManager | +| __deprecated_thirdPartyTransfersForbidden | mapping(contract IStrategy => bool) | 211 | 0 | 32 | src/contracts/core/StrategyManager.sol:StrategyManager | | __gap | uint256[39] | 212 | 0 | 1248 | src/contracts/core/StrategyManager.sol:StrategyManager | diff --git a/docs/storage-report/StrategyManagerStorage.md b/docs/storage-report/StrategyManagerStorage.md index 701045da7..d5668278d 100644 --- a/docs/storage-report/StrategyManagerStorage.md +++ b/docs/storage-report/StrategyManagerStorage.md @@ -10,5 +10,5 @@ | __deprecated_numWithdrawalsQueued | mapping(address => uint256) | 7 | 0 | 32 | src/contracts/core/StrategyManagerStorage.sol:StrategyManagerStorage | | strategyIsWhitelistedForDeposit | mapping(contract IStrategy => bool) | 8 | 0 | 32 | src/contracts/core/StrategyManagerStorage.sol:StrategyManagerStorage | | beaconChainETHSharesToDecrementOnWithdrawal | mapping(address => uint256) | 9 | 0 | 32 | src/contracts/core/StrategyManagerStorage.sol:StrategyManagerStorage | -| thirdPartyTransfersForbidden | mapping(contract IStrategy => bool) | 10 | 0 | 32 | src/contracts/core/StrategyManagerStorage.sol:StrategyManagerStorage | +| __deprecated_thirdPartyTransfersForbidden | mapping(contract IStrategy => bool) | 10 | 0 | 32 | src/contracts/core/StrategyManagerStorage.sol:StrategyManagerStorage | | __gap | uint256[39] | 11 | 0 | 1248 | src/contracts/core/StrategyManagerStorage.sol:StrategyManagerStorage | From cd892cfa8c961abf6028348209516c976cc830cc Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Tue, 17 Sep 2024 10:46:12 -0700 Subject: [PATCH 36/47] fix: pending dealloc bug (#757) --- .../deploy_from_scratch.anvil.config.json | 4 ++- ...2-upgrade_testnet_rewardsCoordinator.s.sol | 5 ++- src/contracts/core/AllocationManager.sol | 31 ++++++++----------- .../interfaces/IAllocationManager.sol | 5 ++- 4 files changed, 22 insertions(+), 23 deletions(-) diff --git a/script/configs/local/deploy_from_scratch.anvil.config.json b/script/configs/local/deploy_from_scratch.anvil.config.json index 819815a98..ead0a948c 100644 --- a/script/configs/local/deploy_from_scratch.anvil.config.json +++ b/script/configs/local/deploy_from_scratch.anvil.config.json @@ -52,7 +52,9 @@ "OPERATOR_SET_MAX_RETROACTIVE_LENGTH": 2592000 }, "allocationManager": { - "init_paused_status": 0 + "init_paused_status": 0, + "DEALLOCATION_DELAY": 900, + "ALLOCATION_DELAY_CONFIGURATION_DELAY": 1200 }, "ethPOSDepositAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa" } \ No newline at end of file diff --git a/script/deploy/holesky/v042-upgrade_testnet_rewardsCoordinator.s.sol b/script/deploy/holesky/v042-upgrade_testnet_rewardsCoordinator.s.sol index aeed0cc37..2426e5930 100644 --- a/script/deploy/holesky/v042-upgrade_testnet_rewardsCoordinator.s.sol +++ b/script/deploy/holesky/v042-upgrade_testnet_rewardsCoordinator.s.sol @@ -24,11 +24,14 @@ contract Upgrade_Testnet_RewardsCoordinator is Deploy_Test_RewardsCoordinator, T rewardsCoordinatorImplementation = new RewardsCoordinator( delegationManager, strategyManager, + avsDirectory, 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 + REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, + REWARDS_COORDINATOR_OPERATOR_SET_MAX_RETROACTIVE_LENGTH ); vm.stopBroadcast(); diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index d39ef3062..a1a0a1b94 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -736,33 +736,28 @@ contract AllocationManager is * @param operator the operator to get the pending deallocations for * @param strategy the strategy to get the pending deallocations for * @param operatorSets the operatorSets to get the pending deallocations for - * @return pendingMagnitudeDiff the pending difference in deallocations for each operatorSet - * @return timestamps the timestamps for each pending deallocation + * @return pendingMagnitudes the latest pending deallocation */ function getPendingDeallocations( address operator, IStrategy strategy, OperatorSet[] calldata operatorSets - ) external view returns (uint64[] memory, uint32[] memory) { - uint64[] memory pendingMagnitudeDiff = new uint64[](operatorSets.length); - uint32[] memory timestamps = new uint32[](operatorSets.length); + ) external view returns (PendingFreeMagnitude[] memory) { + PendingFreeMagnitude[] memory pendingMagnitudes = new PendingFreeMagnitude[](operatorSets.length); for (uint256 i = 0; i < operatorSets.length; ++i) { - uint256[] memory indices = + uint256[] storage deallocationIndices = _queuedDeallocationIndices[operator][strategy][_encodeOperatorSet(operatorSets[i])]; - uint256 length = indices.length; - uint256 deallocationIndex = indices[length - 1]; - PendingFreeMagnitude memory latestPendingMagnitude = - _pendingFreeMagnitude[operator][strategy][deallocationIndex]; - if (latestPendingMagnitude.completableTimestamp > block.timestamp) { - pendingMagnitudeDiff[i] = latestPendingMagnitude.magnitudeDiff; - timestamps[i] = latestPendingMagnitude.completableTimestamp; - } else { - // There is no pending deallocation, so we set the pending magnitude and timestamp to 0 - pendingMagnitudeDiff[i] = 0; - timestamps[i] = 0; + + if (deallocationIndices.length > 0) { + uint256 deallocationIndex = deallocationIndices[deallocationIndices.length - 1]; + PendingFreeMagnitude storage latestPendingMagnitude = + _pendingFreeMagnitude[operator][strategy][deallocationIndex]; + if (latestPendingMagnitude.completableTimestamp > block.timestamp) { + pendingMagnitudes[i] = latestPendingMagnitude; + } } } - return (pendingMagnitudeDiff, timestamps); + return pendingMagnitudes; } // /** diff --git a/src/contracts/interfaces/IAllocationManager.sol b/src/contracts/interfaces/IAllocationManager.sol index 8aace1e3e..f563aff13 100644 --- a/src/contracts/interfaces/IAllocationManager.sol +++ b/src/contracts/interfaces/IAllocationManager.sol @@ -242,14 +242,13 @@ interface IAllocationManager is ISignatureUtils { * @param operator the operator to get the pending deallocations for * @param strategy the strategy to get the pending deallocations for * @param operatorSets the operatorSets to get the pending deallocations for - * @return pendingMagnitudeDiff the pending difference in deallocations for each operatorSet - * @return timestamps the timestamps for each pending deallocation + * @return pendingMagnitudes the latest pending deallocation */ function getPendingDeallocations( address operator, IStrategy strategy, OperatorSet[] calldata operatorSets - ) external view returns (uint64[] memory, uint32[] memory); + ) external view returns (PendingFreeMagnitude[] memory); /** * @notice operator is slashable by operatorSet if currently registered OR last deregistered within 21 days From caf18145b81303bc501d67fb86af2f332b5f7dfd Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Tue, 17 Sep 2024 16:12:28 -0700 Subject: [PATCH 37/47] fix: fix timestamp check (#761) --- src/contracts/core/AllocationManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index a1a0a1b94..645441c51 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -406,7 +406,7 @@ contract AllocationManager is PendingFreeMagnitude memory pendingFreeMagnitude = _pendingFreeMagnitude[operator][strategy][index]; // If completableTimestamp is greater than completeUntilTimestamp, break - if (pendingFreeMagnitude.completableTimestamp < uint32(block.timestamp)) { + if (pendingFreeMagnitude.completableTimestamp > uint32(block.timestamp)) { ++numQueuedDeallocations; } else { break; From 69f70121a85400cacbba48a430f2d4747714a98e Mon Sep 17 00:00:00 2001 From: Gautham Anant <32277907+gpsanant@users.noreply.github.com> Date: Tue, 17 Sep 2024 22:46:03 -0700 Subject: [PATCH 38/47] actually decrement (#765) --- src/contracts/core/AllocationManager.sol | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index 645441c51..9e66c5eea 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -356,14 +356,22 @@ contract AllocationManager is // Note: MAX_PENDING_UPDATES == 1, so we do not have to decrement any allocations // 1. push PendingFreeMagnitude and respective array index into (op,opSet,Strategy) queued deallocations - uint256 index = _pendingFreeMagnitude[operator][allocation.strategy].length; + uint64 magnitudeToDeallocate = uint64(currentMagnitude) - allocation.magnitudes[i]; + _queuedDeallocationIndices[operator][allocation.strategy][operatorSetKey].push( + _pendingFreeMagnitude[operator][allocation.strategy].length + ); _pendingFreeMagnitude[operator][allocation.strategy].push( PendingFreeMagnitude({ - magnitudeDiff: uint64(currentMagnitude) - allocation.magnitudes[i], + magnitudeDiff: magnitudeToDeallocate, completableTimestamp: deallocationCompletableTimestamp }) ); - _queuedDeallocationIndices[operator][allocation.strategy][operatorSetKey].push(index); + + // 2. decrement allocated magnitude + _magnitudeUpdate[operator][allocation.strategy][operatorSetKey].decrementAtAndFutureSnapshots({ + key: uint32(block.timestamp), + decrementValue: magnitudeToDeallocate + }); } else if (allocation.magnitudes[i] > uint64(currentMagnitude)) { // Newly configured magnitude is greater than current value. // Therefore we handle this as an allocation From bf3bed9b275bcb17bb160d363253d0df857da2bc Mon Sep 17 00:00:00 2001 From: Gautham Anant <32277907+gpsanant@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:44:57 -0700 Subject: [PATCH 39/47] fix _getPendingFreeMagnitude (#769) --- src/contracts/core/AllocationManager.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index 9e66c5eea..773c3ea41 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -451,7 +451,7 @@ contract AllocationManager is PendingFreeMagnitude memory pendingFreeMagnitude = _pendingFreeMagnitude[operator][strategy][nextIndex]; // pendingFreeMagnitude is ordered by completableTimestamp. If we reach one that is not completable yet, then break // loop until completableTimestamp is < block.timestamp - if (pendingFreeMagnitude.completableTimestamp < uint32(block.timestamp)) { + if (uint32(block.timestamp) < pendingFreeMagnitude.completableTimestamp) { break; } @@ -460,7 +460,7 @@ contract AllocationManager is ++nextIndex; ++completed; } - return (freeMagnitudeToAdd, nextIndex); + return (freeMagnitudeToAdd, completed); } /** From 9def3e57300aa797d1eae12898f87717e65cc9fb Mon Sep 17 00:00:00 2001 From: Gautham Anant <32277907+gpsanant@users.noreply.github.com> Date: Wed, 18 Sep 2024 17:26:55 -0700 Subject: [PATCH 40/47] fix_allocationDelay (#770) --- src/contracts/core/AllocationManager.sol | 4 +++- src/contracts/interfaces/IAllocationManager.sol | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index 773c3ea41..f0eceea11 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -262,6 +262,8 @@ contract AllocationManager is * @param delay The allocation delay in seconds. */ function _setAllocationDelay(address operator, uint32 delay) internal { + require(delay != 0, InvalidDelay()); + AllocationDelayInfo storage delayInfo = _allocationDelayInfo[operator]; bool pendingInEffect = delayInfo.pendingDelay != 0 && block.timestamp >= delayInfo.pendingDelayEffectTimestamp; @@ -474,7 +476,7 @@ contract AllocationManager is bool pendingInEffect = delayInfo.pendingDelay != 0 && block.timestamp >= delayInfo.pendingDelayEffectTimestamp; - isSet = delayInfo.pendingDelayEffectTimestamp != 0; + isSet = delayInfo.delay != 0 || pendingInEffect; if (pendingInEffect) return (isSet, delayInfo.pendingDelay); diff --git a/src/contracts/interfaces/IAllocationManager.sol b/src/contracts/interfaces/IAllocationManager.sol index f563aff13..0d19a37d6 100644 --- a/src/contracts/interfaces/IAllocationManager.sol +++ b/src/contracts/interfaces/IAllocationManager.sol @@ -10,6 +10,8 @@ interface IAllocationManager is ISignatureUtils { error OperatorNotRegistered(); /// @dev Thrown when two array parameters have mismatching lengths. error InputArrayLengthMismatch(); + /// @dev Thrown when an operator attempts to set their allocation delay to 0 + error InvalidDelay(); /// @dev Thrown when an operator's allocation delay has yet to be set. error UninitializedAllocationDelay(); /// @dev Thrown when provided `expectedTotalMagnitude` for a given allocation does not match `currentTotalMagnitude`. From 0e0a423cf945b79c5f0f27b7bced141ac81a003e Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Thu, 19 Sep 2024 10:07:12 -0700 Subject: [PATCH 41/47] fix: patch ordering (#771) * fix: remove sort check * fix: remove sort check --- src/contracts/core/AllocationManager.sol | 7 ++----- src/contracts/interfaces/IAllocationManager.sol | 2 -- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index f0eceea11..7da26b225 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -314,17 +314,14 @@ contract AllocationManager is // OperatorSet[] calldata opSets = allocation.operatorSets; - bytes32 prevOperatorSet = bytes32(0); - for (uint256 i = 0; i < allocation.operatorSets.length; ++i) { require( avsDirectory.isOperatorSet(allocation.operatorSets[i].avs, allocation.operatorSets[i].operatorSetId), InvalidOperatorSet() ); - // use encoding of operatorSet to ensure ordering and also used to use OperatorSet struct as key in mappings + + // use encoding of operatorSet as key in mappings bytes32 operatorSetKey = _encodeOperatorSet(allocation.operatorSets[i]); - require(prevOperatorSet < operatorSetKey, OperatorSetsNotInAscendingOrder()); - prevOperatorSet = operatorSetKey; // Read current magnitude allocation including its respective array index and length. // We'll use these values later to check the number of pending allocations/deallocations. diff --git a/src/contracts/interfaces/IAllocationManager.sol b/src/contracts/interfaces/IAllocationManager.sol index 0d19a37d6..4593d161b 100644 --- a/src/contracts/interfaces/IAllocationManager.sol +++ b/src/contracts/interfaces/IAllocationManager.sol @@ -22,8 +22,6 @@ interface IAllocationManager is ISignatureUtils { error InvalidOperator(); /// @dev Thrown when caller is not the delegation manager. error OnlyDelegationManager(); - /// @dev Thrown when provided operator sets are not in ascending order. - error OperatorSetsNotInAscendingOrder(); /// @dev Thrown when an allocation is attempted for a given operator when they have pending allocations or deallocations. error PendingAllocationOrDeallocation(); /// @dev Thrown when an allocation is attempted that exceeds a given operators total allocatable magnitude. From 13bd4c4f033f6c4968c58942347566aef5d08930 Mon Sep 17 00:00:00 2001 From: Madhur Shrimal Date: Thu, 19 Sep 2024 11:42:57 -0700 Subject: [PATCH 42/47] fix: patch getallocatable mag (#772) * fix: remove numToComplete and hardcode with max * fix: make it cleaner --- src/contracts/core/AllocationManager.sol | 15 +++++++-------- src/contracts/interfaces/IAllocationManager.sol | 7 +------ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index 7da26b225..3e67ab6e8 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -590,16 +590,15 @@ contract AllocationManager is * that could be completed at the same time. This is the sum of freeMagnitude and the sum of all pending completable deallocations. * @param operator the operator to get the allocatable magnitude for * @param strategy the strategy to get the allocatable magnitude for - * @param numToComplete the number of pending free magnitudes deallocations to complete */ - function getAllocatableMagnitude( - address operator, - IStrategy strategy, - uint16 numToComplete - ) external view returns (uint64) { + function getAllocatableMagnitude(address operator, IStrategy strategy) external view returns (uint64) { OperatorMagnitudeInfo storage info = operatorMagnitudeInfo[operator][strategy]; - (uint64 freeMagnitudeToAdd,) = - _getPendingFreeMagnitude(operator, strategy, numToComplete, info.nextPendingFreeMagnitudeIndex); + (uint64 freeMagnitudeToAdd,) = _getPendingFreeMagnitude({ + operator: operator, + strategy: strategy, + numToComplete: type(uint16).max, + nextIndex: info.nextPendingFreeMagnitudeIndex + }); return info.freeMagnitude + freeMagnitudeToAdd; } diff --git a/src/contracts/interfaces/IAllocationManager.sol b/src/contracts/interfaces/IAllocationManager.sol index 4593d161b..50b833738 100644 --- a/src/contracts/interfaces/IAllocationManager.sol +++ b/src/contracts/interfaces/IAllocationManager.sol @@ -211,13 +211,8 @@ interface IAllocationManager is ISignatureUtils { * that could be completed at the same time. This is the sum of freeMagnitude and the sum of all pending completable deallocations. * @param operator the operator to get the allocatable magnitude for * @param strategy the strategy to get the allocatable magnitude for - * @param numToComplete the number of pending free magnitudes deallocations to complete, 0 to complete all (uint8 max 256) */ - function getAllocatableMagnitude( - address operator, - IStrategy strategy, - uint16 numToComplete - ) external view returns (uint64); + function getAllocatableMagnitude(address operator, IStrategy strategy) external view returns (uint64); /** * @notice Returns the pending allocations of an operator for a given strategy and operatorSets From 44c260e5a6dc444e3e025579ccc91691199867ae Mon Sep 17 00:00:00 2001 From: Gautham Anant <32277907+gpsanant@users.noreply.github.com> Date: Fri, 20 Sep 2024 00:13:32 -0700 Subject: [PATCH 43/47] Dm cleanup (#776) * abstract with ShareManager * start on totalMagnitude cleanup * fix magnitude sourcing * conversion logic and definitions * abstract completability * fix getDelegatableShares * rename deposit scaling factors and bring depositScalingFactor updates in the DM --- src/contracts/core/AllocationManager.sol | 21 +- src/contracts/core/DelegationManager.sol | 498 +++++++++--------- .../core/DelegationManagerStorage.sol | 22 +- src/contracts/core/StrategyManager.sol | 10 +- .../interfaces/IDelegationManager.sol | 28 +- src/contracts/interfaces/IEigenPodManager.sol | 37 +- src/contracts/interfaces/IShareManager.sol | 32 ++ src/contracts/interfaces/IStrategyManager.sol | 19 +- src/contracts/libraries/SlashingConstants.sol | 24 +- src/contracts/libraries/SlashingLib.sol | 110 ---- src/contracts/pods/EigenPodManager.sol | 82 +-- src/test/integration/users/User.t.sol | 2 +- 12 files changed, 396 insertions(+), 489 deletions(-) create mode 100644 src/contracts/interfaces/IShareManager.sol delete mode 100644 src/contracts/libraries/SlashingLib.sol diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index 3e67ab6e8..25c72470f 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -7,7 +7,7 @@ import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol import "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; -import "../libraries/SlashingLib.sol"; +import "../libraries/SlashingConstants.sol"; import "./AllocationManagerStorage.sol"; contract AllocationManager is @@ -427,9 +427,9 @@ contract AllocationManager is function _getLatestTotalMagnitude(address operator, IStrategy strategy) internal returns (uint64) { (bool exists,, uint224 totalMagnitude) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); if (!exists) { - totalMagnitude = SlashingLib.INITIAL_TOTAL_MAGNITUDE; + totalMagnitude = PRECISION_FACTOR; _totalMagnitudeUpdate[operator][strategy].push({key: uint32(block.timestamp), value: totalMagnitude}); - operatorMagnitudeInfo[operator][strategy].freeMagnitude = SlashingLib.INITIAL_TOTAL_MAGNITUDE; + operatorMagnitudeInfo[operator][strategy].freeMagnitude = PRECISION_FACTOR; } return uint64(totalMagnitude); @@ -444,7 +444,6 @@ contract AllocationManager is uint192 nextIndex ) internal view returns (uint64 freeMagnitudeToAdd, uint192 completed) { uint256 pendingFreeMagnitudeLength = _pendingFreeMagnitude[operator][strategy].length; - uint16 completed = 0; freeMagnitudeToAdd = 0; while (nextIndex < pendingFreeMagnitudeLength && completed < numToComplete) { PendingFreeMagnitude memory pendingFreeMagnitude = _pendingFreeMagnitude[operator][strategy][nextIndex]; @@ -624,7 +623,7 @@ contract AllocationManager is for (uint256 i = 0; i < strategies.length; ++i) { (bool exists,, uint224 value) = _totalMagnitudeUpdate[operator][strategies[i]].latestSnapshot(); if (!exists) { - totalMagnitudes[i] = SlashingLib.INITIAL_TOTAL_MAGNITUDE; + totalMagnitudes[i] = PRECISION_FACTOR; } else { totalMagnitudes[i] = uint64(value); } @@ -646,11 +645,11 @@ contract AllocationManager is ) external view returns (uint64[] memory) { uint64[] memory totalMagnitudes = new uint64[](strategies.length); for (uint256 i = 0; i < strategies.length; ++i) { - (uint224 value, uint256 pos,) = - _totalMagnitudeUpdate[operator][strategies[i]].upperLookupRecentWithPos(timestamp); + (uint224 value, uint256 pos) = + _totalMagnitudeUpdate[operator][strategies[i]].upperLookupWithPos(timestamp); // if there is no existing total magnitude snapshot if (value == 0 && pos == 0) { - totalMagnitudes[i] = SlashingLib.INITIAL_TOTAL_MAGNITUDE; + totalMagnitudes[i] = PRECISION_FACTOR; } else { totalMagnitudes[i] = uint64(value); } @@ -668,7 +667,7 @@ contract AllocationManager is uint64 totalMagnitude; (bool exists,, uint224 value) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); if (!exists) { - totalMagnitude = SlashingLib.INITIAL_TOTAL_MAGNITUDE; + totalMagnitude = PRECISION_FACTOR; } else { totalMagnitude = uint64(value); } @@ -688,12 +687,12 @@ contract AllocationManager is IStrategy strategy, uint32 timestamp ) external view returns (uint64) { - uint64 totalMagnitude = SlashingLib.INITIAL_TOTAL_MAGNITUDE; + uint64 totalMagnitude = PRECISION_FACTOR; (uint224 value, uint256 pos,) = _totalMagnitudeUpdate[operator][strategy].upperLookupRecentWithPos(timestamp); // if there is no existing total magnitude snapshot if (value == 0 && pos == 0) { - totalMagnitude = SlashingLib.INITIAL_TOTAL_MAGNITUDE; + totalMagnitude = PRECISION_FACTOR; } else { totalMagnitude = uint64(value); } diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index b96132c37..f93180dfd 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -6,7 +6,7 @@ import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol"; import "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; -import "../libraries/SlashingLib.sol"; +import "../libraries/SlashingConstants.sol"; import "./DelegationManagerStorage.sol"; /** @@ -243,7 +243,7 @@ contract DelegationManager is CallerCannotUndelegate() ); - // Gather strategies and shares from the staker. Caluclate scaled shares to remove from operator during undelegation + // Gather strategies and shares from the staker. Calculate stakeShares to remove from operator during undelegation // Undelegation removes ALL currently-active strategies and shares (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableShares(staker); @@ -274,15 +274,14 @@ contract DelegationManager is withdrawalRoots[i] = _removeSharesAndQueueWithdrawal({ staker: staker, operator: operator, - withdrawer: staker, strategies: singleStrategy, sharesToWithdraw: singleShare, totalMagnitudes: singleTotalMagnitude }); // all shares and queued withdrawn and no delegated operator - // reset staker's scaling factor to default - stakerScalingFactors[staker][strategies[i]] = SlashingLib.PRECISION_FACTOR; + // reset staker's depositScalingFactor to default + depositScalingFactors[staker][strategies[i]] = PRECISION_FACTOR; } } @@ -318,7 +317,6 @@ contract DelegationManager is withdrawalRoots[i] = _removeSharesAndQueueWithdrawal({ staker: msg.sender, operator: operator, - withdrawer: queuedWithdrawalParams[i].withdrawer, strategies: queuedWithdrawalParams[i].strategies, sharesToWithdraw: queuedWithdrawalParams[i].shares, totalMagnitudes: totalMagnitudes @@ -366,23 +364,21 @@ contract DelegationManager is /** * @notice Increases a staker's delegated share balance in a strategy. Note that before adding to operator shares, - * the delegated shares are scaled according to the operator's total magnitude as part of slashing accounting. - * The staker's scaling factor is updated here. + * the delegated stakeShares. The staker's depositScalingFactor is updated here. * @param staker The address to increase the delegated shares for their operator. * @param strategy The strategy in which to increase the delegated shares. - * @param existingShares The number of shares the staker already has in the strategy. This is the shares amount stored in the + * @param existingDepositShares The number of deposit shares the staker already has in the strategy. This is the shares amount stored in the * StrategyManager/EigenPodManager for the staker's shares. - * @param addedShares The number of shares to added to the staker's shares in the strategy. This amount will be scaled prior to adding - * to the operator's scaled shares. + * @param addedShares The number of shares to added to the staker's shares in the strategy * - * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated scaled shares in `strategy` after scaling `shares`. + * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated stakeShares in `strategy`. * Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ function increaseDelegatedShares( address staker, IStrategy strategy, - uint256 existingShares, + uint256 existingDepositShares, uint256 addedShares ) external onlyStrategyManagerOrEigenPodManager { // if the staker is delegated to an operator @@ -390,37 +386,27 @@ contract DelegationManager is address operator = delegatedTo[staker]; uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategy); - // update stakers scaling deposit scaling factor - uint256 newStakerScalingFactor = SlashingLib.calculateStakerScalingFactor({ - staker: staker, - currStakerScalingFactor: _getStakerScalingFactor(staker, strategy), - totalMagnitude: totalMagnitude, - existingShares: existingShares, - addedShares: addedShares - }); - stakerScalingFactors[staker][strategy] = newStakerScalingFactor; - - // add strategy shares to delegate's shares - _increaseOperatorScaledShares({ - operator: operator, - staker: staker, + // add deposit shares to operator's stake shares and update the staker's depositScalingFactor + _increaseOperatorStakeSharesAndScalingFactor({ + operator: operator, + staker: staker, strategy: strategy, - shares: addedShares, + existingDepositShares: existingDepositShares, + addedShares: addedShares, totalMagnitude: totalMagnitude }); } } + // IGNORE THIS FUNCTION /** - * @notice Decreases a staker's delegated share balance in a strategy. Note that before removing from operator shares, - * the delegated shares are scaled according to the operator's total magnitude as part of slashing accounting. Unlike - * `increaseDelegatedShares`, the staker's scaling factor is not updated here. + * @notice Decreases a staker's delegated stakeShares for a strategy. * @param staker The address to increase the delegated scaled shares for their operator. * @param strategy The strategy in which to decrease the delegated scaled shares. * @param removedShares The number of shares to decremented for the strategy in the * StrategyManager/EigenPodManager * - * @dev *If the staker is actively delegated*, then decreases the `staker`'s delegated scaled shares in `strategy` by `scaledShares`. Otherwise does nothing. + * @dev *If the staker is actively delegated*, then decreases the `staker`'s delegated stakeShares in `strategy` by `scaledShares`. Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ function decreaseDelegatedShares( @@ -429,20 +415,20 @@ contract DelegationManager is uint256 removedShares ) external onlyStrategyManagerOrEigenPodManager { // if the staker is delegated to an operator - if (isDelegated(staker)) { - address operator = delegatedTo[staker]; - - uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategy); - - // subtract strategy shares from delegated scaled shares - _decreaseOperatorScaledShares({ - operator: operator, - staker: staker, - strategy: strategy, - shares: removedShares, - totalMagnitude: totalMagnitude - }); - } + // if (isDelegated(staker)) { + // address operator = delegatedTo[staker]; + + // uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategy); + + // // subtract strategy shares from delegated scaled shares + // _decreaseOperatorScaledShares({ + // operator: operator, + // staker: staker, + // strategy: strategy, + // shares: removedShares, + // totalMagnitude: totalMagnitude + // }); + // } } /** @@ -517,28 +503,19 @@ contract DelegationManager is delegatedTo[staker] = operator; emit StakerDelegated(staker, operator); - // read staker's delegatable shares and strategies to add to operator's scaled shares - // and also update the staker scaling factor for each strategy + // read staker's delegatable shares and strategies to add to operator's stakeShares + // and also update the staker depositScalingFactor for each strategy (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableShares(staker); uint64[] memory totalMagnitudes = allocationManager.getTotalMagnitudes(operator, strategies); for (uint256 i = 0; i < strategies.length; ++i) { - // update stakers scaling deposit scaling factor - uint256 newStakerScalingFactor = SlashingLib.calculateStakerScalingFactor({ - staker: staker, - currStakerScalingFactor: _getStakerScalingFactor(staker, strategies[i]), - totalMagnitude: totalMagnitudes[i], - existingShares: 0, - addedShares: shares[i] - }); - stakerScalingFactors[staker][strategies[i]] = newStakerScalingFactor; - // forgefmt: disable-next-item - _increaseOperatorScaledShares({ + _increaseOperatorStakeSharesAndScalingFactor({ operator: operator, staker: staker, - strategy: strategies[i], - shares: shares[i], + strategy: strategies[i], + existingDepositShares: 0, + addedShares: shares[i], totalMagnitude: totalMagnitudes[i] }); } @@ -546,11 +523,11 @@ contract DelegationManager is /** * @dev This function completes a queued withdrawal for a staker. - * This will apply any slashing that has occurred since the scaledShares were initially set in the Withdrawal struct up - * until the totalMagnitude at completion time. + * This will apply any slashing that has occurred since the the withdrawal was queued. By multiplying the withdrawl's + * stakeShares by the operator's total magnitude for each strategy * If receiveAsTokens is true, then these shares will be withdrawn as tokens. * If receiveAsTokens is false, then they will be redeposited according to the current operator the staker is delegated to, - * and added back to the operator's scaledShares. + * and added back to the operator's stakeShares. */ function _completeQueuedWithdrawal( Withdrawal calldata withdrawal, @@ -560,75 +537,34 @@ contract DelegationManager is require(tokens.length == withdrawal.strategies.length, InputArrayLengthMismatch()); require(msg.sender == withdrawal.withdrawer, WithdrawerNotCaller()); bytes32 withdrawalRoot = calculateWithdrawalRoot(withdrawal); - bool isLegacyWithdrawal = false; - require(pendingWithdrawals[withdrawalRoot], WithdrawalNotQueued()); - if (withdrawal.startTimestamp < LEGACY_WITHDRAWALS_TIMESTAMP) { - // this is a legacy M2 withdrawal using blocknumbers. We use the LEGACY_WITHDRAWALS_TIMESTAMP to check - // if the withdrawal is a legacy withdrawal or not. It would take up to 600+ years for the blocknumber - // to reach the LEGACY_WITHDRAWALS_TIMESTAMP, so this is a safe check. - require( - withdrawal.startTimestamp + LEGACY_MIN_WITHDRAWAL_DELAY_BLOCKS <= block.number, - WithdrawalDelayNotElapsed() - ); - isLegacyWithdrawal = true; - } else { - // this is a post Slashing release withdrawal using timestamps - require(withdrawal.startTimestamp + MIN_WITHDRAWAL_DELAY <= block.timestamp, WithdrawalDelayNotElapsed()); - } - // read delegated operator's totalMagnitudes at time of withdrawal to scale shares again if any slashing has occurred - // during withdrawal delay period + // TODO: is there a cleaner way to do this? + uint32 completableTimestamp = _checkCompletability(withdrawal.startTimestamp); + // read delegated operator's totalMagnitudes at time of withdrawal to convert the stakeShares to shared + // factoring in slashing that occured during withdrawal delay uint64[] memory totalMagnitudes = allocationManager.getTotalMagnitudesAtTimestamp({ operator: withdrawal.delegatedTo, strategies: withdrawal.strategies, - timestamp: withdrawal.startTimestamp + MIN_WITHDRAWAL_DELAY + timestamp: completableTimestamp }); for (uint256 i = 0; i < withdrawal.strategies.length; i++) { - uint256 sharesToWithdraw; - if (isLegacyWithdrawal) { - // This is a legacy M2 withdrawal. There is no slashing applied to the withdrawn shares. - sharesToWithdraw = withdrawal.scaledShares[i]; - } else { - // Take already scaled staker shares and scale again according to current operator totalMagnitude - // This is because the totalMagnitude may have changed since withdrawal was queued and the staker shares - // are still susceptible to slashing - sharesToWithdraw = - SlashingLib.calculateSharesToCompleteWithdraw(withdrawal.scaledShares[i], totalMagnitudes[i]); - } - + IShareManager shareManager = _getShareManager(withdrawal.strategies[i]); + uint256 sharesToWithdraw = _convertStakeSharesToShares(withdrawal.stakeShares[i], totalMagnitudes[i]); if (receiveAsTokens) { - // withdraws the underlying token of the strategy to the staker - // Withdraws `shares` in `strategy` to `withdrawer`. If the shares are virtual beaconChainETH shares, // then a call is ultimately forwarded to the `staker`s EigenPod; otherwise a call is ultimately forwarded // to the `strategy` with info on the `token`. - if (withdrawal.strategies[i] == beaconChainETHStrategy) { - eigenPodManager.withdrawSharesAsTokens({ - podOwner: withdrawal.staker, - destination: msg.sender, - shares: sharesToWithdraw - }); - } else { - strategyManager.withdrawSharesAsTokens({ - recipient: msg.sender, - strategy: withdrawal.strategies[i], - shares: sharesToWithdraw, - token: tokens[i] - }); - } + shareManager.withdrawSharesAsTokens({ + recipient: withdrawal.staker, + strategy: withdrawal.strategies[i], + shares: sharesToWithdraw, + token: tokens[i] + }); } else { - // adds the withdrawable shares back to the stakers account - // Award shares back in StrategyManager/EigenPodManager. - if (withdrawal.strategies[i] == beaconChainETHStrategy) { - // Award shares back in EigenPodManager. - // big fukn TODO: refactor EPM to increaseDelegatedShares if applicable. this is completely broken as is - eigenPodManager.addShares({podOwner: withdrawal.staker, shares: sharesToWithdraw}); - } else { - strategyManager.addShares(msg.sender, tokens[i], withdrawal.strategies[i], sharesToWithdraw); - } + shareManager.addShares(msg.sender, tokens[i], withdrawal.strategies[i], sharesToWithdraw); } } @@ -638,106 +574,99 @@ contract DelegationManager is } /** - * @notice Increases `operator`s delegated scaled shares in `strategy` based on staker's added shares and operator's totalMagnitude - * @param operator The operator to increase the delegated scaled shares for - * @param staker The staker to increase the delegated scaled shares for - * @param strategy The strategy to increase the delegated scaled shares for - * @param shares The shares added to the staker in the StrategyManager/EigenPodManager + * @notice Increases `operator`s delegated stakeShares in `strategy` based on staker's added shares and operator's totalMagnitude + * and increases the staker's depositScalingFactor for the strategy. + * @param operator The operator to increase the delegated stakeShares for + * @param staker The staker to increase the depositScalingFactor for + * @param strategy The strategy to increase the delegated stakeShares and the depositScalingFactor for + * @param existingDepositShares The number of deposit shares the staker already has in the strategy. + * @param addedShares The shares added to the staker in the StrategyManager/EigenPodManager * @param totalMagnitude The current total magnitude of the operator for the strategy */ - function _increaseOperatorScaledShares( + function _increaseOperatorStakeSharesAndScalingFactor( address operator, address staker, IStrategy strategy, - uint256 shares, + uint256 existingDepositShares, + uint256 addedShares, uint64 totalMagnitude ) internal { - // based on total magnitude, update operators scaled shares - uint256 scaledShares = SlashingLib.scaleShares(shares, totalMagnitude); - operatorScaledShares[operator][strategy] += scaledShares; + _updateDepositScalingFactor({ + staker: staker, + strategy: strategy, + existingDepositShares: existingDepositShares, + addedShares: addedShares, + totalMagnitude: totalMagnitude + }); + + // based on total magnitude, update operators stakeShares + uint256 stakeShares = _convertSharesToStakeShares(addedShares, totalMagnitude); + operatorStakeShares[operator][strategy] += stakeShares; // TODO: What to do about event wrt scaling? - emit OperatorSharesIncreased(operator, staker, strategy, scaledShares); + emit OperatorSharesIncreased(operator, staker, strategy, stakeShares); } /** - * @notice Decreases `operator`s delegated scaled shares in `strategy` based on staker's removed shares and operator's totalMagnitude - * @param operator The operator to decrease the delegated scaled shares for - * @param staker The staker to decrease the delegated scaled shares for - * @param strategy The strategy to decrease the delegated scaled shares for + * @notice Decreases `operator`s delegated stakeShares in `strategy` based on staker's removed shares and operator's totalMagnitude + * @param operator The operator to decrease the delegated delegated shares for + * @param staker The staker to decrease the delegated delegated shares for + * @param strategy The strategy to decrease the delegated delegated shares for * @param shares The shares removed from the staker in the StrategyManager/EigenPodManager * @param totalMagnitude The current total magnitude of the operator for the strategy */ - function _decreaseOperatorScaledShares( + function _decreaseOperatorStakeShares( address operator, address staker, IStrategy strategy, uint256 shares, uint64 totalMagnitude ) internal { - // based on total magnitude, decrement operator's scaled shares - uint256 scaledShares = SlashingLib.scaleShares(shares, totalMagnitude); - operatorScaledShares[operator][strategy] -= scaledShares; + // based on total magnitude, decrement operator's stakeShares + uint256 stakeShares = _convertSharesToStakeShares(shares, totalMagnitude); + operatorStakeShares[operator][strategy] -= stakeShares; // TODO: What to do about event wrt scaling? - emit OperatorSharesDecreased(operator, staker, strategy, scaledShares); + emit OperatorSharesDecreased(operator, staker, strategy, stakeShares); } /** - * @notice Removes `scaledShares` in `strategies` from `staker` who is currently delegated to `operator` and queues a withdrawal to the `withdrawer`. + * @notice Removes `sharesToWithdraw` in `strategies` from `staker` who is currently delegated to `operator` and queues a withdrawal to the `withdrawer`. * @dev If the `operator` is indeed an operator, then the operator's delegated shares in the `strategies` are also decreased appropriately. * @dev If `withdrawer` is not the same address as `staker` */ function _removeSharesAndQueueWithdrawal( address staker, address operator, - address withdrawer, IStrategy[] memory strategies, uint256[] memory sharesToWithdraw, uint64[] memory totalMagnitudes ) internal returns (bytes32) { require(staker != address(0), InputAddressZero()); require(strategies.length != 0, InputArrayLengthZero()); - require(staker == withdrawer, WithdrawerNotStaker()); - uint256[] memory scaledStakerShares = new uint256[](strategies.length); + uint256[] memory stakeSharesToWithdraw = new uint256[](strategies.length); // Remove shares from staker and operator // Each of these operations fail if we attempt to remove more shares than exist for (uint256 i = 0; i < strategies.length; ++i) { + IShareManager shareManager = _getShareManager(strategies[i]); + + // TODO: maybe have a getter to get shares for all strategies, like getDelegatableShares // check sharesToWithdraw is valid - // TODO maybe have a getter to get totalShares for all strategies, like getDelegatableShares // but for inputted strategies - uint256 totalShares; - if (strategies[i] == beaconChainETHStrategy) { - int256 podShares = eigenPodManager.podOwnerShares(staker); - totalShares = podShares <= 0 ? 0 : uint256(podShares); - } else { - totalShares = strategyManager.stakerStrategyShares(staker, strategies[i]); - } - uint256 stakerScalingFactor = _getStakerScalingFactor(staker, strategies[i]); + uint256 depositShares = shareManager.stakerStrategyShares(staker, strategies[i]); + uint256 depositSharesToWithdraw = _convertSharesToDepositShares(staker, strategies[i], sharesToWithdraw[i], totalMagnitudes[i]); require( - sharesToWithdraw[i] - <= SlashingLib.getWithdrawableShares({ - staker: staker, - stakerScalingFactor: stakerScalingFactor, - shares: totalShares, - currTotalMagnitude: totalMagnitudes[i] - }), + depositSharesToWithdraw <= depositShares, WithdrawalExeedsMax() ); - - ( - // shares to decrement from StrategyManager/EigenPodManager - uint256 sharesToDecrement, - // scaledShares for staker to place into queueWithdrawal - uint256 scaledShares - ) = SlashingLib.calculateSharesToQueueWithdraw(sharesToWithdraw[i], stakerScalingFactor, totalMagnitudes[i]); - scaledStakerShares[i] = scaledShares; + // stakeShares for staker to place into queueWithdrawal + stakeSharesToWithdraw[i] = _convertSharesToStakeShares(sharesToWithdraw[i], totalMagnitudes[i]); // Similar to `isDelegated` logic if (operator != address(0)) { // forgefmt: disable-next-item - _decreaseOperatorScaledShares({ + _decreaseOperatorStakeShares({ operator: operator, staker: staker, strategy: strategies[i], @@ -747,18 +676,9 @@ contract DelegationManager is } // Remove active shares from EigenPodManager/StrategyManager - if (strategies[i] == beaconChainETHStrategy) { - /** - * This call will revert if it would reduce the Staker's virtual beacon chain ETH shares below zero. - * This behavior prevents a Staker from queuing a withdrawal which improperly removes excessive - * shares from the operator to whom the staker is delegated. - * It will also revert if the share amount being withdrawn is not a whole Gwei amount. - */ - eigenPodManager.removeShares(staker, sharesToDecrement); - } else { - // this call will revert if `scaledShares[i]` exceeds the Staker's current shares in `strategies[i]` - strategyManager.removeShares(staker, strategies[i], sharesToDecrement); - } + // EigenPodManager: this call will revert if it would reduce the Staker's virtual beacon chain ETH shares below zero + // StrategyManager: this call will revert if `depositSharesToDecrement` exceeds the Staker's current deposit shares in `strategies[i]` + shareManager.removeShares(staker, strategies[i], depositSharesToWithdraw); } // Create queue entry and increment withdrawal nonce @@ -768,11 +688,11 @@ contract DelegationManager is Withdrawal memory withdrawal = Withdrawal({ staker: staker, delegatedTo: operator, - withdrawer: withdrawer, + withdrawer: staker, nonce: nonce, startTimestamp: uint32(block.timestamp), strategies: strategies, - scaledShares: scaledStakerShares + stakeShares: stakeSharesToWithdraw }); bytes32 withdrawalRoot = calculateWithdrawalRoot(withdrawal); @@ -784,21 +704,138 @@ contract DelegationManager is return withdrawalRoot; } + /// @dev check whether the withdrawal delay has elapsed (handles both legacy and post-slashing-release withdrawals) and returns the completable timestamp + function _checkCompletability( + uint32 startTimestamp + ) internal view returns (uint32 completableTimestamp) { + if (startTimestamp < LEGACY_WITHDRAWALS_TIMESTAMP) { + // this is a legacy M2 withdrawal using blocknumbers. + // It would take up to 600+ years for the blocknumber to reach the LEGACY_WITHDRAWALS_TIMESTAMP, so this is a safe check. + require( + startTimestamp + LEGACY_MIN_WITHDRAWAL_DELAY_BLOCKS <= block.number, + WithdrawalDelayNotElapsed() + ); + // sourcing the magnitudes from time=0, will always give us PRECISION_FACTOR, which doesn't factor in slashing + completableTimestamp = 0; + } else { + // this is a post Slashing release withdrawal using timestamps + require(startTimestamp + MIN_WITHDRAWAL_DELAY <= block.timestamp, WithdrawalDelayNotElapsed()); + // source magnitudes from the time of completability + completableTimestamp = startTimestamp + MIN_WITHDRAWAL_DELAY; + } + } + /** * - * SLASHING AND SHARES HELPER FUNCTIONS - * + * SHARES CONVERSION FUNCTIONS + * + * There are 3 types of shares: + * 1. shares + * - These can be converted to an amount of tokens given a strategy + * - by calling `sharesToUnderlying` on the strategy address (they're already tokens + * in the case of EigenPods) + * - These are comparable between operators and stakers. + * - These live in the storage of StrategyManager strategies: + * - `totalShares` is the total amount of shares delegated to a strategy + * 2. stakeShares + * - These can be converted to shares given an operator and a strategy + * - by multiplying by the operator's totalMagnitude for the strategy + * - These values automatically update their conversion into tokens + * - when the operator's total magnitude for the strategy is decreased upon slashing + * - These live in the storage of the DelegationManager: + * - `stakeShares` is the total amount of stakeShares delegated to an operator for a strategy + * - `withdrawal.stakeShares` is the amount of stakeShares in a withdrawal + * 3. depositShares + * - These can be converted into stakeShares given a staker and a strategy + * - by multiplying by the staker's depositScalingFactor for the strategy + * - These values automatically update their conversion into tokens + * - when the staker's depositScalingFactor for the strategy is increased upon new deposits + * - or when the staker's operator's total magnitude for the strategy is decreased upon slashing + * - These represent the total amount of shares the staker would have of a strategy if they were never slashed + * - These live in the storage of the StrategyManager/EigenPodManager + * - `stakerStrategyShares` in the SM is the staker's depositShares that have not been queued for withdrawal in a strategy + * - `podOwnerShares` in the EPM is the staker's depositShares that have not been queued for withdrawal in the beaconChainETHStrategy */ + function _convertSharesToStakeShares(uint256 shares, uint64 totalMagnitude) internal pure returns (uint256) { + return shares * PRECISION_FACTOR / totalMagnitude; + } + + function _convertStakeSharesToShares(uint256 stakeShares, uint64 totalMagnitude) internal pure returns (uint256) { + return stakeShares * totalMagnitude / PRECISION_FACTOR; + } + + function _convertSharesToDepositShares(address staker, IStrategy strategy, uint256 shares, uint64 totalMagnitude) internal view returns (uint256) { + return shares * PRECISION_FACTOR / _getDepositScalingFactor(staker, strategy) * PRECISION_FACTOR / totalMagnitude; + } + + function _convertDepositSharesToShares(address staker, IStrategy strategy, uint256 depositShares, uint64 totalMagnitude) internal view returns (uint256) { + return depositShares * _getDepositScalingFactor(staker, strategy) / PRECISION_FACTOR * totalMagnitude / PRECISION_FACTOR; + } + /** - * @notice staker scaling factor should be initialized and lower bounded to 1e18 + * @notice helper to calculate the new depositScalingFactor after adding shares. This is only used + * when a staker is depositing through the StrategyManager or EigenPodManager. A staker's depositScalingFactor + * is only updated when they have new deposits and their shares are being increased. */ - function _getStakerScalingFactor(address staker, IStrategy strategy) internal view returns (uint256) { - uint256 currStakerScalingFactor = stakerScalingFactors[staker][strategy]; - if (currStakerScalingFactor == 0) { - currStakerScalingFactor = SlashingLib.PRECISION_FACTOR; + function _updateDepositScalingFactor( + address staker, + IStrategy strategy, + uint64 totalMagnitude, + uint256 existingDepositShares, + uint256 addedShares + ) internal returns (uint256) { + uint256 newDepositScalingFactor; + + if (existingDepositShares == 0) { + // existing shares are 0, meaning no existing delegated shares. In this case, the new depositScalingFactor + // is re-initialized to + newDepositScalingFactor = PRECISION_FACTOR / totalMagnitude; + } else { + // TODO: OVERFLOWS: switch to muldiv everywhere + // since + // + // newShares + // = existingShares + addedShares + // = _convertDepositSharesToShares(staker, strategy, existingDepositShares, totalMagnitude) + addedShares + // + // and it also is + // + // newShares + // = _convertDepositSharesToShares(staker, strategy, newDepositShares, totalMagnitude) + // = newDepositShares * newDepositScalingFactor / PRECISION_FACTOR * totalMagnitude / PRECISION_FACTOR + // = (existingDepositShares + addedShares) * newDepositScalingFactor / PRECISION_FACTOR * totalMagnitude / PRECISION_FACTOR + // + // we can solve for + // + newDepositScalingFactor = + ( + _convertDepositSharesToShares(staker, strategy, existingDepositShares, totalMagnitude) + + addedShares + ) + * PRECISION_FACTOR + / (existingDepositShares + addedShares) + * PRECISION_FACTOR + / totalMagnitude; + } + + // update the staker's depositScalingFactor + depositScalingFactors[staker][strategy] = newDepositScalingFactor; + } + + /** + * @notice depositScalingFactor should be initialized and lower bounded to 1e18 + */ + function _getDepositScalingFactor(address staker, IStrategy strategy) internal view returns (uint256) { + uint256 currDepositScalingFactor = depositScalingFactors[staker][strategy]; + if (currDepositScalingFactor == 0) { + currDepositScalingFactor = PRECISION_FACTOR; } - return currStakerScalingFactor; + return currDepositScalingFactor; + } + + function _getShareManager(IStrategy strategy) internal view returns (IShareManager) { + return strategy == beaconChainETHStrategy ? IShareManager(address(eigenPodManager)) : IShareManager(address(strategyManager)); } /** @@ -870,39 +907,31 @@ contract DelegationManager is /// @notice a legacy function that returns the total delegated shares for an operator and strategy function operatorShares(address operator, IStrategy strategy) public view returns (uint256) { uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategy); - return SlashingLib.descaleShares(operatorScaledShares[operator][strategy], totalMagnitude); + return _convertStakeSharesToShares(operatorStakeShares[operator][strategy], totalMagnitude); } /** - * @notice Given a staker and scaled shares amounts of deposits, return the shares calculated if - * the staker were to withdraw. This value depends on which operator the staker is delegated to. + * @notice Given a staker and a set of strategies, return the shares they can queue for withdrawal. + * This value depends on which operator the staker is delegated to. * The shares amount returned is the actual amount of Strategy shares the staker would receive (subject * to each strategy's underlying shares to token ratio). */ - function getWithdrawableStakerShares( + function getDelegatableShares( address staker, - IStrategy[] calldata strategies - ) external view returns (uint256[] memory shares) { + IStrategy[] memory strategies + ) public view returns (uint256[] memory shares) { address operator = delegatedTo[staker]; for (uint256 i = 0; i < strategies.length; ++i) { - // 1. read strategy shares - if (strategies[i] == beaconChainETHStrategy) { - int256 podShares = eigenPodManager.podOwnerShares(staker); - shares[i] = podShares <= 0 ? 0 : uint256(podShares); - } else { - shares[i] = strategyManager.stakerStrategyShares(staker, strategies[i]); - } + IShareManager shareManager = _getShareManager(strategies[i]); + // TODO: batch call for strategyManager shares? + // 1. read strategy deposit shares + shares[i] = shareManager.stakerStrategyShares(staker, strategies[i]); // 2. if the staker is delegated, actual withdrawable shares can be different from what is stored // in the StrategyManager/EigenPodManager because they could have been slashed if (operator != address(0)) { uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategies[i]); - shares[i] = SlashingLib.getWithdrawableShares({ - staker: staker, - stakerScalingFactor: _getStakerScalingFactor(staker, strategies[i]), - shares: shares[i], - currTotalMagnitude: totalMagnitude - }); + shares[i] = _convertDepositSharesToShares(staker, strategies[i], shares[i], totalMagnitude); } } return shares; @@ -910,49 +939,28 @@ contract DelegationManager is /** * @notice Returns the number of actively-delegatable shares a staker has across all strategies. - * NOTE: If you are delegated to an operator and have been slashed, these values won't be your real actual - * delegatable shares! * @dev Returns two empty arrays in the case that the Staker has no actively-delegateable shares. */ function getDelegatableShares( address staker ) public view returns (IStrategy[] memory, uint256[] memory) { - // Get current StrategyManager/EigenPodManager shares and strategies for `staker` - // If `staker` is already delegated, these may not be the full withdrawable amounts due to slashing - int256 podShares = eigenPodManager.podOwnerShares(staker); - (IStrategy[] memory strategyManagerStrats, uint256[] memory strategyManagerShares) = - strategyManager.getDeposits(staker); - - // Has no shares in EigenPodManager, but potentially some in StrategyManager - if (podShares <= 0) { - return (strategyManagerStrats, strategyManagerShares); + // Get a list of all the strategies to check + IStrategy[] memory strategies = strategyManager.getStakerStrategyList(staker); + // resize and add beaconChainETH to the end + assembly { + mstore(strategies, add(mload(strategies), 1)) } - - IStrategy[] memory strategies; - uint256[] memory shares; - - if (strategyManagerStrats.length == 0) { - // Has shares in EigenPodManager, but not in StrategyManager - strategies = new IStrategy[](1); - shares = new uint256[](1); - strategies[0] = beaconChainETHStrategy; - shares[0] = uint256(podShares); - } else { - // Has shares in both - // TODO: make more efficient by resizing array - // 1. Allocate return arrays - strategies = new IStrategy[](strategyManagerStrats.length + 1); - shares = new uint256[](strategies.length); - - // 2. Place StrategyManager strats/shares in return arrays - for (uint256 i = 0; i < strategyManagerStrats.length; ++i) { - strategies[i] = strategyManagerStrats[i]; - shares[i] = strategyManagerShares[i]; + strategies[strategies.length - 1] = beaconChainETHStrategy; + + // get the delegatable shares for each strategy + uint256[] memory shares = getDelegatableShares(staker, strategies); + // if the last shares are 0, remove them + if (shares[strategies.length - 1] == 0) { + // resize the arrays + assembly { + mstore(strategies, sub(mload(strategies), 1)) + mstore(shares, sub(mload(shares), 1)) } - - // 3. Place EigenPodManager strat/shares in return arrays - strategies[strategies.length - 1] = beaconChainETHStrategy; - shares[strategies.length - 1] = uint256(podShares); } return (strategies, shares); diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index 07d7c3801..e2564c806 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -40,29 +40,31 @@ abstract contract DelegationManagerStorage is IDelegationManager { /// @notice The AVSDirectory contract for EigenLayer IAVSDirectory public immutable avsDirectory; + + // TODO: Switch these to ShareManagers, but this breaks a lot of tests /// @notice The StrategyManager contract for EigenLayer IStrategyManager public immutable strategyManager; - /// @notice The Slasher contract for EigenLayer - ISlasher public immutable slasher; - /// @notice The EigenPodManager contract for EigenLayer IEigenPodManager public immutable eigenPodManager; + /// @notice The Slasher contract for EigenLayer + ISlasher public immutable slasher; + /// @notice The AllocationManager contract for EigenLayer IAllocationManager public immutable allocationManager; /** - * @notice returns the total number of scaled shares (i.e. shares scaled down by a factor of the `operator`'s + * @notice returns the total number of stakeShares (i.e. shares divided by the `operator`'s * totalMagnitude) in `strategy` that are delegated to `operator`. - * @notice Mapping: operator => strategy => total number of scaled shares in the strategy delegated to the operator. + * @notice Mapping: operator => strategy => total number of stakeShares in the strategy delegated to the operator. * @dev By design, the following invariant should hold for each Strategy: - * (operator's scaled shares in delegation manager) = sum (scaled shares above zero of all stakers delegated to operator) - * = sum (delegateable scaled shares of all stakers delegated to the operator) + * (operator's stakeShares in delegation manager) = sum (stakeShares above zero of all stakers delegated to operator) + * = sum (delegateable stakeShares of all stakers delegated to the operator) * @dev FKA `operatorShares` */ - mapping(address => mapping(IStrategy => uint256)) public operatorScaledShares; + mapping(address => mapping(IStrategy => uint256)) public operatorStakeShares; /** * @notice Mapping: operator => OperatorDetails struct @@ -112,9 +114,9 @@ abstract contract DelegationManagerStorage is IDelegationManager { */ mapping(IStrategy => uint256) private __deprecated_strategyWithdrawalDelayBlocks; - /// @notice Mapping: staker => strategy => scaling factor used to calculate the staker's withdrawable shares in the strategy. + /// @notice Mapping: staker => strategy => scaling factor used to calculate the staker's shares in the strategy. /// This is updated upon each deposit based on the staker's currently delegated operator's totalMagnitude. - mapping(address => mapping(IStrategy => uint256)) public stakerScalingFactors; + mapping(address => mapping(IStrategy => uint256)) public depositScalingFactors; constructor( IStrategyManager _strategyManager, diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index a82074ed4..104c65419 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -253,14 +253,14 @@ contract StrategyManager is } // add the returned shares to their existing shares for this strategy - uint256 existingShares = stakerStrategyShares[staker][strategy]; + uint256 existingDepositShares = stakerStrategyShares[staker][strategy]; stakerStrategyShares[staker][strategy] += shares; // Increase shares delegated to operator, if needed delegation.increaseDelegatedShares({ staker: staker, strategy: strategy, - existingShares: existingShares, + existingDepositShares: existingDepositShares, addedShares: shares }); @@ -381,6 +381,12 @@ contract StrategyManager is return (stakerStrategyList[staker], shares); } + function getStakerStrategyList( + address staker + ) external view returns (IStrategy[] memory) { + return stakerStrategyList[staker]; + } + /// @notice Simple getter function that returns `stakerStrategyList[staker].length`. function stakerStrategyListLength( address staker diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index b4665e30c..da47c10c6 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -128,10 +128,10 @@ interface IDelegationManager is ISignatureUtils { uint32 startTimestamp; // Array of strategies that the Withdrawal contains IStrategy[] strategies; - // Array containing the amount of staker scaled shares for withdrawal in each Strategy in the `strategies` array - // Note that these shares need to be rescaled again at completion based on the operator's totalMagnitude in case - // of slashing occurring during the queue withdrawal period - uint256[] scaledShares; + // Array containing the amount of staker's stakeShares for withdrawal in each Strategy in the `strategies` array + // Note that these shares need to be multiplied by the operator's totalMagnitude at completion to include + // slashing occurring during the queue withdrawal delay + uint256[] stakeShares; } struct QueuedWithdrawalParams { @@ -317,29 +317,29 @@ interface IDelegationManager is ISignatureUtils { /** * @notice Increases a staker's delegated share balance in a strategy. Note that before adding to operator shares, * the delegated shares are scaled according to the operator's total magnitude as part of slashing accounting. - * The staker's scaling factor is updated here. + * The staker's depositScalingFactor is updated here. * @param staker The address to increase the delegated shares for their operator. * @param strategy The strategy in which to increase the delegated shares. - * @param existingShares The number of shares the staker already has in the strategy. This is the shares amount stored in the + * @param existingDepositShares The number of deposit shares the staker already has in the strategy. This is the shares amount stored in the * StrategyManager/EigenPodManager for the staker's shares. * @param addedShares The number of shares to added to the staker's shares in the strategy. This amount will be scaled prior to adding * to the operator's scaled shares. * - * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated scaled shares in `strategy` after scaling `shares`. + * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated scaled shares in `strategy`. * Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ function increaseDelegatedShares( address staker, IStrategy strategy, - uint256 existingShares, + uint256 existingDepositShares, uint256 addedShares ) external; /** * @notice Decreases a staker's delegated share balance in a strategy. Note that before removing from operator shares, * the delegated shares are scaled according to the operator's total magnitude as part of slashing accounting. Unlike - * `increaseDelegatedShares`, the staker's scaling factor is not updated here. + * `increaseDelegatedShares`, the staker's depositScalingFactor is not updated here. * @param staker The address to increase the delegated scaled shares for their operator. * @param strategy The strategy in which to decrease the delegated scaled shares. * @param removedShares The number of shares to decremented for the strategy in the @@ -381,15 +381,15 @@ interface IDelegationManager is ISignatureUtils { ) external view returns (uint256); /** - * @notice returns the total number of scaled shares (i.e. shares scaled down by a factor of the `operator`'s + * @notice returns the total number of stakeShares (i.e. shares divided by the `operator`'s * totalMagnitude) in `strategy` that are delegated to `operator`. - * @notice Mapping: operator => strategy => total number of scaled shares in the strategy delegated to the operator. + * @notice Mapping: operator => strategy => total number of stakeShares in the strategy delegated to the operator. * @dev By design, the following invariant should hold for each Strategy: - * (operator's scaled shares in delegation manager) = sum (scaled shares above zero of all stakers delegated to operator) - * = sum (delegateable scaled shares of all stakers delegated to the operator) + * (operator's stakeShares in delegation manager) = sum (stakeShares above zero of all stakers delegated to operator) + * = sum (delegateable stakeShares of all stakers delegated to the operator) * @dev FKA `operatorShares` */ - function operatorScaledShares(address operator, IStrategy strategy) external view returns (uint256); + function operatorStakeShares(address operator, IStrategy strategy) external view returns (uint256); /** * @notice Returns 'true' if `staker` *is* actively delegated, and 'false' otherwise. diff --git a/src/contracts/interfaces/IEigenPodManager.sol b/src/contracts/interfaces/IEigenPodManager.sol index 0f6ea80ca..169618fef 100644 --- a/src/contracts/interfaces/IEigenPodManager.sol +++ b/src/contracts/interfaces/IEigenPodManager.sol @@ -5,6 +5,7 @@ import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; import "./IETHPOSDeposit.sol"; import "./IStrategyManager.sol"; import "./IEigenPod.sol"; +import "./IShareManager.sol"; import "./IPausable.sol"; import "./ISlasher.sol"; import "./IStrategy.sol"; @@ -14,7 +15,7 @@ import "./IStrategy.sol"; * @author Layr Labs, Inc. * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service */ -interface IEigenPodManager is IPausable { +interface IEigenPodManager is IShareManager, IPausable { /// @dev Thrown when caller is not a EigenPod. error OnlyEigenPod(); /// @dev Thrown when caller is not DelegationManager. @@ -25,6 +26,8 @@ interface IEigenPodManager is IPausable { error SharesNotMultipleOfGwei(); /// @dev Thrown when shares would result in a negative integer. error SharesNegative(); + /// @dev Thrown when the strategy is not the beaconChainETH strategy. + error InvalidStrategy(); /// @notice Emitted to notify the deployment of an EigenPod event PodDeployed(address indexed eigenPod, address indexed podOwner); @@ -118,34 +121,4 @@ interface IEigenPodManager is IPausable { /// @notice returns canonical, virtual beaconChainETH strategy function beaconChainETHStrategy() external view returns (IStrategy); - - /** - * @notice Used by the DelegationManager to remove a pod owner's shares while they're in the withdrawal queue. - * Simply decreases the `podOwner`'s shares by `shares`, down to a minimum of zero. - * @dev This function reverts if it would result in `podOwnerShares[podOwner]` being less than zero, i.e. it is forbidden for this function to - * result in the `podOwner` incurring a "share deficit". This behavior prevents a Staker from queuing a withdrawal which improperly removes excessive - * shares from the operator to whom the staker is delegated. - * @dev Reverts if `shares` is not a whole Gwei amount - */ - function removeShares(address podOwner, uint256 shares) external; - - /** - * @notice Increases the `podOwner`'s shares by `shares`, paying off deficit if possible. - * Used by the DelegationManager to award a pod owner shares on exiting the withdrawal queue - * @dev Returns the number of shares added to `podOwnerShares[podOwner]` above zero, which will be less than the `shares` input - * in the event that the podOwner has an existing shares deficit (i.e. `podOwnerShares[podOwner]` starts below zero). - * Also returns existingPodShares prior to adding shares, this is returned as 0 if the existing podOwnerShares is negative - * @dev Reverts if `shares` is not a whole Gwei amount - */ - function addShares( - address podOwner, - uint256 shares - ) external returns (uint256 increaseInDelegateableShares, uint256 existingPodShares); - - /** - * @notice Used by the DelegationManager to complete a withdrawal, sending tokens to some destination address - * @dev Prioritizes decreasing the podOwner's share deficit, if they have one - * @dev Reverts if `shares` is not a whole Gwei amount - */ - function withdrawSharesAsTokens(address podOwner, address destination, uint256 shares) external; -} +} \ No newline at end of file diff --git a/src/contracts/interfaces/IShareManager.sol b/src/contracts/interfaces/IShareManager.sol new file mode 100644 index 000000000..c22de3877 --- /dev/null +++ b/src/contracts/interfaces/IShareManager.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "./IStrategy.sol"; + +/** + * @title Interface for a `IShareManager` contract. + * @author Layr Labs, Inc. + * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service + * @notice This contract is used by the DelegationManager as a unified interface to interact with the EigenPodManager and StrategyManager + */ +interface IShareManager { + /// @notice Used by the DelegationManager to remove a Staker's shares from a particular strategy when entering the withdrawal queue + /// @dev strategy must be beaconChainETH when talking to the EigenPodManager + function removeShares(address staker, IStrategy strategy, uint256 shares) external; + + /// @notice Used by the DelegationManager to award a Staker some shares that have passed through the withdrawal queue + /// @dev strategy must be beaconChainETH when talking to the EigenPodManager + /// @dev token is not validated when talking to the EigenPodManager + function addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external; + + /// @notice Used by the DelegationManager to convert withdrawn descaled shares to tokens and send them to a recipient + /// @dev strategy must be beaconChainETH when talking to the EigenPodManager + /// @dev token is not validated when talking to the EigenPodManager + function withdrawSharesAsTokens(address recipient, IStrategy strategy, uint256 shares, IERC20 token) external; + + /// @notice Returns the current shares of `user` in `strategy` + /// @dev strategy must be beaconChainETH when talking to the EigenPodManager + /// @dev returns 0 if the user has negative shares + function stakerStrategyShares(address user, IStrategy strategy) external view returns (uint256 shares); +} \ No newline at end of file diff --git a/src/contracts/interfaces/IStrategyManager.sol b/src/contracts/interfaces/IStrategyManager.sol index 5e95e835f..43fbd53f6 100644 --- a/src/contracts/interfaces/IStrategyManager.sol +++ b/src/contracts/interfaces/IStrategyManager.sol @@ -2,6 +2,7 @@ pragma solidity >=0.5.0; import "./IStrategy.sol"; +import "./IShareManager.sol"; import "./ISlasher.sol"; import "./IDelegationManager.sol"; import "./IEigenPodManager.sol"; @@ -12,7 +13,7 @@ import "./IEigenPodManager.sol"; * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service * @notice See the `StrategyManager` contract itself for implementation details. */ -interface IStrategyManager { +interface IStrategyManager is IShareManager { /// @dev Thrown when total strategies deployed exceeds max. error MaxStrategiesExceeded(); /// @dev Thrown when two array parameters have mismatching lengths. @@ -95,18 +96,6 @@ interface IStrategyManager { bytes memory signature ) external returns (uint256 shares); - /// @notice Used by the DelegationManager to remove a Staker's shares from a particular strategy when entering the withdrawal queue - function removeShares(address staker, IStrategy strategy, uint256 shares) external; - - /// @notice Used by the DelegationManager to award a Staker some shares that have passed through the withdrawal queue - function addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external; - - /// @notice Used by the DelegationManager to convert withdrawn descaled shares to tokens and send them to a recipient - function withdrawSharesAsTokens(address recipient, IStrategy strategy, uint256 shares, IERC20 token) external; - - /// @notice Returns the current shares of `user` in `strategy` - function stakerStrategyShares(address user, IStrategy strategy) external view returns (uint256 shares); - /** * @notice Get all details on the staker's deposits and corresponding shares * @return (staker's strategies, shares in these strategies) @@ -115,6 +104,10 @@ interface IStrategyManager { address staker ) external view returns (IStrategy[] memory, uint256[] memory); + function getStakerStrategyList( + address staker + ) external view returns (IStrategy[] memory); + /// @notice Simple getter function that returns `stakerStrategyList[staker].length`. function stakerStrategyListLength( address staker diff --git a/src/contracts/libraries/SlashingConstants.sol b/src/contracts/libraries/SlashingConstants.sol index 2c61942e3..4ccc5854e 100644 --- a/src/contracts/libraries/SlashingConstants.sol +++ b/src/contracts/libraries/SlashingConstants.sol @@ -1,19 +1,11 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "../interfaces/IAVSDirectory.sol"; - -library SlashingConstants { - /// @dev The initial total magnitude for an operator - uint64 public constant INITIAL_TOTAL_MAGNITUDE = 1e18; - - /// @notice that stakerScalingFactor and totalMagnitude have initial default values to 1e18 as "1" - /// to preserve precision with uint256 math. We use `PRECISION_FACTOR` where these variables are used - /// and divide to represent as 1 - uint256 public constant PRECISION_FACTOR = 1e18; - uint256 public constant PRECISION_FACTOR_SQUARED = 1e36; - - /// @dev Delay before deallocations are completable and can be added back into freeMagnitude - /// This is also the same delay for withdrawals to be completable - uint32 public constant DEALLOCATION_DELAY = 17.5 days; -} +/// @dev the stakerScalingFactor and totalMagnitude have initial default values to 1e18 as "1" +/// to preserve precision with uint256 math. We use `PRECISION_FACTOR` where these variables are used +/// and divide to represent as 1 +uint64 constant PRECISION_FACTOR = 1e18; + +/// @dev Delay before deallocations are completable and can be added back into freeMagnitude +/// This is also the same delay for withdrawals to be completable +uint32 constant DEALLOCATION_DELAY = 17.5 days; diff --git a/src/contracts/libraries/SlashingLib.sol b/src/contracts/libraries/SlashingLib.sol deleted file mode 100644 index 96196558a..000000000 --- a/src/contracts/libraries/SlashingLib.sol +++ /dev/null @@ -1,110 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -library SlashingLib { - /// @dev The initial total magnitude for an operator - uint64 public constant INITIAL_TOTAL_MAGNITUDE = 1e18; - - /// @notice that stakerScalingFactor and totalMagnitude have initial default values to 1e18 as "1" - /// to preserve precision with uint256 math. We use `PRECISION_FACTOR` where these variables are used - /// and divide to represent as 1 - uint256 public constant PRECISION_FACTOR = 1e18; - - /// @dev Delay before deallocations are completable and can be added back into freeMagnitude - /// This is also the same delay for withdrawals to be completable - uint32 public constant DEALLOCATION_DELAY = 17.5 days; - - /** - * @notice helper pure to calculate the scaledShares to store in queue withdrawal - * and the shares to decrement from StrategyManager/EigenPodManager - */ - function calculateSharesToQueueWithdraw( - uint256 sharesToWithdraw, - uint256 stakerScalingFactor, - uint64 totalMagnitude - ) internal pure returns (uint256 sharesToDecrement, uint256 scaledStakerShares) { - // TODO: DOUBLE CHECK THIS BEHAVIOR - // NOTE that to prevent numerator overflow, the max sharesToWithdraw is - // x*1e36 <= 2^256-1 - // => x <= 1.1579e41 - // however we know that the max shares in a strategy is 1e38-1 and all the ETH on the beaconchain staked - // in one eigenPod would be ~3e25. This product here is safe - sharesToDecrement = - (sharesToWithdraw * PRECISION_FACTOR / stakerScalingFactor) * PRECISION_FACTOR / totalMagnitude; - scaledStakerShares = sharesToWithdraw * PRECISION_FACTOR / totalMagnitude; - return (sharesToDecrement, scaledStakerShares); - } - - /** - * @notice helper pure to calculate the shares to complete a withdrawal after slashing - * We use the totalMagnitude of the delegated operator at the time of withdrawal completion to scale the shares - * back to real StrategyManager/EigenPodManager shares - */ - function calculateSharesToCompleteWithdraw( - uint256 scaledStakerShares, - uint64 totalMagnitudeAtCompletion - ) internal pure returns (uint256 shares) { - shares = scaledStakerShares * totalMagnitudeAtCompletion / PRECISION_FACTOR; - } - - /** - * @notice helper to calculate the withdrawable shares for a staker given their shares and the - * current totalMagnitude. `shares` should be the staker's shares in storage in the StrategyManager/EigenPodManager. - */ - function getWithdrawableShares( - address staker, - uint256 stakerScalingFactor, - uint256 shares, - uint64 currTotalMagnitude - ) internal pure returns (uint256) { - return (stakerScalingFactor * shares / PRECISION_FACTOR) * currTotalMagnitude / PRECISION_FACTOR; - } - - /** - * @notice helper pure to return scaledShares given shares and current totalMagnitude. Used for - * adding/removing staker shares from operatorScaledShares - */ - function scaleShares(uint256 shares, uint64 totalMagnitude) internal pure returns (uint256) { - return shares * PRECISION_FACTOR / totalMagnitude; - } - - /** - * @notice helper pure to return real strategy shares given operator scaledShares and current totalMagnitude. - * Used for returning the total delegated shares for an operator and strategy - */ - function descaleShares(uint256 scaledShares, uint64 totalMagnitude) internal pure returns (uint256) { - return scaledShares * totalMagnitude / PRECISION_FACTOR; - } - - /** - * @notice helper to calculate the new staker scaling factor after adding shares. This is only used - * when a staker is depositing through the StrategyManager or EigenPodManager. A stakers scaling factor - * is only updated when they have new deposits and their shares are being increased. - */ - function calculateStakerScalingFactor( - address staker, - uint256 currStakerScalingFactor, - uint64 totalMagnitude, - uint256 existingShares, - uint256 addedShares - ) internal pure returns (uint256) { - uint256 newStakerScalingFactor; - - if (existingShares == 0) { - // existing shares are 0, meaning no existing delegated shares. In this case, the new staker scaling factor - // is re-initialized to - newStakerScalingFactor = PRECISION_FACTOR / (totalMagnitude); - } else { - // TODO: DOUBLE CHECK THIS BEHAVIOR AND OVERFLOWS - // staker scaling factor is initialized to PRECISION_FACTOR(1e18) and totalMagnitude is initialized to INITIAL_TOTAL_MAGNITUDE(1e18) - // and is monotonically decreasing. You can deduce that the newStakerScalingFactor will never decrease to less than the PRECISION_FACTOR - // so this won't round to 0. - newStakerScalingFactor = ( - existingShares * currStakerScalingFactor / PRECISION_FACTOR * totalMagnitude / PRECISION_FACTOR - + addedShares - ) / ((existingShares + addedShares) * totalMagnitude / PRECISION_FACTOR); - } - - return newStakerScalingFactor; - } -} diff --git a/src/contracts/pods/EigenPodManager.sol b/src/contracts/pods/EigenPodManager.sol index 68702c01d..382873161 100644 --- a/src/contracts/pods/EigenPodManager.sol +++ b/src/contracts/pods/EigenPodManager.sol @@ -130,7 +130,7 @@ contract EigenPodManager is staker: podOwner, strategy: beaconChainETHStrategy, // existing shares from standpoint of the DelegationManager - existingShares: currentPodOwnerShares < 0 ? 0 : uint256(currentPodOwnerShares), + existingDepositShares: currentPodOwnerShares < 0 ? 0 : uint256(currentPodOwnerShares), addedShares: uint256(changeInDelegatableShares) }); } @@ -148,14 +148,15 @@ contract EigenPodManager is * @dev Reverts if `shares` is not a whole Gwei amount * @dev The delegation manager validates that the podOwner is not address(0) */ - function removeShares(address podOwner, uint256 shares) external onlyDelegationManager { + function removeShares(address staker, IStrategy strategy, uint256 shares) external onlyDelegationManager { + require(strategy == beaconChainETHStrategy, InvalidStrategy()); require(int256(shares) >= 0, SharesNegative()); require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); - int256 updatedPodOwnerShares = podOwnerShares[podOwner] - int256(shares); - require(updatedPodOwnerShares >= 0, SharesNegative()); - podOwnerShares[podOwner] = updatedPodOwnerShares; + int256 updatedShares = podOwnerShares[staker] - int256(shares); + require(updatedShares >= 0, SharesNegative()); + podOwnerShares[staker] = updatedShares; - emit NewTotalShares(podOwner, updatedPodOwnerShares); + emit NewTotalShares(staker, updatedShares); } /** @@ -167,28 +168,30 @@ contract EigenPodManager is * @dev Reverts if `shares` is not a whole Gwei amount */ function addShares( - address podOwner, + address staker, + IERC20 token, + IStrategy strategy, uint256 shares - ) external onlyDelegationManager returns (uint256 increaseInDelegateableShares, uint256 existingPodShares) { - require(podOwner != address(0), InputAddressZero()); + ) external onlyDelegationManager { + require(strategy == beaconChainETHStrategy, InvalidStrategy()); + require(staker != address(0), InputAddressZero()); require(int256(shares) >= 0, SharesNegative()); require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); - int256 currentPodOwnerShares = podOwnerShares[podOwner]; - int256 updatedPodOwnerShares = currentPodOwnerShares + int256(shares); - podOwnerShares[podOwner] = updatedPodOwnerShares; + int256 currentShares = podOwnerShares[staker]; + int256 updatedShares = currentShares + int256(shares); + podOwnerShares[staker] = updatedShares; - emit PodSharesUpdated(podOwner, int256(shares)); - emit NewTotalShares(podOwner, updatedPodOwnerShares); + emit PodSharesUpdated(staker, int256(shares)); + emit NewTotalShares(staker, updatedShares); - increaseInDelegateableShares = uint256( + uint256 increaseInDelegateableShares = uint256( _calculateChangeInDelegatableShares({ - sharesBefore: currentPodOwnerShares, - sharesAfter: updatedPodOwnerShares + sharesBefore: currentShares, + sharesAfter: updatedShares }) ); - existingPodShares = currentPodOwnerShares < 0 ? 0 : uint256(currentPodOwnerShares); - return (increaseInDelegateableShares, existingPodShares); + // TODO: ADD SHARES BACK TO DM } /** @@ -199,37 +202,46 @@ contract EigenPodManager is * we do not need to update the podOwnerShares if `currentPodOwnerShares` is positive */ function withdrawSharesAsTokens( - address podOwner, - address destination, - uint256 shares + address recipient, + IStrategy strategy, + uint256 shares, + IERC20 ) external onlyDelegationManager { - require(podOwner != address(0), InputAddressZero()); - require(destination != address(0), InputAddressZero()); + require(strategy == beaconChainETHStrategy, InvalidStrategy()); + require(recipient != address(0), InputAddressZero()); require(int256(shares) >= 0, SharesNegative()); require(shares % GWEI_TO_WEI == 0, SharesNotMultipleOfGwei()); - int256 currentPodOwnerShares = podOwnerShares[podOwner]; + int256 currentShares = podOwnerShares[recipient]; // if there is an existing shares deficit, prioritize decreasing the deficit first - if (currentPodOwnerShares < 0) { - uint256 currentShareDeficit = uint256(-currentPodOwnerShares); + if (currentShares < 0) { + uint256 currentShareDeficit = uint256(-currentShares); if (shares > currentShareDeficit) { // get rid of the whole deficit if possible, and pass any remaining shares onto destination - podOwnerShares[podOwner] = 0; + podOwnerShares[recipient] = 0; shares -= currentShareDeficit; - emit PodSharesUpdated(podOwner, int256(currentShareDeficit)); - emit NewTotalShares(podOwner, 0); + emit PodSharesUpdated(recipient, int256(currentShareDeficit)); + emit NewTotalShares(recipient, 0); } else { // otherwise get rid of as much deficit as possible, and return early, since there is nothing left over to forward on - int256 updatedPodOwnerShares = podOwnerShares[podOwner] + int256(shares); - podOwnerShares[podOwner] = updatedPodOwnerShares; - emit PodSharesUpdated(podOwner, int256(shares)); - emit NewTotalShares(podOwner, updatedPodOwnerShares); + int256 updatedShares = podOwnerShares[recipient] + int256(shares); + podOwnerShares[recipient] = updatedShares; + emit PodSharesUpdated(recipient, int256(shares)); + emit NewTotalShares(recipient, updatedShares); return; } } // Actually withdraw to the destination - ownerToPod[podOwner].withdrawRestakedBeaconChainETH(destination, shares); + ownerToPod[recipient].withdrawRestakedBeaconChainETH(recipient, shares); + } + + /// @notice Returns the current shares of `user` in `strategy` + /// @dev strategy must be beaconChainETH when talking to the EigenPodManager + /// @dev returns 0 if the user has negative shares + function stakerStrategyShares(address user, IStrategy strategy) public view returns (uint256 shares) { + require(strategy == beaconChainETHStrategy, InvalidStrategy()); + return podOwnerShares[user] < 0 ? 0 : uint256(podOwnerShares[user]); } // INTERNAL FUNCTIONS diff --git a/src/test/integration/users/User.t.sol b/src/test/integration/users/User.t.sol index dacfad209..f3da74c19 100644 --- a/src/test/integration/users/User.t.sol +++ b/src/test/integration/users/User.t.sol @@ -107,7 +107,7 @@ contract User is PrintUtils { emit log("expecting withdrawal:"); emit log_named_uint("nonce: ", expectedWithdrawals[i].nonce); emit log_named_address("strat: ", address(expectedWithdrawals[i].strategies[0])); - emit log_named_uint("scaledShares: ", expectedWithdrawals[i].scaledShares[0]); + emit log_named_uint("slashingShares: ", expectedWithdrawals[i].slashingShares[0]); } return expectedWithdrawals; From 85a384059f0512ae3dade33117e75fa688f6de6d Mon Sep 17 00:00:00 2001 From: gpsanant Date: Fri, 20 Sep 2024 00:47:15 -0700 Subject: [PATCH 44/47] don't fucking include bindings --- pkg/bindings/AVSDirectory/binding.go | 2914 ++--------------- pkg/bindings/AVSDirectoryStorage/binding.go | 2707 +-------------- pkg/bindings/BeaconChainProofs/binding.go | 2 +- pkg/bindings/DelegationManager/binding.go | 579 +--- .../DelegationManagerStorage/binding.go | 526 +-- pkg/bindings/EIP1271SignatureUtils/binding.go | 4 +- pkg/bindings/EigenPod/binding.go | 4 +- pkg/bindings/EigenPodManager/binding.go | 10 +- .../EigenPodManagerStorage/binding.go | 8 +- pkg/bindings/EigenPodStorage/binding.go | 2 +- pkg/bindings/EigenStrategy/binding.go | 4 +- pkg/bindings/IAVSDirectory/binding.go | 2575 +-------------- pkg/bindings/IDelegationFaucet/binding.go | 16 +- pkg/bindings/IDelegationManager/binding.go | 377 +-- pkg/bindings/IEigenPod/binding.go | 2 +- pkg/bindings/IEigenPodManager/binding.go | 8 +- pkg/bindings/IRewardsCoordinator/binding.go | 657 ++-- pkg/bindings/IStrategy/binding.go | 2 +- pkg/bindings/IStrategyFactory/binding.go | 2 +- pkg/bindings/IStrategyManager/binding.go | 8 +- pkg/bindings/IWhitelister/binding.go | 16 +- pkg/bindings/Merkle/binding.go | 4 +- pkg/bindings/RewardsCoordinator/binding.go | 952 ++---- .../RewardsCoordinatorStorage/binding.go | 834 ++--- pkg/bindings/StrategyBase/binding.go | 4 +- pkg/bindings/StrategyBaseTVLLimits/binding.go | 4 +- pkg/bindings/StrategyFactory/binding.go | 4 +- .../StrategyFactoryStorage/binding.go | 2 +- pkg/bindings/StrategyManager/binding.go | 45 +- .../StrategyManagerStorage/binding.go | 39 +- 30 files changed, 1860 insertions(+), 10451 deletions(-) diff --git a/pkg/bindings/AVSDirectory/binding.go b/pkg/bindings/AVSDirectory/binding.go index 69917ce38..308d6a764 100644 --- a/pkg/bindings/AVSDirectory/binding.go +++ b/pkg/bindings/AVSDirectory/binding.go @@ -29,19 +29,6 @@ var ( _ = abi.ConvertType ) -// IAVSDirectoryMagnitudeAdjustment is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryMagnitudeAdjustment struct { - Strategy common.Address - OperatorSets []IAVSDirectoryOperatorSet - MagnitudeDiffs []uint64 -} - -// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 -} - // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -51,8 +38,8 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryMetaData contains all meta data concerning the AVSDirectory contract. var AVSDirectoryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ALLOCATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAGNITUDE_ADJUSTMENT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_PENDING_UPDATES\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"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\":\"allocate\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAdjustment[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeDiffs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"allocatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"allocatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateMagnitudeAdjustmentDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"adjustments\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAdjustment[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeDiffs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deallocate\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deallocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAdjustment[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeDiffs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"allocatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"freeMagnitude\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetMemberCount\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"registered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"lastDeregisteredTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOf\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOf\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"bipsToSlash\",\"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\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateFreeMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToComplete\",\"type\":\"uint8[]\",\"internalType\":\"uint8[]\"}],\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeAllocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToAllocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeDeallocationCompleted\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"freeMagnitudeAdded\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeQueueDeallocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToDeallocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"completableTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"bipsToSlash\",\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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}]", - Bin: "0x60c06040523480156200001157600080fd5b50604051620062d8380380620062d8833981016040819052620000349162000118565b6001600160a01b0381166080526200004b62000056565b504660a0526200014a565b600054610100900460ff1615620000c35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000116576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012b57600080fd5b81516001600160a01b03811681146200014357600080fd5b9392505050565b60805160a05161615362000185600039600061295f0152600081816107fd01528181610e4e015281816111d8015261163701526161536000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80638522fcb111610182578063c1a8e2c5116100e9578063dce974b9116100a2578063ef2dfa8d1161007c578063ef2dfa8d14610853578063f2fde38b14610866578063f698da2514610879578063fabc1cbc1461088157600080fd5b8063dce974b9146107d1578063df5cf723146107f8578063ec76f4421461081f57600080fd5b8063c1a8e2c51461071f578063c825fe6814610732578063cbdf0e4214610759578063d79aceab1461076c578063da2ff05d14610793578063dae226b6146107a657600080fd5b8063a98fb3551161013b578063a98fb355146106c3578063aec205c5146106d6578063afe02ed5146106de578063b2841d48146106f1578063b3e52eaa14610704578063bd74a06c1461070c57600080fd5b80638522fcb11461062e578063886f1195146106415780638da5cb5b1461066c5780638de549441461067d578063955e66961461069d578063a1060c88146106b057600080fd5b806346fb3a00116102415780636fbb031c116101fa5780637673e93a116101d45780637673e93a146105a35780637b205de3146105c657806384b78fc2146105ed57806384d76f7b1461060057600080fd5b80636fbb031c146105695780637019670814610588578063715018a61461059b57600080fd5b806346fb3a001461048157806349075da3146104af578063595c6a67146104ea5780635ac86ab7146104f25780635c975abb146105155780635fd6abfd1461051d57600080fd5b80631e68134e116102935780631e68134e1461037557806320606b70146103d257806333429a6a146104075780633367a33c1461042d578063374823b5146104405780633fee332d1461046e57600080fd5b80630d5387c5146102db57806310d67a2f146103045780631352c3e614610319578063136439dd1461033c5780631794bb3c1461034f5780631e2199e214610362575b600080fd5b6102ee6102e9366004614fe1565b610894565b6040516102fb9190615016565b60405180910390f35b61031761031236600461507c565b6109d9565b005b61032c610327366004615120565b610a95565b60405190151581526020016102fb565b61031761034a3660046151a5565b610b25565b61031761035d3660046151be565b610c64565b6103176103703660046152f5565b610d8e565b6103b6610383366004615370565b609e60209081526000938452604080852082529284528284209052825290205460ff811690610100900463ffffffff1682565b60408051921515835263ffffffff9091166020830152016102fb565b6103f97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020016102fb565b61041a6104153660046153b7565b6110ae565b60405161ffff90911681526020016102fb565b61031761043b36600461541b565b6111b6565b61032c61044e36600461549b565b609960209081526000928352604080842090915290825290205460ff1681565b61031761047c3660046154c7565b611304565b61032c61048f36600461549b565b60a560209081526000928352604080842090915290825290205460ff1681565b6104dd6104bd366004615555565b609860209081526000928352604080842090915290825290205460ff1681565b6040516102fb91906155a4565b61031761154e565b61032c6105003660046155cc565b606654600160ff9092169190911b9081161490565b6066546103f9565b61055161052b366004615555565b60a16020908152600092835260408084209091529082529020546001600160401b031681565b6040516001600160401b0390911681526020016102fb565b610573621baf8081565b60405163ffffffff90911681526020016102fb565b61031761059636600461541b565b611615565b610317611733565b61032c6105b136600461507c565b609a6020526000908152604090205460ff1681565b6103f97fb3cc2868468e0461dcbecef0a4fcb7a8ef26c2e1f3e59c9d0de6afcc74448a2481565b6103176105fb3660046155ef565b611747565b61032c61060e366004615671565b609b60209081526000928352604080842090915290825290205460ff1681565b6103f961063c3660046156a6565b6117b9565b606554610654906001600160a01b031681565b6040516001600160a01b0390911681526020016102fb565b6033546001600160a01b0316610654565b61069061068b36600461549b565b61181e565b6040516102fb919061570c565b6103f96106ab3660046156a6565b61185f565b6103f96106be366004615732565b61189f565b6103176106d1366004615778565b611909565b610317611950565b6103176106ec3660046157e9565b611a18565b6103f96106ff3660046156a6565b611be5565b6103f9600181565b61031761071a36600461582a565b611c25565b61031761072d3660046158ab565b612158565b6103f97f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b6103f961076736600461507c565b61218d565b6103f97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b61032c6107a1366004615120565b6121ae565b6103f96107b4366004615671565b609c60209081526000928352604080842090915290825290205481565b6103f97f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b6106547f000000000000000000000000000000000000000000000000000000000000000081565b61031761082d3660046151a5565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b6103176108613660046158ff565b6121da565b61031761087436600461507c565b612583565b6103f96125f9565b61031761088f3660046151a5565b612608565b6001600160a01b0383166000908152609d602052604081206060919084906108bb90612764565b6108c59190615980565b9050808311156108d3578092505b826001600160401b038111156108eb576108eb615099565b60405190808252806020026020018201604052801561093057816020015b60408051808201909152600080825260208201528152602001906001900390816109095790505b50915060005b838110156109d0576109a261096c61094e8388615997565b6001600160a01b0389166000908152609d602052604090209061276e565b60408051808201909152600080825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b8382815181106109b4576109b46159af565b6020026020010181905250806109c9906159c5565b9050610936565b50509392505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5091906159e0565b6001600160a01b0316336001600160a01b031614610a895760405162461bcd60e51b8152600401610a80906159fd565b60405180910390fd5b610a928161277a565b50565b80516001600160a01b039081166000908152609e6020908152604080832093861683529281528282208185015163ffffffff908116845290825283832084518086019095525460ff8116151585526101009004169083015290610af884846121ae565b80610b1b575042621baf808260200151610b129190615a47565b63ffffffff1610155b9150505b92915050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b919190615a6f565b610bad5760405162461bcd60e51b8152600401610a8090615a91565b60665481811614610c265760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610a80565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff1615808015610c845750600054600160ff909116105b80610c9e5750303b158015610c9e575060005460ff166001145b610d015760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a80565b6000805460ff191660011790558015610d24576000805461ff0019166101001790555b610d2e8383612871565b610d3661295b565b609755610d4284612a24565b8015610d88576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60665460019060029081161415610db75760405162461bcd60e51b8152600401610a8090615ad9565b4282604001511015610e2f5760405162461bcd60e51b815260206004820152604760248201526000805160206160fe83398151915260448201527f70657261746f72536574733a206f70657261746f72207369676e617475726520606482015266195e1c1a5c995960ca1b608482015260a401610a80565b6040516336b87bd760e11b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190615a6f565b610f385760405162461bcd60e51b815260206004820152605660248201526000805160206160fe83398151915260448201527f70657261746f72536574733a206f70657261746f72206e6f7420726567697374606482015275195c9959081d1bc8115a59d95b93185e595c881e595d60521b608482015260a401610a80565b336000908152609a602052604090205460ff16610fbf5760405162461bcd60e51b815260206004820152604b60248201526000805160206160fe83398151915260448201527f70657261746f72536574733a20415653206973206e6f7420616e206f7065726160648201526a746f72207365742041565360a81b608482015260a401610a80565b6001600160a01b038516600090815260996020908152604080832085830151845290915290205460ff161561104a5760405162461bcd60e51b815260206004820152603f60248201526000805160206160fe83398151915260448201527f70657261746f72536574733a2073616c7420616c7265616479207370656e74006064820152608401610a80565b61106a856110633387878760200151886040015161185f565b8451612a76565b6001600160a01b03851660009081526099602090815260408083208583015184529091529020805460ff191660011790556110a785338686612c30565b5050505050565b6001600160a01b038085166000908152609f60209081526040808320938616835292905290812081906110e19084612fff565b6001600160a01b03808816600090815260a06020908152604080832093891683529281529181209293509161117e918691908490611121908b018b61507c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008960200160208101906111569190615b10565b63ffffffff1663ffffffff168152602001908152602001600020612fff90919063ffffffff16565b9050816001600160401b0316612710826001600160401b03166111a19190615b2b565b6111ab9190615b60565b979650505050505050565b6040516369066d9160e01b81526001600160a01b0385811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906369066d9190602401602060405180830381865afa158015611221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124591906159e0565b9050336001600160a01b03821614611264576112648186868686613057565b6000611273621baf8042615a47565b905060005b848110156112fb576112bd87878784818110611296576112966159af565b90506020028101906112a89190615b82565b6112b690602081019061507c565b600061320b565b6112eb878787848181106112d3576112d36159af565b90506020028101906112e59190615b82565b846133b2565b6112f4816159c5565b9050611278565b50505050505050565b6066546001906002908116141561132d5760405162461bcd60e51b8152600401610a8090615ad9565b8151516113c557336001600160a01b038716146113c05760405162461bcd60e51b815260206004820152604560248201527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a2063616c6c6572206d757374206265206f70656064820152643930ba37b960d91b608482015260a401610a80565b61153a565b42826040015110156114505760405162461bcd60e51b815260206004820152604860248201527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a206f70657261746f72207369676e617475726560648201526708195e1c1a5c995960c21b608482015260a401610a80565b6001600160a01b038616600090815260996020908152604080832085830151845290915290205460ff16156114ef576040805162461bcd60e51b81526020600482015260248101919091527f4156534469726563746f72792e666f7263654465726567697374657246726f6d60448201527f4f70657261746f72536574733a2073616c7420616c7265616479207370656e746064820152608401610a80565b6115088661106387878787602001518860400151611be5565b6001600160a01b03861660009081526099602090815260408083208583015184529091529020805460ff191660011790555b61154685878686613983565b505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611596573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ba9190615a6f565b6115d65760405162461bcd60e51b8152600401610a8090615a91565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6040516369066d9160e01b81526001600160a01b0385811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906369066d9190602401602060405180830381865afa158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a491906159e0565b9050336001600160a01b038216146116c3576116c38186868686613057565b60006116d2621baf8042615a47565b905060005b848110156112fb576116f587878784818110611296576112966159af565b6117238787878481811061170b5761170b6159af565b905060200281019061171d9190615b82565b84613b65565b61172c816159c5565b90506116d7565b61173b614157565b6117456000612a24565b565b60005b83811015611546576117a986868684818110611768576117686159af565b905060200201602081019061177d919061507c565b85858581811061178f5761178f6159af565b90506020020160208101906117a491906155cc565b61320b565b6117b2816159c5565b905061174a565b60006118147fb3cc2868468e0461dcbecef0a4fcb7a8ef26c2e1f3e59c9d0de6afcc74448a2487878787876040516020016117f996959493929190615c9e565b604051602081830303815290604052805190602001206141b1565b9695505050505050565b60408051808201909152600080825260208201526001600160a01b0383166000908152609d602052604090206118589061096c908461276e565b9392505050565b60006118147f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92987878787876040516020016117f996959493929190615df8565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290526000906119009060c0016117f9565b95945050505050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051611944929190615e38565b60405180910390a25050565b336000908152609a602052604090205460ff16156119d65760405162461bcd60e51b815260206004820152603e60248201527f4156534469726563746f72792e6265636f6d654f70657261746f72536574415660448201527f533a20616c726561647920616e206f70657261746f72207365742041565300006064820152608401610a80565b336000818152609a6020526040808220805460ff19166001179055517f702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf9190a2565b60005b81811015611be057336000908152609b6020526040812090848484818110611a4557611a456159af565b9050602002016020810190611a5a9190615b10565b63ffffffff16815260208101919091526040016000205460ff1615611ae75760405162461bcd60e51b815260206004820152603b60248201527f4156534469726563746f72792e6372656174654f70657261746f725365743a2060448201527f6f70657261746f722073657420616c72656164792065786973747300000000006064820152608401610a80565b336000908152609b60205260408120600191858585818110611b0b57611b0b6159af565b9050602002016020810190611b209190615b10565b63ffffffff1663ffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c6040518060400160405280336001600160a01b03168152602001858585818110611b9e57611b9e6159af565b9050602002016020810190611bb39190615b10565b63ffffffff169052604051611bc8919061570c565b60405180910390a1611bd9816159c5565b9050611a1b565b505050565b60006118147f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49587878787876040516020016117f996959493929190615df8565b611c52856040518060400160405280336001600160a01b031681526020018763ffffffff16815250610a95565b611ccf5760405162461bcd60e51b815260206004820152604260248201527f4156534469726563746f72792e736c6173684f70657261746f723a206f70657260448201527f61746f72206e6f7420736c61736861626c6520666f72206f70657261746f7253606482015261195d60f21b608482015260a401610a80565b60005b82811015611546576001600160a01b038616600090815260a0602052604081208190611d5d90429083898988818110611d0d57611d0d6159af565b9050602002016020810190611d22919061507c565b6001600160a01b0316815260208082019290925260409081016000908120338252835281812063ffffffff808e16835293522091906141f816565b9050612710611d796001600160401b03831661ffff8716615b2b565b611d839190615b60565b6001600160a01b038916600090815260a060205260408120919350611e139142916001600160401b03861691908a8a89818110611dc257611dc26159af565b9050602002016020810190611dd7919061507c565b6001600160a01b0316815260208082019290925260409081016000908120338252835281812063ffffffff808f16835293522092919061429d16565b506001600160a01b038716600090815260a46020526040812081878786818110611e3f57611e3f6159af565b9050602002016020810190611e54919061507c565b6001600160a01b0316815260208082019290925260409081016000908120338252835281812063ffffffff8b1682529092529020549050805b801561205e576001600160a01b038916600090815260a46020526040812081898988818110611ebe57611ebe6159af565b9050602002016020810190611ed3919061507c565b6001600160a01b0316815260208082019290925260409081016000908120338252835281812063ffffffff8d1682529092529020611f12600184615980565b81548110611f2257611f226159af565b60009182526020808320909101546001600160a01b038d16835260a290915260408220909250818a8a89818110611f5b57611f5b6159af565b9050602002016020810190611f70919061507c565b6001600160a01b03166001600160a01b031681526020019081526020016000208281548110611fa157611fa16159af565b6000918252602090912001805490915063ffffffff428116600160401b9092041610611fce57505061205e565b805460009061271090611fee906001600160401b031661ffff8b16615b2b565b611ff89190615b60565b8254909150819083906000906120189084906001600160401b0316615e67565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555080866120489190615e8f565b95505050508061205790615eb1565b9050611e8d565b50506001600160a01b0387166000908152609f602052604081206121449142916001600160401b038516916120da91908a8a898181106120a0576120a06159af565b90506020020160208101906120b5919061507c565b6001600160a01b03166001600160a01b03168152602001908152602001600020614339565b6120e49190615ec8565b6001600160a01b038a166000908152609f602052604081209089898881811061210f5761210f6159af565b9050602002016020810190612124919061507c565b6001600160a01b0316815260208101919091526040016000209190614372565b50505080612151906159c5565b9050611cd2565b606654600190600290811614156121815760405162461bcd60e51b8152600401610a8090615ad9565b610d8833858585613983565b6001600160a01b0381166000908152609d60205260408120610b1f90612764565b60006118586121bc8361438d565b6001600160a01b0385166000908152609d60205260409020906143f2565b606654600190600290811614156122035760405162461bcd60e51b8152600401610a8090615ad9565b336000908152609a602052604090205460ff1661229c5760405162461bcd60e51b815260206004820152604b60248201527f4156534469726563746f72792e6d6967726174654f70657261746f7273546f4f60448201527f70657261746f72536574733a20415653206973206e6f7420616e206f7065726160648201526a746f72207365742041565360a81b608482015260a401610a80565b60005b84811015611546576001336000908152609860205260408120908888858181106122cb576122cb6159af565b90506020020160208101906122e0919061507c565b6001600160a01b0316815260208101919091526040016000205460ff16600181111561230e5761230e61558e565b146123ba5760405162461bcd60e51b815260206004820152606a60248201527f4156534469726563746f72792e6d6967726174654f70657261746f7273546f4f60448201527f70657261746f72536574733a206f70657261746f7220616c7265616479206d6960648201527f677261746564206f72206e6f742061206c656761637920726567697374657265608482015269321037b832b930ba37b960b11b60a482015260c401610a80565b61240e8686838181106123cf576123cf6159af565b90506020020160208101906123e4919061507c565b338686858181106123f7576123f76159af565b90506020028101906124099190615ee8565b612c30565b33600090815260986020526040812081888885818110612430576124306159af565b9050602002016020810190612445919061507c565b6001600160a01b031681526020810191909152604001600020805460ff1916600183818111156124775761247761558e565b02179055503386868381811061248f5761248f6159af565b90506020020160208101906124a4919061507c565b6001600160a01b03167ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4160006040516124dd91906155a4565b60405180910390a3338686838181106124f8576124f86159af565b905060200201602081019061250d919061507c565b6001600160a01b03167f54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01868685818110612549576125496159af565b905060200281019061255b9190615ee8565b604051612569929190615f31565b60405180910390a38061257b816159c5565b91505061229f565b61258b614157565b6001600160a01b0381166125f05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a80565b610a9281612a24565b600061260361295b565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561265b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267f91906159e0565b6001600160a01b0316336001600160a01b0316146126af5760405162461bcd60e51b8152600401610a80906159fd565b60665419811960665419161461272d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610a80565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610c59565b6000610b1f825490565b6000611858838361440a565b6001600160a01b0381166128085760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610a80565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031615801561289257506001600160a01b03821615155b6129145760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610a80565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26129578261277a565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000046141561298c575060975490565b50604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383163b15612b9057604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90612ab69086908690600401615f4d565b602060405180830381865afa158015612ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af79190615faa565b6001600160e01b03191614611be05760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610a80565b826001600160a01b0316612ba48383614434565b6001600160a01b031614611be05760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610a80565b60005b818110156110a75760006040518060400160405280866001600160a01b03168152602001858585818110612c6957612c696159af565b9050602002016020810190612c7e9190615b10565b63ffffffff1690526001600160a01b0386166000908152609b60205260408120919250858585818110612cb357612cb36159af565b9050602002016020810190612cc89190615b10565b63ffffffff16815260208101919091526040016000205460ff16612d5f5760405162461bcd60e51b815260206004820152604260248201527f4156534469726563746f72792e5f72656769737465724f70657261746f72546f60448201527f4f70657261746f72536574733a20696e76616c6964206f70657261746f722073606482015261195d60f21b608482015260a401610a80565b612d6986826121ae565b15612e025760405162461bcd60e51b815260206004820152605960248201527f4156534469726563746f72792e5f72656769737465724f70657261746f72546f60448201527f4f70657261746f72536574733a206f70657261746f7220616c7265616479207260648201527f65676973746572656420746f206f70657261746f722073657400000000000000608482015260a401610a80565b6001600160a01b0385166000908152609c6020526040812090858585818110612e2d57612e2d6159af565b9050602002016020810190612e429190615b10565b63ffffffff1663ffffffff16815260200190815260200160002060008154612e69906159c5565b90915550612e97612e798261438d565b6001600160a01b0388166000908152609d6020526040902090614458565b506001600160a01b038086166000908152609e60209081526040808320938a16835292905290812081868686818110612ed257612ed26159af565b9050602002016020810190612ee79190615b10565b63ffffffff1681526020810191909152604001600020805490915060ff1615612f9e5760405162461bcd60e51b815260206004820152605a60248201527f4156534469726563746f72792e5f72656769737465724f70657261746f72546f60448201527f4f70657261746f72536574733a206f70657261746f7220616c7265616479207260648201527f65676973746572656420666f72206f70657261746f7220736574000000000000608482015260a401610a80565b805460ff191660011781556040516001600160a01b038816907f43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e90612fe490859061570c565b60405180910390a2505080612ff8906159c5565b9050612c33565b81546000908161301185858385614464565b9050801561304c5761303685613028600184615980565b600091825260209091200190565b54600160201b90046001600160e01b0316611900565b600095945050505050565b42816040013510156130dd5760405162461bcd60e51b815260206004820152604360248201527f4156534469726563746f72792e5f766572696679416c6c6f6361746f7253696760448201527f6e61747572653a20616c6c6f6361746f72207369676e617475726520657870696064820152621c995960ea1b608482015260a401610a80565b6001600160a01b038516600090815260a56020908152604080832084830135845290915290205460ff161561316f5760405162461bcd60e51b815260206004820152603260248201527f4156534469726563746f72792e5f766572696679416c6c6f6361746f725369676044820152711b985d1d5c994e881cd85b1d081cdc195b9d60721b6064820152608401610a80565b6000613186858585856020013586604001356117b9565b90506131d186826131978580615fd4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a7692505050565b506001600160a01b03909416600090815260a56020908152604080832096820135835295905293909320805460ff19166001179055505050565b6001600160a01b03808416600081815260a3602090815260408083209487168084529482528083205493835260a2825280832094835293905291822054909160ff84161561325a57600061325d565b60ff5b90505b818310801561327457508360ff168160ff16105b1561337f576001600160a01b03808716600090815260a26020908152604080832093891683529290529081208054859081106132b2576132b26159af565b6000918252602091829020604080518082019091529101546001600160401b038116825263ffffffff600160401b9091048116928201839052909250421611156132fc575061337f565b80516001600160a01b03808916600090815260a160209081526040808320938b168352929052908120805490919061333e9084906001600160401b0316615e8f565b92506101000a8154816001600160401b0302191690836001600160401b031602179055508361336c906159c5565b93506133778261601a565b915050613260565b50506001600160a01b03938416600090815260a36020908152604080832095909616825293909352929091209190915550565b60006133c1602084018461507c565b90506133d06040840184615ee8565b90506133df602085018561603a565b9050146134665760405162461bcd60e51b815260206004820152604960248201527f4156534469726563746f72792e5f6465616c6c6f636174653a206f706572617460448201527f6f725365747320616e64206d61676e69747564654469666673206c656e677468606482015268040dad2e6dac2e8c6d60bb1b608482015260a401610a80565b366000613476602086018661603a565b9150915060005b818110156112fb576001600160a01b03808816600090815260a060209081526040808320938816835292905290812061354f904290838787878181106134c5576134c56159af565b6134db926020604090920201908101915061507c565b6001600160a01b03166001600160a01b03168152602001908152602001600020600087878781811061350f5761350f6159af565b90506040020160200160208101906135279190615b10565b63ffffffff1663ffffffff1681526020019081526020016000206141f890919063ffffffff16565b905060006135606040890189615ee8565b84818110613570576135706159af565b90506020020160208101906135859190616083565b6001600160401b0316116136015760405162461bcd60e51b815260206004820152603e60248201527f4156534469726563746f72792e5f6465616c6c6f636174653a206d61676e697460448201527f75646544696666206d7573742062652067726561746572207468616e203000006064820152608401610a80565b6001600160401b0381166136186040890189615ee8565b84818110613628576136286159af565b905060200201602081019061363d9190616083565b6001600160401b031611156136ca5760405162461bcd60e51b815260206004820152604760248201527f4156534469726563746f72792e5f6465616c6c6f636174653a2063616e6e6f7460448201527f206465616c6c6f63617465206d6f7265207468616e207768617420697320616c6064820152661b1bd8d85d195960ca1b608482015260a401610a80565b6137d2426136db60408a018a615ee8565b858181106136eb576136eb6159af565b90506020020160208101906137009190616083565b6001600160a01b03808c16600090815260a060209081526040808320938c1683529290529081206001600160401b03929092169190888888818110613747576137476159af565b61375d926020604090920201908101915061507c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888888818110613791576137916159af565b90506040020160200160208101906137a99190615b10565b63ffffffff1663ffffffff16815260200190815260200160002061429d9092919063ffffffff16565b6137f488868686868181106137e9576137e96159af565b9050604002016144ba565b6001600160a01b03888116600090815260a260209081526040808320938916835292905281902080548251808401845290928190613834908c018c615ee8565b87818110613844576138446159af565b90506020020160208101906138599190616083565b6001600160401b03908116825263ffffffff808c166020938401528454600181018655600095865283862085519101805495850151909216600160401b026bffffffffffffffffffffffff19909516921691909117929092179091556001600160a01b03808c16835260a482526040808420918a16845291528120908686868181106138e7576138e76159af565b6138fd926020604090920201908101915061507c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000868686818110613931576139316159af565b90506040020160200160208101906139499190615b10565b63ffffffff1681526020808201929092526040016000908120805460018101825590825291902001555061397c816159c5565b905061347d565b60005b818110156110a75760006040518060400160405280876001600160a01b031681526020018585858181106139bc576139bc6159af565b90506020020160208101906139d19190615b10565b63ffffffff16905290506139e585826121ae565b613a7d5760405162461bcd60e51b815260206004820152605960248201527f4156534469726563746f72792e5f646572656769737465724f70657261746f7260448201527f46726f6d4f70657261746f725365743a206f70657261746f72206e6f7420726560648201527f676973746572656420666f72206f70657261746f722073657400000000000000608482015260a401610a80565b6001600160a01b0386166000908152609c6020526040812090858585818110613aa857613aa86159af565b9050602002016020810190613abd9190615b10565b63ffffffff1663ffffffff16815260200190815260200160002060008154613ae490615eb1565b90915550613b12613af48261438d565b6001600160a01b0387166000908152609d6020526040902090614727565b50846001600160a01b03167fad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe82604051613b4c919061570c565b60405180910390a250613b5e816159c5565b9050613986565b6000613b74602084018461507c565b9050366000613b86602086018661603a565b6001600160a01b03808916600090815260a1602090815260408083209389168352929052908120549294509092506001600160401b03909116905b82811015614107576000613bd86040890189615ee8565b83818110613be857613be86159af565b9050602002016020810190613bfd9190616083565b6001600160401b031611613c855760405162461bcd60e51b815260206004820152604360248201527f4156534469726563746f72792e7175657565416c6c6f636174696f6e733a206d60448201527f61676e697475646544696666206d75737420626520677265617465722074686160648201526206e20360ec1b608482015260a401610a80565b613c926040880188615ee8565b82818110613ca257613ca26159af565b9050602002016020810190613cb79190616083565b6001600160401b0316826001600160401b03161015613d575760405162461bcd60e51b815260206004820152605060248201527f4156534469726563746f72792e7175657565416c6c6f636174696f6e733a206960448201527f6e73756666696369656e7420617661696c61626c652066726565206d61676e6960648201526f7475646520746f20616c6c6f6361746560801b608482015260a401610a80565b6001600160a01b03808916600090815260a06020908152604080832093891683529290529081208190613e2390429083898988818110613d9957613d996159af565b613daf926020604090920201908101915061507c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000898988818110613de357613de36159af565b9050604002016020016020810190613dfb9190615b10565b63ffffffff1663ffffffff16815260200190815260200160002061473390919063ffffffff16565b91509150816001600160e01b03166000141580613e3f57508015155b15613fa5576001600160a01b03808b16600090815260a060209081526040808320938b168352929052908120613f0191888887818110613e8157613e816159af565b613e97926020604090920201908101915061507c565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888887818110613ecb57613ecb6159af565b9050604002016020016020810190613ee39190615b10565b63ffffffff1663ffffffff1681526020019081526020016000205490565b613f0c600183615997565b14613fa55760405162461bcd60e51b815260206004820152605d60248201527f4156534469726563746f72792e7175657565416c6c6f636174696f6e733a206560448201527f7863656564206d61782070656e64696e6720616c6c6f636174696f6e7320616c60648201527f6c6f77656420666f72206f702c206f705365742c207374726174656779000000608482015260a401610a80565b6140b388613fb660408c018c615ee8565b86818110613fc657613fc66159af565b9050602002016020810190613fdb9190616083565b613fee906001600160401b03168561609e565b6001600160a01b03808e16600090815260a060209081526040808320938e168352929052908120908a8a89818110614028576140286159af565b61403e926020604090920201908101915061507c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a89818110614072576140726159af565b905060400201602001602081019061408a9190615b10565b63ffffffff1663ffffffff1681526020019081526020016000206143729092919063ffffffff16565b506140c3905060408a018a615ee8565b848181106140d3576140d36159af565b90506020020160208101906140e89190616083565b6140f29085615e67565b9350505080614100906159c5565b9050613bc1565b506001600160a01b03968716600090815260a1602090815260408083209690991682529490945295909220805467ffffffffffffffff19166001600160401b039096169590951790945550505050565b6033546001600160a01b031633146117455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a80565b60006141bb61295b565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b815460009081816005811115614255576000614213846147ec565b61421d9085615980565b60008881526020902090915081015463ffffffff908116908716101561424557809150614253565b614250816001615997565b92505b505b600061426387878585614464565b905080156142905761427a87613028600184615980565b54600160201b90046001600160e01b03166111ab565b6000979650505050505050565b6000806142aa8585614733565b91509150816001600160e01b031660001480156142c5575080155b156142cf57506000195b84545b80821015611546576000868152602090208201805485908290600490614309908490600160201b90046001600160e01b0316615ec8565b92506101000a8154816001600160e01b0302191690836001600160e01b03160217905550826001019250506142d2565b805460009080156143695761435383613028600184615980565b54600160201b90046001600160e01b0316611858565b60009392505050565b6000806143808585856148d1565b915091505b935093915050565b60008160000151826020015163ffffffff166040516020016143da92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610b1f906160c0565b60008181526001830160205260408120541515611858565b6000826000018281548110614421576144216159af565b9060005260206000200154905092915050565b60008060006144438585614a77565b9150915061445081614ae4565b509392505050565b60006118588383614c9f565b60005b8183101561445057600061447b8484614cee565b60008781526020902090915063ffffffff86169082015463ffffffff1611156144a6578092506144b4565b6144b1816001615997565b93505b50614467565b6001600160a01b03808416600090815260a4602090815260408083209386168352928152918120909182906144f19085018561507c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008360200160208101906145269190615b10565b63ffffffff1681526020810191909152604001600020549050805b80156110a7576001600160a01b03808616600090815260a46020908152604080832093881683529281529181209091829061457e9087018761507c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008560200160208101906145b39190615b10565b63ffffffff16815260208101919091526040016000206145d4600184615980565b815481106145e4576145e46159af565b60009182526020808320909101546001600160a01b03808a16845260a283526040808520918a168552925290822080549193509083908110614628576146286159af565b6000918252602091829020604080518082019091529101546001600160401b038116825263ffffffff600160401b90910481169282018390529092504216111561470d5760016146788486615980565b614683906001615997565b106147085760405162461bcd60e51b815260206004820152604960248201527f4156534469726563746f72792e5f636865636b5175657565644465616c6c6f6360448201527f6174696f6e733a2065786365656473206d61782070656e64696e67206465616c6064820152686c6f636174696f6e7360b81b608482015260a401610a80565b614714565b50506110a7565b50508061472090615eb1565b9050614541565b60006118588383614d09565b8154600090819081816005811115614792576000614750846147ec565b61475a9085615980565b60008981526020902090915081015463ffffffff908116908816101561478257809150614790565b61478d816001615997565b92505b505b60006147a088888585614464565b905080156147d8576147b788613028600184615980565b54600160201b90046001600160e01b03166147d3600183615980565b6147dc565b6000805b95509550505050505b9250929050565b6000816147fb57506000919050565b6000600161480884614dfc565b901c6001901b9050600181848161482157614821615b4a565b048201901c9050600181848161483957614839615b4a565b048201901c9050600181848161485157614851615b4a565b048201901c9050600181848161486957614869615b4a565b048201901c9050600181848161488157614881615b4a565b048201901c9050600181848161489957614899615b4a565b048201901c905060018184816148b1576148b1615b4a565b048201901c9050611858818285816148cb576148cb615b4a565b04614e90565b825460009081908015614a1e5760006148ef87613028600185615980565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b0316602084015291925090871610156149705760405162461bcd60e51b815260206004820152601b60248201527f436865636b706f696e743a2064656372656173696e67206b65797300000000006044820152606401610a80565b8563ffffffff16816000015163ffffffff1614156149bf578461499888613028600186615980565b80546001600160e01b0392909216600160201b0263ffffffff909216919091179055614a0e565b6040805180820190915263ffffffff80881682526001600160e01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160201b029216919091179101555b6020015192508391506143859050565b50506040805180820190915263ffffffff80851682526001600160e01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160201b029190931617920191909155905081614385565b600080825160411415614aae5760208301516040840151606085015160001a614aa287828585614ea6565b945094505050506147e5565b825160401415614ad85760208301516040840151614acd868383614f93565b9350935050506147e5565b506000905060026147e5565b6000816004811115614af857614af861558e565b1415614b015750565b6001816004811115614b1557614b1561558e565b1415614b635760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610a80565b6002816004811115614b7757614b7761558e565b1415614bc55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a80565b6003816004811115614bd957614bd961558e565b1415614c325760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a80565b6004816004811115614c4657614c4661558e565b1415610a925760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610a80565b6000818152600183016020526040812054614ce657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b1f565b506000610b1f565b6000614cfd6002848418615b60565b61185890848416615997565b60008181526001830160205260408120548015614df2576000614d2d600183615980565b8554909150600090614d4190600190615980565b9050818114614da6576000866000018281548110614d6157614d616159af565b9060005260206000200154905080876000018481548110614d8457614d846159af565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614db757614db76160e7565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b1f565b6000915050610b1f565b600080608083901c15614e1157608092831c92015b604083901c15614e2357604092831c92015b602083901c15614e3557602092831c92015b601083901c15614e4757601092831c92015b600883901c15614e5957600892831c92015b600483901c15614e6b57600492831c92015b600283901c15614e7d57600292831c92015b600183901c15610b1f5760010192915050565b6000818310614e9f5781611858565b5090919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115614edd5750600090506003614f8a565b8460ff16601b14158015614ef557508460ff16601c14155b15614f065750600090506004614f8a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614f5a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614f8357600060019250925050614f8a565b9150600090505b94509492505050565b6000806001600160ff1b03831681614fb060ff86901c601b615997565b9050614fbe87828885614ea6565b935093505050935093915050565b6001600160a01b0381168114610a9257600080fd5b600080600060608486031215614ff657600080fd5b833561500181614fcc565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b8281101561506f5761505f84835180516001600160a01b0316825260209081015163ffffffff16910152565b9284019290850190600101615033565b5091979650505050505050565b60006020828403121561508e57600080fd5b813561185881614fcc565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156150d1576150d1615099565b60405290565b604051601f8201601f191681016001600160401b03811182821017156150ff576150ff615099565b604052919050565b803563ffffffff8116811461511b57600080fd5b919050565b600080828403606081121561513457600080fd5b833561513f81614fcc565b92506040601f198201121561515357600080fd5b50604051604081018181106001600160401b038211171561517657615176615099565b604052602084013561518781614fcc565b815261519560408501615107565b6020820152809150509250929050565b6000602082840312156151b757600080fd5b5035919050565b6000806000606084860312156151d357600080fd5b83356151de81614fcc565b925060208401356151ee81614fcc565b929592945050506040919091013590565b60008083601f84011261521157600080fd5b5081356001600160401b0381111561522857600080fd5b6020830191508360208260051b85010111156147e557600080fd5b60006060828403121561525557600080fd5b61525d6150af565b905081356001600160401b038082111561527657600080fd5b818401915084601f83011261528a57600080fd5b813560208282111561529e5761529e615099565b6152b0601f8301601f191682016150d7565b925081835286818386010111156152c657600080fd5b818185018285013760008183850101528285528086013581860152505050506040820135604082015292915050565b6000806000806060858703121561530b57600080fd5b843561531681614fcc565b935060208501356001600160401b038082111561533257600080fd5b61533e888389016151ff565b9095509350604087013591508082111561535757600080fd5b5061536487828801615243565b91505092959194509250565b60008060006060848603121561538557600080fd5b833561539081614fcc565b925060208401356153a081614fcc565b91506153ae60408501615107565b90509250925092565b60008060008084860360a08112156153ce57600080fd5b85356153d981614fcc565b94506040601f19820112156153ed57600080fd5b50602085019250606085013561540281614fcc565b915061541060808601615107565b905092959194509250565b6000806000806060858703121561543157600080fd5b843561543c81614fcc565b935060208501356001600160401b038082111561545857600080fd5b615464888389016151ff565b9095509350604087013591508082111561547d57600080fd5b5085016060818803121561549057600080fd5b939692955090935050565b600080604083850312156154ae57600080fd5b82356154b981614fcc565b946020939093013593505050565b6000806000806000608086880312156154df57600080fd5b85356154ea81614fcc565b945060208601356154fa81614fcc565b935060408601356001600160401b038082111561551657600080fd5b61552289838a016151ff565b9095509350606088013591508082111561553b57600080fd5b5061554888828901615243565b9150509295509295909350565b6000806040838503121561556857600080fd5b823561557381614fcc565b9150602083013561558381614fcc565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60208101600283106155c657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156155de57600080fd5b813560ff8116811461185857600080fd5b60008060008060006060868803121561560757600080fd5b853561561281614fcc565b945060208601356001600160401b038082111561562e57600080fd5b61563a89838a016151ff565b9096509450604088013591508082111561565357600080fd5b50615660888289016151ff565b969995985093965092949392505050565b6000806040838503121561568457600080fd5b823561568f81614fcc565b915061569d60208401615107565b90509250929050565b6000806000806000608086880312156156be57600080fd5b85356156c981614fcc565b945060208601356001600160401b038111156156e457600080fd5b6156f0888289016151ff565b9699909850959660408101359660609091013595509350505050565b81516001600160a01b0316815260208083015163ffffffff169082015260408101610b1f565b6000806000806080858703121561574857600080fd5b843561575381614fcc565b9350602085013561576381614fcc565b93969395505050506040820135916060013590565b6000806020838503121561578b57600080fd5b82356001600160401b03808211156157a257600080fd5b818501915085601f8301126157b657600080fd5b8135818111156157c557600080fd5b8660208285010111156157d757600080fd5b60209290920196919550909350505050565b600080602083850312156157fc57600080fd5b82356001600160401b0381111561581257600080fd5b61581e858286016151ff565b90969095509350505050565b60008060008060006080868803121561584257600080fd5b853561584d81614fcc565b945061585b60208701615107565b935060408601356001600160401b0381111561587657600080fd5b615882888289016151ff565b909450925050606086013561ffff8116811461589d57600080fd5b809150509295509295909350565b6000806000604084860312156158c057600080fd5b83356158cb81614fcc565b925060208401356001600160401b038111156158e657600080fd5b6158f2868287016151ff565b9497909650939450505050565b6000806000806040858703121561591557600080fd5b84356001600160401b038082111561592c57600080fd5b615938888389016151ff565b9096509450602087013591508082111561595157600080fd5b5061595e878288016151ff565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156159925761599261596a565b500390565b600082198211156159aa576159aa61596a565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156159d9576159d961596a565b5060010190565b6000602082840312156159f257600080fd5b815161185881614fcc565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600063ffffffff808316818516808303821115615a6657615a6661596a565b01949350505050565b600060208284031215615a8157600080fd5b8151801515811461185857600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b600060208284031215615b2257600080fd5b61185882615107565b6000816000190483118215151615615b4557615b4561596a565b500290565b634e487b7160e01b600052601260045260246000fd5b600082615b7d57634e487b7160e01b600052601260045260246000fd5b500490565b60008235605e19833603018112615b9857600080fd5b9190910192915050565b8183526000602080850194508260005b85811015615bf8578135615bc581614fcc565b6001600160a01b0316875263ffffffff615be0838501615107565b16878401526040968701969190910190600101615bb2565b509495945050505050565b6000808335601e19843603018112615c1a57600080fd5b83016020810192503590506001600160401b03811115615c3957600080fd5b8060051b36038313156147e557600080fd5b80356001600160401b038116811461511b57600080fd5b8183526000602080850194508260005b85811015615bf8576001600160401b03615c8b83615c4b565b1687529582019590820190600101615c72565b600060a08201888352602060018060a01b03808a1682860152604060a0818701528389855260c08701905060c08a60051b88010194508a60005b8b811015615d9f5788870360bf190183528135368e9003605e19018112615cfe57600080fd5b8d0160608135615d0d81614fcc565b871689528188013536839003601e19018112615d2857600080fd5b820180356001600160401b03811115615d4057600080fd5b8060061b3603841315615d5257600080fd5b828a8c0152615d66838c01828c8501615ba2565b92505050615d7686830183615c03565b9250898203878b0152615d8a828483615c62565b99505050928601925090850190600101615cd8565b505050505060608401959095526080909201929092529695505050505050565b8183526000602080850194508260005b85811015615bf85763ffffffff615de583615107565b1687529582019590820190600101615dcf565b8681526001600160a01b038616602082015260a060408201819052600090615e239083018688615dbf565b60608301949094525060800152949350505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006001600160401b0383811690831681811015615e8757615e8761596a565b039392505050565b60006001600160401b03808316818516808303821115615a6657615a6661596a565b600081615ec057615ec061596a565b506000190190565b60006001600160e01b0383811690831681811015615e8757615e8761596a565b6000808335601e19843603018112615eff57600080fd5b8301803591506001600160401b03821115615f1957600080fd5b6020019150600581901b36038213156147e557600080fd5b602081526000615f45602083018486615dbf565b949350505050565b82815260006020604081840152835180604085015260005b81811015615f8157858101830151858201606001528201615f65565b81811115615f93576000606083870101525b50601f01601f191692909201606001949350505050565b600060208284031215615fbc57600080fd5b81516001600160e01b03198116811461185857600080fd5b6000808335601e19843603018112615feb57600080fd5b8301803591506001600160401b0382111561600557600080fd5b6020019150368190038213156147e557600080fd5b600060ff821660ff8114156160315761603161596a565b60010192915050565b6000808335601e1984360301811261605157600080fd5b8301803591506001600160401b0382111561606b57600080fd5b6020019150600681901b36038213156147e557600080fd5b60006020828403121561609557600080fd5b61185882615c4b565b60006001600160e01b03828116848216808303821115615a6657615a6661596a565b805160208083015191908110156160e1576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052603160045260246000fdfe4156534469726563746f72792e72656769737465724f70657261746f72546f4fa264697066735822122057615600b1b8ed2c594c0ca166b1ad1650f361bd0a718ba6d96322a3c846a50d64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"enumIAVSDirectory.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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEOA\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureSaltSpent\",\"inputs\":[]}]", + Bin: "0x60c060405234801561001057600080fd5b50604051611a17380380611a1783398101604081905261002f9161010e565b6001600160a01b03811660805261004461004e565b504660a05261013e565b600054610100900460ff16156100ba5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010c576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561012057600080fd5b81516001600160a01b038116811461013757600080fd5b9392505050565b60805160a0516118ad61016a6000396000610bff015260008181610324015261085f01526118ad6000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063d79aceab1161007c578063d79aceab146102f8578063df5cf7231461031f578063ec76f44214610346578063f2fde38b1461037a578063f698da251461038d578063fabc1cbc1461039557600080fd5b80638da5cb5b1461029b5780639926ee7d146102ac578063a1060c88146102bf578063a364f4da146102d2578063a98fb355146102e557600080fd5b806349075da31161010a57806349075da3146101fa578063595c6a67146102355780635ac86ab71461023d5780635c975abb14610260578063715018a614610268578063886f11951461027057600080fd5b806310d67a2f14610147578063136439dd1461015c5780631794bb3c1461016f57806320606b7014610182578063374823b5146101bc575b600080fd5b61015a610155366004611406565b6103a8565b005b61015a61016a36600461142a565b61045c565b61015a61017d366004611443565b610547565b6101a97f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b6101ea6101ca366004611484565b609960209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101b3565b6102286102083660046114b0565b609860209081526000928352604080842090915290825290205460ff1681565b6040516101b391906114ff565b61015a610676565b6101ea61024b366004611527565b606654600160ff9092169190911b9081161490565b6066546101a9565b61015a61073e565b606554610283906001600160a01b031681565b6040516001600160a01b0390911681526020016101b3565b6033546001600160a01b0316610283565b61015a6102ba3660046115ba565b610752565b6101a96102cd3660046116af565b61099d565b61015a6102e0366004611406565b610a56565b61015a6102f33660046116f5565b610b3e565b6101a97fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102837f000000000000000000000000000000000000000000000000000000000000000081565b61015a61035436600461142a565b33600090815260996020908152604080832093835292905220805460ff19166001179055565b61015a610388366004611406565b610b85565b6101a9610bfb565b61015a6103a336600461142a565b610c38565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041f9190611769565b6001600160a01b0316336001600160a01b0316146104505760405163794821ff60e01b815260040160405180910390fd5b61045981610d40565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190611786565b6104e557604051631d77d47760e21b815260040160405180910390fd5b606654818116146105095760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff16158080156105675750600054600160ff909116105b806105815750303b158015610581575060005460ff166001145b6105e95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561060c576000805461ff0019166101001790555b6106168383610dd0565b61061e610e55565b60975561062a84610eec565b8015610670576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156106be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e29190611786565b6106ff57604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610746610f3e565b6107506000610eec565b565b60665460009060019081160361077b5760405163840a48d560e01b815260040160405180910390fd5b42826040015110156107a057604051630819bdcd60e01b815260040160405180910390fd5b60013360009081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156107da576107da6114e9565b036107f8576040516342ee68b560e01b815260040160405180910390fd5b6001600160a01b038316600090815260996020908152604080832085830151845290915290205460ff161561084057604051639a5afeb760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca9190611786565b6108e7576040516325878fa360e21b815260040160405180910390fd5b60006108fd84338560200151866040015161099d565b905061090e84828560000151610f98565b3360008181526098602090815260408083206001600160a01b0389168085529083528184208054600160ff199182168117909255609985528386208a860151875290945293829020805490931684179092555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b419161098f91906114ff565b60405180910390a350505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd6020808301919091526001600160a01b0387811683850152861660608301526080820185905260a08083018590528351808403909101815260c0909201909252805191012060009081610a13610bfb565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b606654600090600190811603610a7f5760405163840a48d560e01b815260040160405180910390fd5b60013360009081526098602090815260408083206001600160a01b038716845290915290205460ff166001811115610ab957610ab96114e9565b14610ad7576040516325ec6c1f60e01b815260040160405180910390fd5b3360008181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610b3291906114ff565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138383604051610b799291906117a8565b60405180910390a25050565b610b8d610f3e565b6001600160a01b038116610bf25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105e0565b61045981610eec565b60007f00000000000000000000000000000000000000000000000000000000000000004603610c2b575060975490565b610c33610e55565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caf9190611769565b6001600160a01b0316336001600160a01b031614610ce05760405163794821ff60e01b815260040160405180910390fd5b606654198119606654191614610d095760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161053c565b6001600160a01b038116610d67576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b0316158015610df157506001600160a01b03821615155b610e0e576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610e5182610d40565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b031633146107505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e0565b6001600160a01b0383163b1561104657604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90610fd890869086906004016117d7565b602060405180830381865afa158015610ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611019919061182c565b6001600160e01b031916146110415760405163026aa43360e31b815260040160405180910390fd5b505050565b826001600160a01b031661105a8383611081565b6001600160a01b031614611041576040516306c653c360e31b815260040160405180910390fd5b600080600061109085856110a7565b9150915061109d81611115565b5090505b92915050565b60008082516041036110dd5760208301516040840151606085015160001a6110d1878285856112cb565b9450945050505061110e565b825160400361110657602083015160408401516110fb8683836113b8565b93509350505061110e565b506000905060025b9250929050565b6000816004811115611129576111296114e9565b036111315750565b6001816004811115611145576111456114e9565b036111925760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016105e0565b60028160048111156111a6576111a66114e9565b036111f35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016105e0565b6003816004811115611207576112076114e9565b0361125f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016105e0565b6004816004811115611273576112736114e9565b036104595760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016105e0565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561130257506000905060036113af565b8460ff16601b1415801561131a57508460ff16601c14155b1561132b57506000905060046113af565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561137f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113a8576000600192509250506113af565b9150600090505b94509492505050565b6000806001600160ff1b038316816113d560ff86901c601b611856565b90506113e3878288856112cb565b935093505050935093915050565b6001600160a01b038116811461045957600080fd5b60006020828403121561141857600080fd5b8135611423816113f1565b9392505050565b60006020828403121561143c57600080fd5b5035919050565b60008060006060848603121561145857600080fd5b8335611463816113f1565b92506020840135611473816113f1565b929592945050506040919091013590565b6000806040838503121561149757600080fd5b82356114a2816113f1565b946020939093013593505050565b600080604083850312156114c357600080fd5b82356114ce816113f1565b915060208301356114de816113f1565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b602081016002831061152157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561153957600080fd5b813560ff8116811461142357600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156115835761158361154a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156115b2576115b261154a565b604052919050565b600080604083850312156115cd57600080fd5b82356115d8816113f1565b9150602083013567ffffffffffffffff8111156115f457600080fd5b83016060818603121561160657600080fd5b61160e611560565b813567ffffffffffffffff81111561162557600080fd5b8201601f8101871361163657600080fd5b803567ffffffffffffffff8111156116505761165061154a565b611663601f8201601f1916602001611589565b81815288602083850101111561167857600080fd5b8160208401602083013760006020928201830152835283810135908301525060409182013591810191909152919491935090915050565b600080600080608085870312156116c557600080fd5b84356116d0816113f1565b935060208501356116e0816113f1565b93969395505050506040820135916060013590565b6000806020838503121561170857600080fd5b823567ffffffffffffffff81111561171f57600080fd5b8301601f8101851361173057600080fd5b803567ffffffffffffffff81111561174757600080fd5b85602082840101111561175957600080fd5b6020919091019590945092505050565b60006020828403121561177b57600080fd5b8151611423816113f1565b60006020828403121561179857600080fd5b8151801515811461142357600080fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b828152604060208201526000825180604084015260005b8181101561180b57602081860181015160608684010152016117ee565b506000606082850101526060601f19601f8301168401019150509392505050565b60006020828403121561183e57600080fd5b81516001600160e01b03198116811461142357600080fd5b808201808211156110a157634e487b7160e01b600052601160045260246000fdfea26469706673582212207a582f1623ddd4e18be72e65b722d04993b5bccbf6764780b498d5c4415346af64736f6c634300081b0033", } // AVSDirectoryABI is the input ABI used to generate the binding from. @@ -222,37 +209,6 @@ func (_AVSDirectory *AVSDirectoryTransactorRaw) Transact(opts *bind.TransactOpts return _AVSDirectory.Contract.contract.Transact(opts, method, params...) } -// ALLOCATIONDELAY is a free data retrieval call binding the contract method 0x6fbb031c. -// -// Solidity: function ALLOCATION_DELAY() view returns(uint32) -func (_AVSDirectory *AVSDirectoryCaller) ALLOCATIONDELAY(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "ALLOCATION_DELAY") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// ALLOCATIONDELAY is a free data retrieval call binding the contract method 0x6fbb031c. -// -// Solidity: function ALLOCATION_DELAY() view returns(uint32) -func (_AVSDirectory *AVSDirectorySession) ALLOCATIONDELAY() (uint32, error) { - return _AVSDirectory.Contract.ALLOCATIONDELAY(&_AVSDirectory.CallOpts) -} - -// ALLOCATIONDELAY is a free data retrieval call binding the contract method 0x6fbb031c. -// -// Solidity: function ALLOCATION_DELAY() view returns(uint32) -func (_AVSDirectory *AVSDirectoryCallerSession) ALLOCATIONDELAY() (uint32, error) { - return _AVSDirectory.Contract.ALLOCATIONDELAY(&_AVSDirectory.CallOpts) -} - // DOMAINTYPEHASH is a free data retrieval call binding the contract method 0x20606b70. // // Solidity: function DOMAIN_TYPEHASH() view returns(bytes32) @@ -284,68 +240,6 @@ func (_AVSDirectory *AVSDirectoryCallerSession) DOMAINTYPEHASH() ([32]byte, erro return _AVSDirectory.Contract.DOMAINTYPEHASH(&_AVSDirectory.CallOpts) } -// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. -// -// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCaller) MAGNITUDEADJUSTMENTTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "MAGNITUDE_ADJUSTMENT_TYPEHASH") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. -// -// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectorySession) MAGNITUDEADJUSTMENTTYPEHASH() ([32]byte, error) { - return _AVSDirectory.Contract.MAGNITUDEADJUSTMENTTYPEHASH(&_AVSDirectory.CallOpts) -} - -// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. -// -// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCallerSession) MAGNITUDEADJUSTMENTTYPEHASH() ([32]byte, error) { - return _AVSDirectory.Contract.MAGNITUDEADJUSTMENTTYPEHASH(&_AVSDirectory.CallOpts) -} - -// MAXPENDINGUPDATES is a free data retrieval call binding the contract method 0xb3e52eaa. -// -// Solidity: function MAX_PENDING_UPDATES() view returns(uint256) -func (_AVSDirectory *AVSDirectoryCaller) MAXPENDINGUPDATES(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "MAX_PENDING_UPDATES") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MAXPENDINGUPDATES is a free data retrieval call binding the contract method 0xb3e52eaa. -// -// Solidity: function MAX_PENDING_UPDATES() view returns(uint256) -func (_AVSDirectory *AVSDirectorySession) MAXPENDINGUPDATES() (*big.Int, error) { - return _AVSDirectory.Contract.MAXPENDINGUPDATES(&_AVSDirectory.CallOpts) -} - -// MAXPENDINGUPDATES is a free data retrieval call binding the contract method 0xb3e52eaa. -// -// Solidity: function MAX_PENDING_UPDATES() view returns(uint256) -func (_AVSDirectory *AVSDirectoryCallerSession) MAXPENDINGUPDATES() (*big.Int, error) { - return _AVSDirectory.Contract.MAXPENDINGUPDATES(&_AVSDirectory.CallOpts) -} - // OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. // // Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) @@ -377,99 +271,6 @@ func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORAVSREGISTRATIONTYPEHASH( return _AVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) } -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCaller) OPERATORSETFORCEDEREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectorySession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectory.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) -} - -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectory.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) -} - -// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. -// -// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCaller) OPERATORSETREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "OPERATOR_SET_REGISTRATION_TYPEHASH") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. -// -// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectorySession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectory.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) -} - -// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. -// -// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCallerSession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectory.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectory.CallOpts) -} - -// AllocatorSaltIsSpent is a free data retrieval call binding the contract method 0x46fb3a00. -// -// Solidity: function allocatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) AllocatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "allocatorSaltIsSpent", arg0, arg1) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// AllocatorSaltIsSpent is a free data retrieval call binding the contract method 0x46fb3a00. -// -// Solidity: function allocatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) AllocatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectory.Contract.AllocatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) -} - -// AllocatorSaltIsSpent is a free data retrieval call binding the contract method 0x46fb3a00. -// -// Solidity: function allocatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) AllocatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectory.Contract.AllocatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) -} - // AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. // // Solidity: function avsOperatorStatus(address , address ) view returns(uint8) @@ -501,37 +302,6 @@ func (_AVSDirectory *AVSDirectoryCallerSession) AvsOperatorStatus(arg0 common.Ad return _AVSDirectory.Contract.AvsOperatorStatus(&_AVSDirectory.CallOpts, arg0, arg1) } -// CalculateMagnitudeAdjustmentDigestHash is a free data retrieval call binding the contract method 0x8522fcb1. -// -// Solidity: function calculateMagnitudeAdjustmentDigestHash(address operator, (address,(address,uint32)[],uint64[])[] adjustments, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCaller) CalculateMagnitudeAdjustmentDigestHash(opts *bind.CallOpts, operator common.Address, adjustments []IAVSDirectoryMagnitudeAdjustment, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "calculateMagnitudeAdjustmentDigestHash", operator, adjustments, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// CalculateMagnitudeAdjustmentDigestHash is a free data retrieval call binding the contract method 0x8522fcb1. -// -// Solidity: function calculateMagnitudeAdjustmentDigestHash(address operator, (address,(address,uint32)[],uint64[])[] adjustments, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectorySession) CalculateMagnitudeAdjustmentDigestHash(operator common.Address, adjustments []IAVSDirectoryMagnitudeAdjustment, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectory.Contract.CalculateMagnitudeAdjustmentDigestHash(&_AVSDirectory.CallOpts, operator, adjustments, salt, expiry) -} - -// CalculateMagnitudeAdjustmentDigestHash is a free data retrieval call binding the contract method 0x8522fcb1. -// -// Solidity: function calculateMagnitudeAdjustmentDigestHash(address operator, (address,(address,uint32)[],uint64[])[] adjustments, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCallerSession) CalculateMagnitudeAdjustmentDigestHash(operator common.Address, adjustments []IAVSDirectoryMagnitudeAdjustment, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectory.Contract.CalculateMagnitudeAdjustmentDigestHash(&_AVSDirectory.CallOpts, operator, adjustments, salt, expiry) -} - // CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. // // Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -563,68 +333,6 @@ func (_AVSDirectory *AVSDirectoryCallerSession) CalculateOperatorAVSRegistration return _AVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectory.CallOpts, operator, avs, salt, expiry) } -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectorySession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) -} - -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) -} - -// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. -// -// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCaller) CalculateOperatorSetRegistrationDigestHash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "calculateOperatorSetRegistrationDigestHash", avs, operatorSetIds, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. -// -// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectorySession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectory.Contract.CalculateOperatorSetRegistrationDigestHash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) -} - -// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. -// -// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectory *AVSDirectoryCallerSession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectory.Contract.CalculateOperatorSetRegistrationDigestHash(&_AVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) -} - // Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // // Solidity: function delegation() view returns(address) @@ -687,2366 +395,395 @@ func (_AVSDirectory *AVSDirectoryCallerSession) DomainSeparator() ([32]byte, err return _AVSDirectory.Contract.DomainSeparator(&_AVSDirectory.CallOpts) } -<<<<<<< HEAD -<<<<<<< HEAD -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_AVSDirectory *AVSDirectoryCaller) GetNumOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "getNumOperatorsInOperatorSet", operatorSet) + err := _AVSDirectory.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) if err != nil { - return *new(*big.Int), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_AVSDirectory *AVSDirectorySession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { - return _AVSDirectory.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectory.CallOpts, operatorSet) +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectory.Contract.OperatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) } -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_AVSDirectory *AVSDirectoryCallerSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { - return _AVSDirectory.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectory.CallOpts, operatorSet) +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectory.Contract.OperatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) } -// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // -// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_AVSDirectory *AVSDirectoryCaller) GetOperatorSetsOfOperator(opts *bind.CallOpts, operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { +// Solidity: function owner() view returns(address) +func (_AVSDirectory *AVSDirectoryCaller) Owner(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "getOperatorSetsOfOperator", operator, start, length) + err := _AVSDirectory.contract.Call(opts, &out, "owner") if err != nil { - return *new([]IAVSDirectoryOperatorSet), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // -// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_AVSDirectory *AVSDirectorySession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { - return _AVSDirectory.Contract.GetOperatorSetsOfOperator(&_AVSDirectory.CallOpts, operator, start, length) +// Solidity: function owner() view returns(address) +func (_AVSDirectory *AVSDirectorySession) Owner() (common.Address, error) { + return _AVSDirectory.Contract.Owner(&_AVSDirectory.CallOpts) } -// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. // -// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_AVSDirectory *AVSDirectoryCallerSession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { - return _AVSDirectory.Contract.GetOperatorSetsOfOperator(&_AVSDirectory.CallOpts, operator, start, length) +// Solidity: function owner() view returns(address) +func (_AVSDirectory *AVSDirectoryCallerSession) Owner() (common.Address, error) { + return _AVSDirectory.Contract.Owner(&_AVSDirectory.CallOpts) } -// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. // -// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) -func (_AVSDirectory *AVSDirectoryCaller) GetOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { +// Solidity: function paused(uint8 index) view returns(bool) +func (_AVSDirectory *AVSDirectoryCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "getOperatorsInOperatorSet", operatorSet, start, length) + err := _AVSDirectory.contract.Call(opts, &out, "paused", index) if err != nil { - return *new([]common.Address), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. // -// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) -func (_AVSDirectory *AVSDirectorySession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { - return _AVSDirectory.Contract.GetOperatorsInOperatorSet(&_AVSDirectory.CallOpts, operatorSet, start, length) +// Solidity: function paused(uint8 index) view returns(bool) +func (_AVSDirectory *AVSDirectorySession) Paused(index uint8) (bool, error) { + return _AVSDirectory.Contract.Paused(&_AVSDirectory.CallOpts, index) } -// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. // -// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) -func (_AVSDirectory *AVSDirectoryCallerSession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { - return _AVSDirectory.Contract.GetOperatorsInOperatorSet(&_AVSDirectory.CallOpts, operatorSet, start, length) +// Solidity: function paused(uint8 index) view returns(bool) +func (_AVSDirectory *AVSDirectoryCallerSession) Paused(index uint8) (bool, error) { + return _AVSDirectory.Contract.Paused(&_AVSDirectory.CallOpts, index) } -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -======= -// IsMember is a free data retrieval call binding the contract method 0x3c4385d0. ->>>>>>> ce94473c (feat: operator commission bips (#627)) -======= -// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. ->>>>>>> 6b2ab7ed (build: bindings) +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. // -// Solidity: function freeMagnitude(address , address ) view returns(uint64) -func (_AVSDirectory *AVSDirectoryCaller) FreeMagnitude(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint64, error) { +// Solidity: function paused() view returns(uint256) +func (_AVSDirectory *AVSDirectoryCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "freeMagnitude", arg0, arg1) + err := _AVSDirectory.contract.Call(opts, &out, "paused0") if err != nil { - return *new(uint64), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. // -// Solidity: function freeMagnitude(address , address ) view returns(uint64) -func (_AVSDirectory *AVSDirectorySession) FreeMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { - return _AVSDirectory.Contract.FreeMagnitude(&_AVSDirectory.CallOpts, arg0, arg1) +// Solidity: function paused() view returns(uint256) +func (_AVSDirectory *AVSDirectorySession) Paused0() (*big.Int, error) { + return _AVSDirectory.Contract.Paused0(&_AVSDirectory.CallOpts) } -// FreeMagnitude is a free data retrieval call binding the contract method 0x5fd6abfd. +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. // -// Solidity: function freeMagnitude(address , address ) view returns(uint64) -func (_AVSDirectory *AVSDirectoryCallerSession) FreeMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { - return _AVSDirectory.Contract.FreeMagnitude(&_AVSDirectory.CallOpts, arg0, arg1) +// Solidity: function paused() view returns(uint256) +func (_AVSDirectory *AVSDirectoryCallerSession) Paused0() (*big.Int, error) { + return _AVSDirectory.Contract.Paused0(&_AVSDirectory.CallOpts) } -// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. // -// Solidity: function getSlashableBips(address operator, (address,uint32) operatorSet, address strategy, uint32 timestamp) view returns(uint16) -func (_AVSDirectory *AVSDirectoryCaller) GetSlashableBips(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategy common.Address, timestamp uint32) (uint16, error) { +// Solidity: function pauserRegistry() view returns(address) +func (_AVSDirectory *AVSDirectoryCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "getSlashableBips", operator, operatorSet, strategy, timestamp) + err := _AVSDirectory.contract.Call(opts, &out, "pauserRegistry") if err != nil { - return *new(uint16), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. // -// Solidity: function getSlashableBips(address operator, (address,uint32) operatorSet, address strategy, uint32 timestamp) view returns(uint16) -func (_AVSDirectory *AVSDirectorySession) GetSlashableBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategy common.Address, timestamp uint32) (uint16, error) { - return _AVSDirectory.Contract.GetSlashableBips(&_AVSDirectory.CallOpts, operator, operatorSet, strategy, timestamp) +// Solidity: function pauserRegistry() view returns(address) +func (_AVSDirectory *AVSDirectorySession) PauserRegistry() (common.Address, error) { + return _AVSDirectory.Contract.PauserRegistry(&_AVSDirectory.CallOpts) } -// GetSlashableBips is a free data retrieval call binding the contract method 0x33429a6a. +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. // -// Solidity: function getSlashableBips(address operator, (address,uint32) operatorSet, address strategy, uint32 timestamp) view returns(uint16) -func (_AVSDirectory *AVSDirectoryCallerSession) GetSlashableBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategy common.Address, timestamp uint32) (uint16, error) { - return _AVSDirectory.Contract.GetSlashableBips(&_AVSDirectory.CallOpts, operator, operatorSet, strategy, timestamp) +// Solidity: function pauserRegistry() view returns(address) +func (_AVSDirectory *AVSDirectoryCallerSession) PauserRegistry() (common.Address, error) { + return _AVSDirectory.Contract.PauserRegistry(&_AVSDirectory.CallOpts) } -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. // -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectory *AVSDirectoryCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "inTotalOperatorSets", operator) - - if err != nil { - return *new(*big.Int), err - } +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_AVSDirectory *AVSDirectoryTransactor) CancelSalt(opts *bind.TransactOpts, salt [32]byte) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "cancelSalt", salt) +} - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectory *AVSDirectorySession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _AVSDirectory.Contract.InTotalOperatorSets(&_AVSDirectory.CallOpts, operator) -} - -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectory *AVSDirectoryCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _AVSDirectory.Contract.InTotalOperatorSets(&_AVSDirectory.CallOpts, operator) -} - -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) IsMember(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "isMember", operator, operatorSet) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, operator, operatorSet) -} - -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectory.Contract.IsMember(&_AVSDirectory.CallOpts, operator, operatorSet) -} - -// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. -// -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) IsOperatorSet(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (bool, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "isOperatorSet", arg0, arg1) - - 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 0x84d76f7b. -// -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { - return _AVSDirectory.Contract.IsOperatorSet(&_AVSDirectory.CallOpts, arg0, arg1) -} - -// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. -// -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { - return _AVSDirectory.Contract.IsOperatorSet(&_AVSDirectory.CallOpts, arg0, arg1) -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) IsOperatorSetAVS(opts *bind.CallOpts, arg0 common.Address) (bool, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "isOperatorSetAVS", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { - return _AVSDirectory.Contract.IsOperatorSetAVS(&_AVSDirectory.CallOpts, arg0) -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { - return _AVSDirectory.Contract.IsOperatorSetAVS(&_AVSDirectory.CallOpts, arg0) -} - -// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. -// -// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) IsOperatorSlashable(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - var out []interface{} - err := _AVSDirectory.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 (_AVSDirectory *AVSDirectorySession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectory.Contract.IsOperatorSlashable(&_AVSDirectory.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 (_AVSDirectory *AVSDirectoryCallerSession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectory.Contract.IsOperatorSlashable(&_AVSDirectory.CallOpts, operator, operatorSet) -} - -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. -// -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. -// -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectory.Contract.OperatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) -} - -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. -// -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectory.Contract.OperatorSaltIsSpent(&_AVSDirectory.CallOpts, arg0, arg1) -} - -<<<<<<< HEAD -<<<<<<< HEAD -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. -// -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectory *AVSDirectoryCaller) OperatorSetMemberAtIndex(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "operatorSetMemberAtIndex", operatorSet, index) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) -======= -// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. -// -// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) -func (_AVSDirectory *AVSDirectoryCaller) OperatorSetMemberCount(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (*big.Int, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "operatorSetMemberCount", arg0, arg1) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) ->>>>>>> 6b2ab7ed (build: bindings) - - return out0, err - -} - -<<<<<<< HEAD -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. -// -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectory *AVSDirectorySession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - return _AVSDirectory.Contract.OperatorSetMemberAtIndex(&_AVSDirectory.CallOpts, operatorSet, index) -} - -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. -// -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - return _AVSDirectory.Contract.OperatorSetMemberAtIndex(&_AVSDirectory.CallOpts, operatorSet, index) -} - -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. -// -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectory *AVSDirectoryCaller) OperatorSetsMemberOfAtIndex(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "operatorSetsMemberOfAtIndex", operator, index) -======= -// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. // -// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) -func (_AVSDirectory *AVSDirectorySession) OperatorSetMemberCount(arg0 common.Address, arg1 uint32) (*big.Int, error) { - return _AVSDirectory.Contract.OperatorSetMemberCount(&_AVSDirectory.CallOpts, arg0, arg1) +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_AVSDirectory *AVSDirectorySession) CancelSalt(salt [32]byte) (*types.Transaction, error) { + return _AVSDirectory.Contract.CancelSalt(&_AVSDirectory.TransactOpts, salt) } -// OperatorSetMemberCount is a free data retrieval call binding the contract method 0xdae226b6. +// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. // -// Solidity: function operatorSetMemberCount(address , uint32 ) view returns(uint256) -func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetMemberCount(arg0 common.Address, arg1 uint32) (*big.Int, error) { - return _AVSDirectory.Contract.OperatorSetMemberCount(&_AVSDirectory.CallOpts, arg0, arg1) +// Solidity: function cancelSalt(bytes32 salt) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { + return _AVSDirectory.Contract.CancelSalt(&_AVSDirectory.TransactOpts, salt) } -// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) -func (_AVSDirectory *AVSDirectoryCaller) OperatorSetStatus(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { - Registered bool - LastDeregisteredTimestamp uint32 -}, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "operatorSetStatus", arg0, arg1, arg2) - - outstruct := new(struct { - Registered bool - LastDeregisteredTimestamp uint32 - }) - if err != nil { - return *outstruct, err - } - - outstruct.Registered = *abi.ConvertType(out[0], new(bool)).(*bool) - outstruct.LastDeregisteredTimestamp = *abi.ConvertType(out[1], new(uint32)).(*uint32) - - return *outstruct, err - +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectory *AVSDirectoryTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "deregisterOperatorFromAVS", operator) } -// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) -func (_AVSDirectory *AVSDirectorySession) OperatorSetStatus(arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { - Registered bool - LastDeregisteredTimestamp uint32 -}, error) { - return _AVSDirectory.Contract.OperatorSetStatus(&_AVSDirectory.CallOpts, arg0, arg1, arg2) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectory *AVSDirectorySession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _AVSDirectory.Contract.DeregisterOperatorFromAVS(&_AVSDirectory.TransactOpts, operator) } -// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) -func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetStatus(arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { - Registered bool - LastDeregisteredTimestamp uint32 -}, error) { - return _AVSDirectory.Contract.OperatorSetStatus(&_AVSDirectory.CallOpts, arg0, arg1, arg2) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _AVSDirectory.Contract.DeregisterOperatorFromAVS(&_AVSDirectory.TransactOpts, operator) } -// OperatorSetsMemberOf is a free data retrieval call binding the contract method 0x0d5387c5. +// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. // -// Solidity: function operatorSetsMemberOf(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_AVSDirectory *AVSDirectoryCaller) OperatorSetsMemberOf(opts *bind.CallOpts, operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "operatorSetsMemberOf", operator, start, length) - - if err != nil { - return *new([]IAVSDirectoryOperatorSet), err - } - - out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) - - return out0, err - +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() +func (_AVSDirectory *AVSDirectoryTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "initialize", initialOwner, _pauserRegistry, initialPausedStatus) } -// OperatorSetsMemberOf is a free data retrieval call binding the contract method 0x0d5387c5. +// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. // -// Solidity: function operatorSetsMemberOf(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_AVSDirectory *AVSDirectorySession) OperatorSetsMemberOf(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { - return _AVSDirectory.Contract.OperatorSetsMemberOf(&_AVSDirectory.CallOpts, operator, start, length) +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() +func (_AVSDirectory *AVSDirectorySession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { + return _AVSDirectory.Contract.Initialize(&_AVSDirectory.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) } -// OperatorSetsMemberOf is a free data retrieval call binding the contract method 0x0d5387c5. +// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. // -// Solidity: function operatorSetsMemberOf(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetsMemberOf(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { - return _AVSDirectory.Contract.OperatorSetsMemberOf(&_AVSDirectory.CallOpts, operator, start, length) +// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { + return _AVSDirectory.Contract.Initialize(&_AVSDirectory.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) } -// OperatorSetsMemberOf0 is a free data retrieval call binding the contract method 0x8de54944. +// Pause is a paid mutator transaction binding the contract method 0x136439dd. // -// Solidity: function operatorSetsMemberOf(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectory *AVSDirectoryCaller) OperatorSetsMemberOf0(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "operatorSetsMemberOf0", operator, index) ->>>>>>> 6b2ab7ed (build: bindings) - - if err != nil { - return *new(IAVSDirectoryOperatorSet), err - } - - out0 := *abi.ConvertType(out[0], new(IAVSDirectoryOperatorSet)).(*IAVSDirectoryOperatorSet) - - return out0, err - +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_AVSDirectory *AVSDirectoryTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "pause", newPausedStatus) } -<<<<<<< HEAD -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// Pause is a paid mutator transaction binding the contract method 0x136439dd. // -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectory *AVSDirectorySession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _AVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectory.CallOpts, operator, index) +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_AVSDirectory *AVSDirectorySession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _AVSDirectory.Contract.Pause(&_AVSDirectory.TransactOpts, newPausedStatus) } -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. +// Pause is a paid mutator transaction binding the contract method 0x136439dd. // -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _AVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectory.CallOpts, operator, index) +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _AVSDirectory.Contract.Pause(&_AVSDirectory.TransactOpts, newPausedStatus) } -======= ->>>>>>> ce94473c (feat: operator commission bips (#627)) -======= -// OperatorSetsMemberOf0 is a free data retrieval call binding the contract method 0x8de54944. +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. // -// Solidity: function operatorSetsMemberOf(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectory *AVSDirectorySession) OperatorSetsMemberOf0(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _AVSDirectory.Contract.OperatorSetsMemberOf0(&_AVSDirectory.CallOpts, operator, index) +// Solidity: function pauseAll() returns() +func (_AVSDirectory *AVSDirectoryTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "pauseAll") } -// OperatorSetsMemberOf0 is a free data retrieval call binding the contract method 0x8de54944. +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. // -// Solidity: function operatorSetsMemberOf(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectory *AVSDirectoryCallerSession) OperatorSetsMemberOf0(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _AVSDirectory.Contract.OperatorSetsMemberOf0(&_AVSDirectory.CallOpts, operator, index) +// Solidity: function pauseAll() returns() +func (_AVSDirectory *AVSDirectorySession) PauseAll() (*types.Transaction, error) { + return _AVSDirectory.Contract.PauseAll(&_AVSDirectory.TransactOpts) } ->>>>>>> 6b2ab7ed (build: bindings) -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. // -// Solidity: function owner() view returns(address) -func (_AVSDirectory *AVSDirectoryCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - +// Solidity: function pauseAll() returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) PauseAll() (*types.Transaction, error) { + return _AVSDirectory.Contract.PauseAll(&_AVSDirectory.TransactOpts) } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function owner() view returns(address) -func (_AVSDirectory *AVSDirectorySession) Owner() (common.Address, error) { - return _AVSDirectory.Contract.Owner(&_AVSDirectory.CallOpts) +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function owner() view returns(address) -func (_AVSDirectory *AVSDirectoryCallerSession) Owner() (common.Address, error) { - return _AVSDirectory.Contract.Owner(&_AVSDirectory.CallOpts) +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectorySession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.RegisterOperatorToAVS(&_AVSDirectory.TransactOpts, operator, operatorSignature) } -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function paused(uint8 index) view returns(bool) -func (_AVSDirectory *AVSDirectoryCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "paused", index) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectory.Contract.RegisterOperatorToAVS(&_AVSDirectory.TransactOpts, operator, operatorSignature) } -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. -// -// Solidity: function paused(uint8 index) view returns(bool) -func (_AVSDirectory *AVSDirectorySession) Paused(index uint8) (bool, error) { - return _AVSDirectory.Contract.Paused(&_AVSDirectory.CallOpts, index) -} - -// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. -// -// Solidity: function paused(uint8 index) view returns(bool) -func (_AVSDirectory *AVSDirectoryCallerSession) Paused(index uint8) (bool, error) { - return _AVSDirectory.Contract.Paused(&_AVSDirectory.CallOpts, index) -} - -// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(uint256) -func (_AVSDirectory *AVSDirectoryCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _AVSDirectory.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 (_AVSDirectory *AVSDirectorySession) Paused0() (*big.Int, error) { - return _AVSDirectory.Contract.Paused0(&_AVSDirectory.CallOpts) -} - -// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(uint256) -func (_AVSDirectory *AVSDirectoryCallerSession) Paused0() (*big.Int, error) { - return _AVSDirectory.Contract.Paused0(&_AVSDirectory.CallOpts) -} - -// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. -// -// Solidity: function pauserRegistry() view returns(address) -func (_AVSDirectory *AVSDirectoryCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _AVSDirectory.contract.Call(opts, &out, "pauserRegistry") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. -// -// Solidity: function pauserRegistry() view returns(address) -func (_AVSDirectory *AVSDirectorySession) PauserRegistry() (common.Address, error) { - return _AVSDirectory.Contract.PauserRegistry(&_AVSDirectory.CallOpts) -} - -// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. -// -// Solidity: function pauserRegistry() view returns(address) -func (_AVSDirectory *AVSDirectoryCallerSession) PauserRegistry() (common.Address, error) { - return _AVSDirectory.Contract.PauserRegistry(&_AVSDirectory.CallOpts) -} - -// Allocate is a paid mutator transaction binding the contract method 0x70196708. -// -// Solidity: function allocate(address operator, (address,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) allocatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactor) Allocate(opts *bind.TransactOpts, operator common.Address, allocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "allocate", operator, allocations, allocatorSignature) -} - -// Allocate is a paid mutator transaction binding the contract method 0x70196708. -// -// Solidity: function allocate(address operator, (address,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) allocatorSignature) returns() -func (_AVSDirectory *AVSDirectorySession) Allocate(operator common.Address, allocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.Allocate(&_AVSDirectory.TransactOpts, operator, allocations, allocatorSignature) -} - -// Allocate is a paid mutator transaction binding the contract method 0x70196708. -// -// Solidity: function allocate(address operator, (address,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) allocatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) Allocate(operator common.Address, allocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.Allocate(&_AVSDirectory.TransactOpts, operator, allocations, allocatorSignature) -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectory *AVSDirectoryTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "becomeOperatorSetAVS") -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectory *AVSDirectorySession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _AVSDirectory.Contract.BecomeOperatorSetAVS(&_AVSDirectory.TransactOpts) -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _AVSDirectory.Contract.BecomeOperatorSetAVS(&_AVSDirectory.TransactOpts) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_AVSDirectory *AVSDirectoryTransactor) CancelSalt(opts *bind.TransactOpts, salt [32]byte) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "cancelSalt", salt) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_AVSDirectory *AVSDirectorySession) CancelSalt(salt [32]byte) (*types.Transaction, error) { - return _AVSDirectory.Contract.CancelSalt(&_AVSDirectory.TransactOpts, salt) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { - return _AVSDirectory.Contract.CancelSalt(&_AVSDirectory.TransactOpts, salt) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "createOperatorSets", operatorSetIds) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectorySession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.CreateOperatorSets(&_AVSDirectory.TransactOpts, operatorSetIds) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.CreateOperatorSets(&_AVSDirectory.TransactOpts, operatorSetIds) -} - -// Deallocate is a paid mutator transaction binding the contract method 0x3367a33c. -// -// Solidity: function deallocate(address operator, (address,(address,uint32)[],uint64[])[] deallocations, (bytes,bytes32,uint256) allocatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactor) Deallocate(opts *bind.TransactOpts, operator common.Address, deallocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "deallocate", operator, deallocations, allocatorSignature) -} - -// Deallocate is a paid mutator transaction binding the contract method 0x3367a33c. -// -// Solidity: function deallocate(address operator, (address,(address,uint32)[],uint64[])[] deallocations, (bytes,bytes32,uint256) allocatorSignature) returns() -func (_AVSDirectory *AVSDirectorySession) Deallocate(operator common.Address, deallocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.Deallocate(&_AVSDirectory.TransactOpts, operator, deallocations, allocatorSignature) -} - -// Deallocate is a paid mutator transaction binding the contract method 0x3367a33c. -// -// Solidity: function deallocate(address operator, (address,(address,uint32)[],uint64[])[] deallocations, (bytes,bytes32,uint256) allocatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) Deallocate(operator common.Address, deallocations []IAVSDirectoryMagnitudeAdjustment, allocatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.Deallocate(&_AVSDirectory.TransactOpts, operator, deallocations, allocatorSignature) -} - -// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. -// -// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactor) DeregisterOperatorFromOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "deregisterOperatorFromOperatorSets", operator, operatorSetIds) -} - -// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. -// -// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectorySession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectory.TransactOpts, operator, operatorSetIds) -} - -// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. -// -// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectory.TransactOpts, operator, operatorSetIds) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectorySession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. -// -// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() -func (_AVSDirectory *AVSDirectoryTransactor) Initialize(opts *bind.TransactOpts, initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "initialize", initialOwner, _pauserRegistry, initialPausedStatus) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. -// -// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() -func (_AVSDirectory *AVSDirectorySession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { - return _AVSDirectory.Contract.Initialize(&_AVSDirectory.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) -} - -// Initialize is a paid mutator transaction binding the contract method 0x1794bb3c. -// -// Solidity: function initialize(address initialOwner, address _pauserRegistry, uint256 initialPausedStatus) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) Initialize(initialOwner common.Address, _pauserRegistry common.Address, initialPausedStatus *big.Int) (*types.Transaction, error) { - return _AVSDirectory.Contract.Initialize(&_AVSDirectory.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectorySession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectory.TransactOpts, operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectory.TransactOpts, operators, operatorSetIds) -} - -// Pause is a paid mutator transaction binding the contract method 0x136439dd. -// -// Solidity: function pause(uint256 newPausedStatus) returns() -func (_AVSDirectory *AVSDirectoryTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "pause", newPausedStatus) -} - -// Pause is a paid mutator transaction binding the contract method 0x136439dd. -// -// Solidity: function pause(uint256 newPausedStatus) returns() -func (_AVSDirectory *AVSDirectorySession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _AVSDirectory.Contract.Pause(&_AVSDirectory.TransactOpts, newPausedStatus) -} - -// Pause is a paid mutator transaction binding the contract method 0x136439dd. -// -// Solidity: function pause(uint256 newPausedStatus) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _AVSDirectory.Contract.Pause(&_AVSDirectory.TransactOpts, newPausedStatus) -} - -// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. -// -// Solidity: function pauseAll() returns() -func (_AVSDirectory *AVSDirectoryTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "pauseAll") -} - -// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. -// -// Solidity: function pauseAll() returns() -func (_AVSDirectory *AVSDirectorySession) PauseAll() (*types.Transaction, error) { - return _AVSDirectory.Contract.PauseAll(&_AVSDirectory.TransactOpts) -} - -// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. -// -// Solidity: function pauseAll() returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) PauseAll() (*types.Transaction, error) { - return _AVSDirectory.Contract.PauseAll(&_AVSDirectory.TransactOpts) -} - -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. -// -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, operatorSignature) -} - -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. -// -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectorySession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.RegisterOperatorToOperatorSets(&_AVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) -} - -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. -// -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectory.Contract.RegisterOperatorToOperatorSets(&_AVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // // Solidity: function renounceOwnership() returns() func (_AVSDirectory *AVSDirectoryTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_AVSDirectory *AVSDirectorySession) RenounceOwnership() (*types.Transaction, error) { - return _AVSDirectory.Contract.RenounceOwnership(&_AVSDirectory.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _AVSDirectory.Contract.RenounceOwnership(&_AVSDirectory.TransactOpts) -} - -// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. -// -// Solidity: function setPauserRegistry(address newPauserRegistry) returns() -func (_AVSDirectory *AVSDirectoryTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) -} - -// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. -// -// Solidity: function setPauserRegistry(address newPauserRegistry) returns() -func (_AVSDirectory *AVSDirectorySession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { - return _AVSDirectory.Contract.SetPauserRegistry(&_AVSDirectory.TransactOpts, newPauserRegistry) -} - -// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. -// -// Solidity: function setPauserRegistry(address newPauserRegistry) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { - return _AVSDirectory.Contract.SetPauserRegistry(&_AVSDirectory.TransactOpts, newPauserRegistry) -} - -// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. -// -// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() -func (_AVSDirectory *AVSDirectoryTransactor) SlashOperator(opts *bind.TransactOpts, operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "slashOperator", operator, operatorSetId, strategies, bipsToSlash) -} - -// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. -// -// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() -func (_AVSDirectory *AVSDirectorySession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { - return _AVSDirectory.Contract.SlashOperator(&_AVSDirectory.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) -} - -// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. -// -// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { - return _AVSDirectory.Contract.SlashOperator(&_AVSDirectory.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_AVSDirectory *AVSDirectoryTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_AVSDirectory *AVSDirectorySession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _AVSDirectory.Contract.TransferOwnership(&_AVSDirectory.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _AVSDirectory.Contract.TransferOwnership(&_AVSDirectory.TransactOpts, newOwner) -} - -// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. -// -// Solidity: function unpause(uint256 newPausedStatus) returns() -func (_AVSDirectory *AVSDirectoryTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "unpause", newPausedStatus) -} - -// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. -// -// Solidity: function unpause(uint256 newPausedStatus) returns() -func (_AVSDirectory *AVSDirectorySession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _AVSDirectory.Contract.Unpause(&_AVSDirectory.TransactOpts, newPausedStatus) -} - -// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. -// -// Solidity: function unpause(uint256 newPausedStatus) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { - return _AVSDirectory.Contract.Unpause(&_AVSDirectory.TransactOpts, newPausedStatus) -} - -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. -// -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectory *AVSDirectoryTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) -} - -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. -// -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectory *AVSDirectorySession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _AVSDirectory.Contract.UpdateAVSMetadataURI(&_AVSDirectory.TransactOpts, metadataURI) -} - -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. -// -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _AVSDirectory.Contract.UpdateAVSMetadataURI(&_AVSDirectory.TransactOpts, metadataURI) -} - -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. -// -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() -func (_AVSDirectory *AVSDirectoryTransactor) UpdateFreeMagnitude(opts *bind.TransactOpts, operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { - return _AVSDirectory.contract.Transact(opts, "updateFreeMagnitude", operator, strategies, numToComplete) -} - -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. -// -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() -func (_AVSDirectory *AVSDirectorySession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { - return _AVSDirectory.Contract.UpdateFreeMagnitude(&_AVSDirectory.TransactOpts, operator, strategies, numToComplete) -} - -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0x84b78fc2. -// -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint8[] numToComplete) returns() -func (_AVSDirectory *AVSDirectoryTransactorSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint8) (*types.Transaction, error) { - return _AVSDirectory.Contract.UpdateFreeMagnitude(&_AVSDirectory.TransactOpts, operator, strategies, numToComplete) -} - -// AVSDirectoryAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AVSDirectory contract. -type AVSDirectoryAVSMetadataURIUpdatedIterator struct { - Event *AVSDirectoryAVSMetadataURIUpdated // 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 *AVSDirectoryAVSMetadataURIUpdatedIterator) 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(AVSDirectoryAVSMetadataURIUpdated) - 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(AVSDirectoryAVSMetadataURIUpdated) - 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 *AVSDirectoryAVSMetadataURIUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryAVSMetadataURIUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the AVSDirectory contract. -type AVSDirectoryAVSMetadataURIUpdated 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 (_AVSDirectory *AVSDirectoryFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryAVSMetadataURIUpdatedIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryAVSMetadataURIUpdatedIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectory.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(AVSDirectoryAVSMetadataURIUpdated) - if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*AVSDirectoryAVSMetadataURIUpdated, error) { - event := new(AVSDirectoryAVSMetadataURIUpdated) - if err := _AVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the AVSDirectory contract. -type AVSDirectoryAVSMigratedToOperatorSetsIterator struct { - Event *AVSDirectoryAVSMigratedToOperatorSets // 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 *AVSDirectoryAVSMigratedToOperatorSetsIterator) 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(AVSDirectoryAVSMigratedToOperatorSets) - 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(AVSDirectoryAVSMigratedToOperatorSets) - 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 *AVSDirectoryAVSMigratedToOperatorSetsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryAVSMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the AVSDirectory contract. -type AVSDirectoryAVSMigratedToOperatorSets struct { - Avs common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectory *AVSDirectoryFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryAVSMigratedToOperatorSetsIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryAVSMigratedToOperatorSetsIterator{contract: _AVSDirectory.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil -} - -// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectory *AVSDirectoryFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", 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(AVSDirectoryAVSMigratedToOperatorSets) - if err := _AVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", 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 -} - -// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectory *AVSDirectoryFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*AVSDirectoryAVSMigratedToOperatorSets, error) { - event := new(AVSDirectoryAVSMigratedToOperatorSets) - if err := _AVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AVSDirectory contract. -type AVSDirectoryInitializedIterator struct { - Event *AVSDirectoryInitialized // 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 *AVSDirectoryInitializedIterator) 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(AVSDirectoryInitialized) - 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(AVSDirectoryInitialized) - 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 *AVSDirectoryInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryInitialized represents a Initialized event raised by the AVSDirectory contract. -type AVSDirectoryInitialized 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 (_AVSDirectory *AVSDirectoryFilterer) FilterInitialized(opts *bind.FilterOpts) (*AVSDirectoryInitializedIterator, error) { - - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &AVSDirectoryInitializedIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *AVSDirectoryInitialized) (event.Subscription, error) { - - logs, sub, err := _AVSDirectory.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(AVSDirectoryInitialized) - if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParseInitialized(log types.Log) (*AVSDirectoryInitialized, error) { - event := new(AVSDirectoryInitialized) - if err := _AVSDirectory.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryMagnitudeAllocatedIterator is returned from FilterMagnitudeAllocated and is used to iterate over the raw logs and unpacked data for MagnitudeAllocated events raised by the AVSDirectory contract. -type AVSDirectoryMagnitudeAllocatedIterator struct { - Event *AVSDirectoryMagnitudeAllocated // 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 *AVSDirectoryMagnitudeAllocatedIterator) 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(AVSDirectoryMagnitudeAllocated) - 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(AVSDirectoryMagnitudeAllocated) - 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 *AVSDirectoryMagnitudeAllocatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryMagnitudeAllocatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryMagnitudeAllocated represents a MagnitudeAllocated event raised by the AVSDirectory contract. -type AVSDirectoryMagnitudeAllocated struct { - Operator common.Address - Strategy common.Address - OperatorSet IAVSDirectoryOperatorSet - MagnitudeToAllocate uint64 - EffectTimestamp uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMagnitudeAllocated is a free log retrieval operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. -// -// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) -func (_AVSDirectory *AVSDirectoryFilterer) FilterMagnitudeAllocated(opts *bind.FilterOpts) (*AVSDirectoryMagnitudeAllocatedIterator, error) { - - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "MagnitudeAllocated") - if err != nil { - return nil, err - } - return &AVSDirectoryMagnitudeAllocatedIterator{contract: _AVSDirectory.contract, event: "MagnitudeAllocated", logs: logs, sub: sub}, nil -} - -// WatchMagnitudeAllocated is a free log subscription operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. -// -// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) -func (_AVSDirectory *AVSDirectoryFilterer) WatchMagnitudeAllocated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryMagnitudeAllocated) (event.Subscription, error) { - - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "MagnitudeAllocated") - 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(AVSDirectoryMagnitudeAllocated) - if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeAllocated", 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 -} - -// ParseMagnitudeAllocated is a log parse operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. -// -// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) -func (_AVSDirectory *AVSDirectoryFilterer) ParseMagnitudeAllocated(log types.Log) (*AVSDirectoryMagnitudeAllocated, error) { - event := new(AVSDirectoryMagnitudeAllocated) - if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeAllocated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryMagnitudeDeallocationCompletedIterator is returned from FilterMagnitudeDeallocationCompleted and is used to iterate over the raw logs and unpacked data for MagnitudeDeallocationCompleted events raised by the AVSDirectory contract. -type AVSDirectoryMagnitudeDeallocationCompletedIterator struct { - Event *AVSDirectoryMagnitudeDeallocationCompleted // 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 *AVSDirectoryMagnitudeDeallocationCompletedIterator) 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(AVSDirectoryMagnitudeDeallocationCompleted) - 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(AVSDirectoryMagnitudeDeallocationCompleted) - 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 *AVSDirectoryMagnitudeDeallocationCompletedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryMagnitudeDeallocationCompletedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryMagnitudeDeallocationCompleted represents a MagnitudeDeallocationCompleted event raised by the AVSDirectory contract. -type AVSDirectoryMagnitudeDeallocationCompleted struct { - Operator common.Address - Strategy common.Address - OperatorSet IAVSDirectoryOperatorSet - FreeMagnitudeAdded uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMagnitudeDeallocationCompleted is a free log retrieval operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. -// -// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) -func (_AVSDirectory *AVSDirectoryFilterer) FilterMagnitudeDeallocationCompleted(opts *bind.FilterOpts) (*AVSDirectoryMagnitudeDeallocationCompletedIterator, error) { - - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "MagnitudeDeallocationCompleted") - if err != nil { - return nil, err - } - return &AVSDirectoryMagnitudeDeallocationCompletedIterator{contract: _AVSDirectory.contract, event: "MagnitudeDeallocationCompleted", logs: logs, sub: sub}, nil -} - -// WatchMagnitudeDeallocationCompleted is a free log subscription operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. -// -// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) -func (_AVSDirectory *AVSDirectoryFilterer) WatchMagnitudeDeallocationCompleted(opts *bind.WatchOpts, sink chan<- *AVSDirectoryMagnitudeDeallocationCompleted) (event.Subscription, error) { - - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "MagnitudeDeallocationCompleted") - 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(AVSDirectoryMagnitudeDeallocationCompleted) - if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", 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 -} - -// ParseMagnitudeDeallocationCompleted is a log parse operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. -// -// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) -func (_AVSDirectory *AVSDirectoryFilterer) ParseMagnitudeDeallocationCompleted(log types.Log) (*AVSDirectoryMagnitudeDeallocationCompleted, error) { - event := new(AVSDirectoryMagnitudeDeallocationCompleted) - if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryMagnitudeQueueDeallocatedIterator is returned from FilterMagnitudeQueueDeallocated and is used to iterate over the raw logs and unpacked data for MagnitudeQueueDeallocated events raised by the AVSDirectory contract. -type AVSDirectoryMagnitudeQueueDeallocatedIterator struct { - Event *AVSDirectoryMagnitudeQueueDeallocated // 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 *AVSDirectoryMagnitudeQueueDeallocatedIterator) 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(AVSDirectoryMagnitudeQueueDeallocated) - 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(AVSDirectoryMagnitudeQueueDeallocated) - 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 *AVSDirectoryMagnitudeQueueDeallocatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryMagnitudeQueueDeallocatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryMagnitudeQueueDeallocated represents a MagnitudeQueueDeallocated event raised by the AVSDirectory contract. -type AVSDirectoryMagnitudeQueueDeallocated struct { - Operator common.Address - Strategy common.Address - OperatorSet IAVSDirectoryOperatorSet - MagnitudeToDeallocate uint64 - CompletableTimestamp uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMagnitudeQueueDeallocated is a free log retrieval operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. -// -// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) -func (_AVSDirectory *AVSDirectoryFilterer) FilterMagnitudeQueueDeallocated(opts *bind.FilterOpts) (*AVSDirectoryMagnitudeQueueDeallocatedIterator, error) { - - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "MagnitudeQueueDeallocated") - if err != nil { - return nil, err - } - return &AVSDirectoryMagnitudeQueueDeallocatedIterator{contract: _AVSDirectory.contract, event: "MagnitudeQueueDeallocated", logs: logs, sub: sub}, nil -} - -// WatchMagnitudeQueueDeallocated is a free log subscription operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. -// -// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) -func (_AVSDirectory *AVSDirectoryFilterer) WatchMagnitudeQueueDeallocated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryMagnitudeQueueDeallocated) (event.Subscription, error) { - - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "MagnitudeQueueDeallocated") - 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(AVSDirectoryMagnitudeQueueDeallocated) - if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeQueueDeallocated", 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 -} - -// ParseMagnitudeQueueDeallocated is a log parse operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. -// -// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) -func (_AVSDirectory *AVSDirectoryFilterer) ParseMagnitudeQueueDeallocated(log types.Log) (*AVSDirectoryMagnitudeQueueDeallocated, error) { - event := new(AVSDirectoryMagnitudeQueueDeallocated) - if err := _AVSDirectory.contract.UnpackLog(event, "MagnitudeQueueDeallocated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the AVSDirectory contract. -type AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { - Event *AVSDirectoryOperatorAVSRegistrationStatusUpdated // 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 *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) 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(AVSDirectoryOperatorAVSRegistrationStatusUpdated) - 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(AVSDirectoryOperatorAVSRegistrationStatusUpdated) - 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 *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectory contract. -type AVSDirectoryOperatorAVSRegistrationStatusUpdated struct { - Operator common.Address - Avs common.Address - Status uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. -// -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil -} - -// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. -// -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, 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(AVSDirectoryOperatorAVSRegistrationStatusUpdated) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", 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 -} - -// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. -// -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { - event := new(AVSDirectoryOperatorAVSRegistrationStatusUpdated) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the AVSDirectory contract. -type AVSDirectoryOperatorAddedToOperatorSetIterator struct { - Event *AVSDirectoryOperatorAddedToOperatorSet // 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 *AVSDirectoryOperatorAddedToOperatorSetIterator) 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(AVSDirectoryOperatorAddedToOperatorSet) - 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(AVSDirectoryOperatorAddedToOperatorSet) - 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 *AVSDirectoryOperatorAddedToOperatorSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryOperatorAddedToOperatorSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the AVSDirectory contract. -type AVSDirectoryOperatorAddedToOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - 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 (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryOperatorAddedToOperatorSetIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) - if err != nil { - return nil, err - } - return &AVSDirectoryOperatorAddedToOperatorSetIterator{contract: _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _AVSDirectory.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(AVSDirectoryOperatorAddedToOperatorSet) - if err := _AVSDirectory.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 (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*AVSDirectoryOperatorAddedToOperatorSet, error) { - event := new(AVSDirectoryOperatorAddedToOperatorSet) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the AVSDirectory contract. -type AVSDirectoryOperatorMigratedToOperatorSetsIterator struct { - Event *AVSDirectoryOperatorMigratedToOperatorSets // 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 *AVSDirectoryOperatorMigratedToOperatorSetsIterator) 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(AVSDirectoryOperatorMigratedToOperatorSets) - 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(AVSDirectoryOperatorMigratedToOperatorSets) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true + return _AVSDirectory.contract.Transact(opts, "renounceOwnership") +} - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_AVSDirectory *AVSDirectorySession) RenounceOwnership() (*types.Transaction, error) { + return _AVSDirectory.Contract.RenounceOwnership(&_AVSDirectory.TransactOpts) } -// Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryOperatorMigratedToOperatorSetsIterator) Error() error { - return it.fail +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _AVSDirectory.Contract.RenounceOwnership(&_AVSDirectory.TransactOpts) } -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryOperatorMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_AVSDirectory *AVSDirectoryTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "setPauserRegistry", newPauserRegistry) +} + +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_AVSDirectory *AVSDirectorySession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _AVSDirectory.Contract.SetPauserRegistry(&_AVSDirectory.TransactOpts, newPauserRegistry) } -// AVSDirectoryOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the AVSDirectory contract. -type AVSDirectoryOperatorMigratedToOperatorSets struct { - Operator common.Address - Avs common.Address - OperatorSetIds []uint32 - Raw types.Log // Blockchain specific contextual infos +// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. +// +// Solidity: function setPauserRegistry(address newPauserRegistry) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) { + return _AVSDirectory.Contract.SetPauserRegistry(&_AVSDirectory.TransactOpts, newPauserRegistry) } -// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryOperatorMigratedToOperatorSetsIterator, error) { +// Solidity: function transferOwnership(address newOwner) returns() +func (_AVSDirectory *AVSDirectoryTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "transferOwnership", newOwner) +} - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_AVSDirectory *AVSDirectorySession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _AVSDirectory.Contract.TransferOwnership(&_AVSDirectory.TransactOpts, newOwner) +} - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryOperatorMigratedToOperatorSetsIterator{contract: _AVSDirectory.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _AVSDirectory.Contract.TransferOwnership(&_AVSDirectory.TransactOpts, newOwner) } -// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. // -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_AVSDirectory *AVSDirectoryTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "unpause", newPausedStatus) +} - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_AVSDirectory *AVSDirectorySession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _AVSDirectory.Contract.Unpause(&_AVSDirectory.TransactOpts, newPausedStatus) +} - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, 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(AVSDirectoryOperatorMigratedToOperatorSets) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { - return err - } - event.Raw = log +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _AVSDirectory.Contract.Unpause(&_AVSDirectory.TransactOpts, newPausedStatus) +} - 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 +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectory *AVSDirectoryTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _AVSDirectory.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) } -// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. // -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*AVSDirectoryOperatorMigratedToOperatorSets, error) { - event := new(AVSDirectoryOperatorMigratedToOperatorSets) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectory *AVSDirectorySession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _AVSDirectory.Contract.UpdateAVSMetadataURI(&_AVSDirectory.TransactOpts, metadataURI) +} + +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. +// +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectory *AVSDirectoryTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _AVSDirectory.Contract.UpdateAVSMetadataURI(&_AVSDirectory.TransactOpts, metadataURI) } -// AVSDirectoryOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the AVSDirectory contract. -type AVSDirectoryOperatorRemovedFromOperatorSetIterator struct { - Event *AVSDirectoryOperatorRemovedFromOperatorSet // Event containing the contract specifics and raw log +// AVSDirectoryAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AVSDirectory contract. +type AVSDirectoryAVSMetadataURIUpdatedIterator struct { + Event *AVSDirectoryAVSMetadataURIUpdated // 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 @@ -3060,7 +797,7 @@ type AVSDirectoryOperatorRemovedFromOperatorSetIterator 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 *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { +func (it *AVSDirectoryAVSMetadataURIUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3069,7 +806,7 @@ func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorRemovedFromOperatorSet) + it.Event = new(AVSDirectoryAVSMetadataURIUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3084,7 +821,7 @@ func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorRemovedFromOperatorSet) + it.Event = new(AVSDirectoryAVSMetadataURIUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3100,52 +837,52 @@ func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Error() error { +func (it *AVSDirectoryAVSMetadataURIUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryOperatorRemovedFromOperatorSetIterator) Close() error { +func (it *AVSDirectoryAVSMetadataURIUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the AVSDirectory contract. -type AVSDirectoryOperatorRemovedFromOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet +// AVSDirectoryAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the AVSDirectory contract. +type AVSDirectoryAVSMetadataURIUpdated struct { + Avs common.Address + MetadataURI string Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// FilterAVSMetadataURIUpdated is a free log retrieval operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_AVSDirectory *AVSDirectoryFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryAVSMetadataURIUpdatedIterator, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) } - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) if err != nil { return nil, err } - return &AVSDirectoryOperatorRemovedFromOperatorSetIterator{contract: _AVSDirectory.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil + return &AVSDirectoryAVSMetadataURIUpdatedIterator{contract: _AVSDirectory.contract, event: "AVSMetadataURIUpdated", logs: logs, sub: sub}, nil } -// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// WatchAVSMetadataURIUpdated is a free log subscription operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_AVSDirectory *AVSDirectoryFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) } - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "AVSMetadataURIUpdated", avsRule) if err != nil { return nil, err } @@ -3155,8 +892,8 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(o select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryOperatorRemovedFromOperatorSet) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { + event := new(AVSDirectoryAVSMetadataURIUpdated) + if err := _AVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { return err } event.Raw = log @@ -3177,21 +914,21 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(o }), nil } -// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// ParseAVSMetadataURIUpdated is a log parse operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*AVSDirectoryOperatorRemovedFromOperatorSet, error) { - event := new(AVSDirectoryOperatorRemovedFromOperatorSet) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_AVSDirectory *AVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*AVSDirectoryAVSMetadataURIUpdated, error) { + event := new(AVSDirectoryAVSMetadataURIUpdated) + if err := _AVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// AVSDirectoryOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the AVSDirectory contract. -type AVSDirectoryOperatorSetCreatedIterator struct { - Event *AVSDirectoryOperatorSetCreated // Event containing the contract specifics and raw log +// AVSDirectoryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AVSDirectory contract. +type AVSDirectoryInitializedIterator struct { + Event *AVSDirectoryInitialized // 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 @@ -3205,7 +942,7 @@ type AVSDirectoryOperatorSetCreatedIterator 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 *AVSDirectoryOperatorSetCreatedIterator) Next() bool { +func (it *AVSDirectoryInitializedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3214,7 +951,7 @@ func (it *AVSDirectoryOperatorSetCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorSetCreated) + it.Event = new(AVSDirectoryInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3229,7 +966,7 @@ func (it *AVSDirectoryOperatorSetCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorSetCreated) + it.Event = new(AVSDirectoryInitialized) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3245,41 +982,41 @@ func (it *AVSDirectoryOperatorSetCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryOperatorSetCreatedIterator) Error() error { +func (it *AVSDirectoryInitializedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryOperatorSetCreatedIterator) Close() error { +func (it *AVSDirectoryInitializedIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryOperatorSetCreated represents a OperatorSetCreated event raised by the AVSDirectory contract. -type AVSDirectoryOperatorSetCreated struct { - OperatorSet IAVSDirectoryOperatorSet - Raw types.Log // Blockchain specific contextual infos +// AVSDirectoryInitialized represents a Initialized event raised by the AVSDirectory contract. +type AVSDirectoryInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorSetCreated is a free log retrieval operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OperatorSetCreated((address,uint32) operatorSet) -func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*AVSDirectoryOperatorSetCreatedIterator, error) { +// Solidity: event Initialized(uint8 version) +func (_AVSDirectory *AVSDirectoryFilterer) FilterInitialized(opts *bind.FilterOpts) (*AVSDirectoryInitializedIterator, error) { - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorSetCreated") + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "Initialized") if err != nil { return nil, err } - return &AVSDirectoryOperatorSetCreatedIterator{contract: _AVSDirectory.contract, event: "OperatorSetCreated", logs: logs, sub: sub}, nil + return &AVSDirectoryInitializedIterator{contract: _AVSDirectory.contract, event: "Initialized", logs: logs, sub: sub}, nil } -// WatchOperatorSetCreated is a free log subscription operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OperatorSetCreated((address,uint32) operatorSet) -func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorSetCreated) (event.Subscription, error) { +// Solidity: event Initialized(uint8 version) +func (_AVSDirectory *AVSDirectoryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *AVSDirectoryInitialized) (event.Subscription, error) { - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorSetCreated") + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "Initialized") if err != nil { return nil, err } @@ -3289,8 +1026,8 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorSetCreated(opts *bind.Wa select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryOperatorSetCreated) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { + event := new(AVSDirectoryInitialized) + if err := _AVSDirectory.contract.UnpackLog(event, "Initialized", log); err != nil { return err } event.Raw = log @@ -3311,21 +1048,21 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorSetCreated(opts *bind.Wa }), nil } -// ParseOperatorSetCreated is a log parse operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. // -// Solidity: event OperatorSetCreated((address,uint32) operatorSet) -func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorSetCreated(log types.Log) (*AVSDirectoryOperatorSetCreated, error) { - event := new(AVSDirectoryOperatorSetCreated) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { +// Solidity: event Initialized(uint8 version) +func (_AVSDirectory *AVSDirectoryFilterer) ParseInitialized(log types.Log) (*AVSDirectoryInitialized, error) { + event := new(AVSDirectoryInitialized) + if err := _AVSDirectory.contract.UnpackLog(event, "Initialized", log); err != nil { return nil, err } event.Raw = log return event, nil } -// AVSDirectoryOperatorSlashedIterator is returned from FilterOperatorSlashed and is used to iterate over the raw logs and unpacked data for OperatorSlashed events raised by the AVSDirectory contract. -type AVSDirectoryOperatorSlashedIterator struct { - Event *AVSDirectoryOperatorSlashed // Event containing the contract specifics and raw log +// AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the AVSDirectory contract. +type AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { + Event *AVSDirectoryOperatorAVSRegistrationStatusUpdated // 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 @@ -3339,7 +1076,7 @@ type AVSDirectoryOperatorSlashedIterator 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 *AVSDirectoryOperatorSlashedIterator) Next() bool { +func (it *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3348,7 +1085,7 @@ func (it *AVSDirectoryOperatorSlashedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorSlashed) + it.Event = new(AVSDirectoryOperatorAVSRegistrationStatusUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3363,7 +1100,7 @@ func (it *AVSDirectoryOperatorSlashedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryOperatorSlashed) + it.Event = new(AVSDirectoryOperatorAVSRegistrationStatusUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3379,44 +1116,61 @@ func (it *AVSDirectoryOperatorSlashedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryOperatorSlashedIterator) Error() error { +func (it *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryOperatorSlashedIterator) Close() error { +func (it *AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryOperatorSlashed represents a OperatorSlashed event raised by the AVSDirectory contract. -type AVSDirectoryOperatorSlashed struct { - Operator common.Address - OperatorSetId uint32 - Strategy common.Address - BipsToSlash uint16 - Raw types.Log // Blockchain specific contextual infos +// AVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectory contract. +type AVSDirectoryOperatorAVSRegistrationStatusUpdated struct { + Operator common.Address + Avs common.Address + Status uint8 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorSlashed is a free log retrieval operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. // -// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) -func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorSlashed(opts *bind.FilterOpts) (*AVSDirectoryOperatorSlashedIterator, error) { +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectory *AVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } - logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorSlashed") + logs, sub, err := _AVSDirectory.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) if err != nil { return nil, err } - return &AVSDirectoryOperatorSlashedIterator{contract: _AVSDirectory.contract, event: "OperatorSlashed", logs: logs, sub: sub}, nil + return &AVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil } -// WatchOperatorSlashed is a free log subscription operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. // -// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) -func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorSlashed(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorSlashed) (event.Subscription, error) { +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } - logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorSlashed") + logs, sub, err := _AVSDirectory.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) if err != nil { return nil, err } @@ -3426,8 +1180,8 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorSlashed(opts *bind.Watch select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryOperatorSlashed) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorSlashed", log); err != nil { + event := new(AVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { return err } event.Raw = log @@ -3448,12 +1202,12 @@ func (_AVSDirectory *AVSDirectoryFilterer) WatchOperatorSlashed(opts *bind.Watch }), nil } -// ParseOperatorSlashed is a log parse operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. // -// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) -func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorSlashed(log types.Log) (*AVSDirectoryOperatorSlashed, error) { - event := new(AVSDirectoryOperatorSlashed) - if err := _AVSDirectory.contract.UnpackLog(event, "OperatorSlashed", log); err != nil { +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectory *AVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { + event := new(AVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _AVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { return nil, err } event.Raw = log diff --git a/pkg/bindings/AVSDirectoryStorage/binding.go b/pkg/bindings/AVSDirectoryStorage/binding.go index b705c9766..558c6dd8f 100644 --- a/pkg/bindings/AVSDirectoryStorage/binding.go +++ b/pkg/bindings/AVSDirectoryStorage/binding.go @@ -29,20 +29,6 @@ var ( _ = abi.ConvertType ) -// IAVSDirectoryMagnitudeAllocation is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryMagnitudeAllocation struct { - Strategy common.Address - ExpectedTotalMagnitude uint64 - OperatorSets []IAVSDirectoryOperatorSet - Magnitudes []uint64 -} - -// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 -} - // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -52,7 +38,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry struct { // AVSDirectoryStorageMetaData contains all meta data concerning the AVSDirectoryStorage contract. var AVSDirectoryStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAGNITUDE_ADJUSTMENT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateMagnitudeAllocationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"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\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"numToComplete\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentSlashableMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"uint64[][]\",\"internalType\":\"uint64[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNumOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetsOfOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"uint64[][]\",\"internalType\":\"uint64[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashablePPM\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"linear\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint24[]\",\"internalType\":\"uint24[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudeAtTimestamp\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudesAtTimestamp\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"operatorMagnitudeInfo\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"nextPendingFreeMagnitudeIndex\",\"type\":\"uint192\",\"internalType\":\"uint192\"},{\"name\":\"freeMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetMemberAtIndex\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"registered\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"lastDeregisteredTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOfAtIndex\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"slashOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateFreeMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToComplete\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeAllocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToAllocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeDeallocationCompleted\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"freeMagnitudeAdded\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeQueueDeallocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToDeallocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"completableTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectory.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\":\"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\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"structISignatureUtils.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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureSaltSpent\",\"inputs\":[]}]", } // AVSDirectoryStorageABI is the input ABI used to generate the binding from. @@ -232,37 +218,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) DOMAINTYPEHASH() ( return _AVSDirectoryStorage.Contract.DOMAINTYPEHASH(&_AVSDirectoryStorage.CallOpts) } -// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. -// -// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) MAGNITUDEADJUSTMENTTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "MAGNITUDE_ADJUSTMENT_TYPEHASH") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. -// -// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) MAGNITUDEADJUSTMENTTYPEHASH() ([32]byte, error) { - return _AVSDirectoryStorage.Contract.MAGNITUDEADJUSTMENTTYPEHASH(&_AVSDirectoryStorage.CallOpts) -} - -// MAGNITUDEADJUSTMENTTYPEHASH is a free data retrieval call binding the contract method 0x7b205de3. -// -// Solidity: function MAGNITUDE_ADJUSTMENT_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) MAGNITUDEADJUSTMENTTYPEHASH() ([32]byte, error) { - return _AVSDirectoryStorage.Contract.MAGNITUDEADJUSTMENTTYPEHASH(&_AVSDirectoryStorage.CallOpts) -} - // OPERATORAVSREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xd79aceab. // // Solidity: function OPERATOR_AVS_REGISTRATION_TYPEHASH() view returns(bytes32) @@ -294,68 +249,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORAVSREGISTR return _AVSDirectoryStorage.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) } -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OPERATORSETFORCEDEREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectoryStorage.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) -} - -// OPERATORSETFORCEDEREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xdce974b9. -// -// Solidity: function OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORSETFORCEDEREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectoryStorage.Contract.OPERATORSETFORCEDEREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) -} - -// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. -// -// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OPERATORSETREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "OPERATOR_SET_REGISTRATION_TYPEHASH") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. -// -// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectoryStorage.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) -} - -// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. -// -// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { - return _AVSDirectoryStorage.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_AVSDirectoryStorage.CallOpts) -} - // AvsOperatorStatus is a free data retrieval call binding the contract method 0x49075da3. // // Solidity: function avsOperatorStatus(address , address ) view returns(uint8) @@ -387,37 +280,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) AvsOperatorStatus( return _AVSDirectoryStorage.Contract.AvsOperatorStatus(&_AVSDirectoryStorage.CallOpts, arg0, arg1) } -// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. -// -// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) CalculateMagnitudeAllocationDigestHash(opts *bind.CallOpts, operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "calculateMagnitudeAllocationDigestHash", operator, allocations, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. -// -// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CalculateMagnitudeAllocationDigestHash(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectoryStorage.Contract.CalculateMagnitudeAllocationDigestHash(&_AVSDirectoryStorage.CallOpts, operator, allocations, salt, expiry) -} - -// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. -// -// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateMagnitudeAllocationDigestHash(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectoryStorage.Contract.CalculateMagnitudeAllocationDigestHash(&_AVSDirectoryStorage.CallOpts, operator, allocations, salt, expiry) -} - // CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. // // Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -449,68 +311,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateOperatorA return _AVSDirectoryStorage.Contract.CalculateOperatorAVSRegistrationDigestHash(&_AVSDirectoryStorage.CallOpts, operator, avs, salt, expiry) } -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectoryStorage.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) -} - -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. -// -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectoryStorage.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) -} - -// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. -// -// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) CalculateOperatorSetRegistrationDigestHash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "calculateOperatorSetRegistrationDigestHash", avs, operatorSetIds, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. -// -// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectoryStorage.Contract.CalculateOperatorSetRegistrationDigestHash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) -} - -// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. -// -// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _AVSDirectoryStorage.Contract.CalculateOperatorSetRegistrationDigestHash(&_AVSDirectoryStorage.CallOpts, avs, operatorSetIds, salt, expiry) -} - // Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // // Solidity: function delegation() view returns(address) @@ -542,2248 +342,202 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) Delegation() (comm return _AVSDirectoryStorage.Contract.Delegation(&_AVSDirectoryStorage.CallOpts) } -// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // -// Solidity: function domainSeparator() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "domainSeparator") + err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) if err != nil { - return *new([32]byte), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // -// Solidity: function domainSeparator() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) DomainSeparator() ([32]byte, error) { - return _AVSDirectoryStorage.Contract.DomainSeparator(&_AVSDirectoryStorage.CallOpts) +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) } -// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // -// Solidity: function domainSeparator() view returns(bytes32) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) DomainSeparator() ([32]byte, error) { - return _AVSDirectoryStorage.Contract.DomainSeparator(&_AVSDirectoryStorage.CallOpts) +// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) +func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) } -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetAllocatableMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getAllocatableMagnitude", operator, strategy, numToComplete) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "deregisterOperatorFromAVS", operator) } -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { - return _AVSDirectoryStorage.Contract.GetAllocatableMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy, numToComplete) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) } -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { - return _AVSDirectoryStorage.Contract.GetAllocatableMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy, numToComplete) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) } -// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetCurrentSlashableMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getCurrentSlashableMagnitudes", operator, strategies) - - if err != nil { - return *new([]IAVSDirectoryOperatorSet), *new([][]uint64), err - } - - out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) - out1 := *abi.ConvertType(out[1], new([][]uint64)).(*[][]uint64) - - return out0, out1, err - +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) } -// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetCurrentSlashableMagnitudes(operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - return _AVSDirectoryStorage.Contract.GetCurrentSlashableMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies) +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) } -// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetCurrentSlashableMagnitudes(operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - return _AVSDirectoryStorage.Contract.GetCurrentSlashableMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies) +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) } -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. // -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetNumOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getNumOperatorsInOperatorSet", operatorSet) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _AVSDirectoryStorage.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) } -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. // -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { - return _AVSDirectoryStorage.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet) +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.UpdateAVSMetadataURI(&_AVSDirectoryStorage.TransactOpts, metadataURI) } -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. // -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { - return _AVSDirectoryStorage.Contract.GetNumOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet) +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _AVSDirectoryStorage.Contract.UpdateAVSMetadataURI(&_AVSDirectoryStorage.TransactOpts, metadataURI) } -// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. -// -// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetOperatorSetsOfOperator(opts *bind.CallOpts, operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getOperatorSetsOfOperator", operator, start, length) +// AVSDirectoryStorageAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageAVSMetadataURIUpdatedIterator struct { + Event *AVSDirectoryStorageAVSMetadataURIUpdated // Event containing the contract specifics and raw log - if err != nil { - return *new([]IAVSDirectoryOperatorSet), err - } + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data - out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) + 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 +} - return out0, err +// 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 *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) 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(AVSDirectoryStorageAVSMetadataURIUpdated) + 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(AVSDirectoryStorageAVSMetadataURIUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. -// -// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { - return _AVSDirectoryStorage.Contract.GetOperatorSetsOfOperator(&_AVSDirectoryStorage.CallOpts, operator, start, length) + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } } -// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. -// -// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { - return _AVSDirectoryStorage.Contract.GetOperatorSetsOfOperator(&_AVSDirectoryStorage.CallOpts, operator, start, length) -} - -// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. -// -// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getOperatorsInOperatorSet", operatorSet, start, length) - - if err != nil { - return *new([]common.Address), err - } - - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - - return out0, err - -} - -// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. -// -// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { - return _AVSDirectoryStorage.Contract.GetOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet, start, length) -} - -// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. -// -// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { - return _AVSDirectoryStorage.Contract.GetOperatorsInOperatorSet(&_AVSDirectoryStorage.CallOpts, operatorSet, start, length) -} - -// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. -// -// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetSlashableMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getSlashableMagnitudes", operator, strategies, timestamp) - - if err != nil { - return *new([]IAVSDirectoryOperatorSet), *new([][]uint64), err - } - - out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) - out1 := *abi.ConvertType(out[1], new([][]uint64)).(*[][]uint64) - - return out0, out1, err - -} - -// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. -// -// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetSlashableMagnitudes(operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - return _AVSDirectoryStorage.Contract.GetSlashableMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies, timestamp) -} - -// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. -// -// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetSlashableMagnitudes(operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - return _AVSDirectoryStorage.Contract.GetSlashableMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies, timestamp) -} - -// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. -// -// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetSlashablePPM(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getSlashablePPM", operator, operatorSet, strategies, timestamp, linear) - - if err != nil { - return *new([]*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) - - return out0, err - -} - -// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. -// -// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetSlashablePPM(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { - return _AVSDirectoryStorage.Contract.GetSlashablePPM(&_AVSDirectoryStorage.CallOpts, operator, operatorSet, strategies, timestamp, linear) -} - -// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. -// -// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetSlashablePPM(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { - return _AVSDirectoryStorage.Contract.GetSlashablePPM(&_AVSDirectoryStorage.CallOpts, operator, operatorSet, strategies, timestamp, linear) -} - -// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. -// -// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetTotalMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getTotalMagnitude", operator, strategy) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. -// -// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetTotalMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AVSDirectoryStorage.Contract.GetTotalMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy) -} - -// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. -// -// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetTotalMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AVSDirectoryStorage.Contract.GetTotalMagnitude(&_AVSDirectoryStorage.CallOpts, operator, strategy) -} - -// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. -// -// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetTotalMagnitudeAtTimestamp(opts *bind.CallOpts, operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getTotalMagnitudeAtTimestamp", operator, strategy, timestamp) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. -// -// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetTotalMagnitudeAtTimestamp(operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { - return _AVSDirectoryStorage.Contract.GetTotalMagnitudeAtTimestamp(&_AVSDirectoryStorage.CallOpts, operator, strategy, timestamp) -} - -// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. -// -// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetTotalMagnitudeAtTimestamp(operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { - return _AVSDirectoryStorage.Contract.GetTotalMagnitudeAtTimestamp(&_AVSDirectoryStorage.CallOpts, operator, strategy, timestamp) -} - -// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. -// -// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetTotalMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]uint64, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getTotalMagnitudes", operator, strategies) - - if err != nil { - return *new([]uint64), err - } - - out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) - - return out0, err - -} - -// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. -// -// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetTotalMagnitudes(operator common.Address, strategies []common.Address) ([]uint64, error) { - return _AVSDirectoryStorage.Contract.GetTotalMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies) -} - -// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. -// -// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetTotalMagnitudes(operator common.Address, strategies []common.Address) ([]uint64, error) { - return _AVSDirectoryStorage.Contract.GetTotalMagnitudes(&_AVSDirectoryStorage.CallOpts, operator, strategies) -} - -// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. -// -// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) GetTotalMagnitudesAtTimestamp(opts *bind.CallOpts, operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "getTotalMagnitudesAtTimestamp", operator, strategies, timestamp) - - if err != nil { - return *new([]uint64), err - } - - out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) - - return out0, err - -} - -// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. -// -// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) GetTotalMagnitudesAtTimestamp(operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { - return _AVSDirectoryStorage.Contract.GetTotalMagnitudesAtTimestamp(&_AVSDirectoryStorage.CallOpts, operator, strategies, timestamp) -} - -// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. -// -// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) GetTotalMagnitudesAtTimestamp(operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { - return _AVSDirectoryStorage.Contract.GetTotalMagnitudesAtTimestamp(&_AVSDirectoryStorage.CallOpts, operator, strategies, timestamp) -} - -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "inTotalOperatorSets", operator) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _AVSDirectoryStorage.Contract.InTotalOperatorSets(&_AVSDirectoryStorage.CallOpts, operator) -} - -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _AVSDirectoryStorage.Contract.InTotalOperatorSets(&_AVSDirectoryStorage.CallOpts, operator) -} - -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsMember(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "isMember", operator, operatorSet) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) -} - -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectoryStorage.Contract.IsMember(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) -} - -// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. -// -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsOperatorSet(opts *bind.CallOpts, arg0 common.Address, arg1 uint32) (bool, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "isOperatorSet", arg0, arg1) - - 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 0x84d76f7b. -// -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { - return _AVSDirectoryStorage.Contract.IsOperatorSet(&_AVSDirectoryStorage.CallOpts, arg0, arg1) -} - -// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. -// -// Solidity: function isOperatorSet(address , uint32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsOperatorSet(arg0 common.Address, arg1 uint32) (bool, error) { - return _AVSDirectoryStorage.Contract.IsOperatorSet(&_AVSDirectoryStorage.CallOpts, arg0, arg1) -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsOperatorSetAVS(opts *bind.CallOpts, arg0 common.Address) (bool, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "isOperatorSetAVS", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { - return _AVSDirectoryStorage.Contract.IsOperatorSetAVS(&_AVSDirectoryStorage.CallOpts, arg0) -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsOperatorSetAVS(arg0 common.Address) (bool, error) { - return _AVSDirectoryStorage.Contract.IsOperatorSetAVS(&_AVSDirectoryStorage.CallOpts, arg0) -} - -// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. -// -// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) IsOperatorSlashable(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - var out []interface{} - err := _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageSession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectoryStorage.Contract.IsOperatorSlashable(&_AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _AVSDirectoryStorage.Contract.IsOperatorSlashable(&_AVSDirectoryStorage.CallOpts, operator, operatorSet) -} - -// OperatorMagnitudeInfo is a free data retrieval call binding the contract method 0xcb13e56b. -// -// Solidity: function operatorMagnitudeInfo(address , address ) view returns(uint192 nextPendingFreeMagnitudeIndex, uint64 freeMagnitude) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorMagnitudeInfo(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (struct { - NextPendingFreeMagnitudeIndex *big.Int - FreeMagnitude uint64 -}, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorMagnitudeInfo", arg0, arg1) - - outstruct := new(struct { - NextPendingFreeMagnitudeIndex *big.Int - FreeMagnitude uint64 - }) - if err != nil { - return *outstruct, err - } - - outstruct.NextPendingFreeMagnitudeIndex = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.FreeMagnitude = *abi.ConvertType(out[1], new(uint64)).(*uint64) - - return *outstruct, err - -} - -// OperatorMagnitudeInfo is a free data retrieval call binding the contract method 0xcb13e56b. -// -// Solidity: function operatorMagnitudeInfo(address , address ) view returns(uint192 nextPendingFreeMagnitudeIndex, uint64 freeMagnitude) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorMagnitudeInfo(arg0 common.Address, arg1 common.Address) (struct { - NextPendingFreeMagnitudeIndex *big.Int - FreeMagnitude uint64 -}, error) { - return _AVSDirectoryStorage.Contract.OperatorMagnitudeInfo(&_AVSDirectoryStorage.CallOpts, arg0, arg1) -} - -// OperatorMagnitudeInfo is a free data retrieval call binding the contract method 0xcb13e56b. -// -// Solidity: function operatorMagnitudeInfo(address , address ) view returns(uint192 nextPendingFreeMagnitudeIndex, uint64 freeMagnitude) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorMagnitudeInfo(arg0 common.Address, arg1 common.Address) (struct { - NextPendingFreeMagnitudeIndex *big.Int - FreeMagnitude uint64 -}, error) { - return _AVSDirectoryStorage.Contract.OperatorMagnitudeInfo(&_AVSDirectoryStorage.CallOpts, arg0, arg1) -} - -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. -// -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSaltIsSpent(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSaltIsSpent", arg0, arg1) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. -// -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) -} - -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. -// -// Solidity: function operatorSaltIsSpent(address , bytes32 ) view returns(bool) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSaltIsSpent(arg0 common.Address, arg1 [32]byte) (bool, error) { - return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, arg0, arg1) -} - -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. -// -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetMemberAtIndex(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetMemberAtIndex", operatorSet, index) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. -// -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - return _AVSDirectoryStorage.Contract.OperatorSetMemberAtIndex(&_AVSDirectoryStorage.CallOpts, operatorSet, index) -} - -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. -// -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - return _AVSDirectoryStorage.Contract.OperatorSetMemberAtIndex(&_AVSDirectoryStorage.CallOpts, operatorSet, index) -} - -// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. -// -// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetStatus(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { - Registered bool - LastDeregisteredTimestamp uint32 -}, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetStatus", arg0, arg1, arg2) - - outstruct := new(struct { - Registered bool - LastDeregisteredTimestamp uint32 - }) - if err != nil { - return *outstruct, err - } - - outstruct.Registered = *abi.ConvertType(out[0], new(bool)).(*bool) - outstruct.LastDeregisteredTimestamp = *abi.ConvertType(out[1], new(uint32)).(*uint32) - - return *outstruct, err - -} - -// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. -// -// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetStatus(arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { - Registered bool - LastDeregisteredTimestamp uint32 -}, error) { - return _AVSDirectoryStorage.Contract.OperatorSetStatus(&_AVSDirectoryStorage.CallOpts, arg0, arg1, arg2) -} - -// OperatorSetStatus is a free data retrieval call binding the contract method 0x1e68134e. -// -// Solidity: function operatorSetStatus(address , address , uint32 ) view returns(bool registered, uint32 lastDeregisteredTimestamp) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetStatus(arg0 common.Address, arg1 common.Address, arg2 uint32) (struct { - Registered bool - LastDeregisteredTimestamp uint32 -}, error) { - return _AVSDirectoryStorage.Contract.OperatorSetStatus(&_AVSDirectoryStorage.CallOpts, arg0, arg1, arg2) -} - -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. -// -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) OperatorSetsMemberOfAtIndex(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "operatorSetsMemberOfAtIndex", operator, index) - - if err != nil { - return *new(IAVSDirectoryOperatorSet), err - } - - out0 := *abi.ConvertType(out[0], new(IAVSDirectoryOperatorSet)).(*IAVSDirectoryOperatorSet) - - return out0, err - -} - -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. -// -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _AVSDirectoryStorage.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectoryStorage.CallOpts, operator, index) -} - -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. -// -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _AVSDirectoryStorage.Contract.OperatorSetsMemberOfAtIndex(&_AVSDirectoryStorage.CallOpts, operator, index) -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "becomeOperatorSetAVS") -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.BecomeOperatorSetAVS(&_AVSDirectoryStorage.TransactOpts) -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.BecomeOperatorSetAVS(&_AVSDirectoryStorage.TransactOpts) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) CancelSalt(opts *bind.TransactOpts, salt [32]byte) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "cancelSalt", salt) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.CancelSalt(&_AVSDirectoryStorage.TransactOpts, salt) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.CancelSalt(&_AVSDirectoryStorage.TransactOpts, salt) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "createOperatorSets", operatorSetIds) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.CreateOperatorSets(&_AVSDirectoryStorage.TransactOpts, operatorSetIds) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.CreateOperatorSets(&_AVSDirectoryStorage.TransactOpts, operatorSetIds) -} - -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. -// -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "deregisterOperatorFromAVS", operator) -} - -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. -// -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) -} - -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. -// -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.DeregisterOperatorFromAVS(&_AVSDirectoryStorage.TransactOpts, operator) -} - -// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. -// -// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) DeregisterOperatorFromOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "deregisterOperatorFromOperatorSets", operator, operatorSetIds) -} - -// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. -// -// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds) -} - -// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. -// -// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.DeregisterOperatorFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.ForceDeregisterFromOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.MigrateOperatorsToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operators, operatorSetIds) -} - -// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. -// -// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) ModifyAllocations(opts *bind.TransactOpts, operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "modifyAllocations", operator, allocations, operatorSignature) -} - -// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. -// -// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) ModifyAllocations(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.ModifyAllocations(&_AVSDirectoryStorage.TransactOpts, operator, allocations, operatorSignature) -} - -// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. -// -// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) ModifyAllocations(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.ModifyAllocations(&_AVSDirectoryStorage.TransactOpts, operator, allocations, operatorSignature) -} - -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. -// -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) -} - -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. -// -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) -} - -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. -// -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToAVS(&_AVSDirectoryStorage.TransactOpts, operator, operatorSignature) -} - -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. -// -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, operatorSignature) -} - -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. -// -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, operatorSignature) -} - -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. -// -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.RegisterOperatorToOperatorSets(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetIds, operatorSignature) -} - -// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. -// -// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) SlashOperator(opts *bind.TransactOpts, operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "slashOperator", operator, operatorSetId, strategies, bipsToSlash) -} - -// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. -// -// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.SlashOperator(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) -} - -// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. -// -// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.SlashOperator(&_AVSDirectoryStorage.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) -} - -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. -// -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) -} - -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. -// -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.UpdateAVSMetadataURI(&_AVSDirectoryStorage.TransactOpts, metadataURI) -} - -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. -// -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.UpdateAVSMetadataURI(&_AVSDirectoryStorage.TransactOpts, metadataURI) -} - -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. -// -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactor) UpdateFreeMagnitude(opts *bind.TransactOpts, operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { - return _AVSDirectoryStorage.contract.Transact(opts, "updateFreeMagnitude", operator, strategies, numToComplete) -} - -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. -// -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.UpdateFreeMagnitude(&_AVSDirectoryStorage.TransactOpts, operator, strategies, numToComplete) -} - -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. -// -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() -func (_AVSDirectoryStorage *AVSDirectoryStorageTransactorSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { - return _AVSDirectoryStorage.Contract.UpdateFreeMagnitude(&_AVSDirectoryStorage.TransactOpts, operator, strategies, numToComplete) -} - -// AVSDirectoryStorageAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageAVSMetadataURIUpdatedIterator struct { - Event *AVSDirectoryStorageAVSMetadataURIUpdated // 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 *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) 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(AVSDirectoryStorageAVSMetadataURIUpdated) - 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(AVSDirectoryStorageAVSMetadataURIUpdated) - 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 *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageAVSMetadataURIUpdated 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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryStorageAVSMetadataURIUpdatedIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryStorageAVSMetadataURIUpdatedIterator{contract: _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.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(AVSDirectoryStorageAVSMetadataURIUpdated) - if err := _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*AVSDirectoryStorageAVSMetadataURIUpdated, error) { - event := new(AVSDirectoryStorageAVSMetadataURIUpdated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryStorageAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageAVSMigratedToOperatorSetsIterator struct { - Event *AVSDirectoryStorageAVSMigratedToOperatorSets // 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 *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) 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(AVSDirectoryStorageAVSMigratedToOperatorSets) - 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(AVSDirectoryStorageAVSMigratedToOperatorSets) - 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 *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageAVSMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageAVSMigratedToOperatorSets struct { - Avs common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryStorageAVSMigratedToOperatorSetsIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryStorageAVSMigratedToOperatorSetsIterator{contract: _AVSDirectoryStorage.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil -} - -// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", 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(AVSDirectoryStorageAVSMigratedToOperatorSets) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMigratedToOperatorSets", 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 -} - -// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*AVSDirectoryStorageAVSMigratedToOperatorSets, error) { - event := new(AVSDirectoryStorageAVSMigratedToOperatorSets) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryStorageMagnitudeAllocatedIterator is returned from FilterMagnitudeAllocated and is used to iterate over the raw logs and unpacked data for MagnitudeAllocated events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageMagnitudeAllocatedIterator struct { - Event *AVSDirectoryStorageMagnitudeAllocated // 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 *AVSDirectoryStorageMagnitudeAllocatedIterator) 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(AVSDirectoryStorageMagnitudeAllocated) - 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(AVSDirectoryStorageMagnitudeAllocated) - 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 *AVSDirectoryStorageMagnitudeAllocatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageMagnitudeAllocatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageMagnitudeAllocated represents a MagnitudeAllocated event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageMagnitudeAllocated struct { - Operator common.Address - Strategy common.Address - OperatorSet IAVSDirectoryOperatorSet - MagnitudeToAllocate uint64 - EffectTimestamp uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMagnitudeAllocated is a free log retrieval operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. -// -// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterMagnitudeAllocated(opts *bind.FilterOpts) (*AVSDirectoryStorageMagnitudeAllocatedIterator, error) { - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "MagnitudeAllocated") - if err != nil { - return nil, err - } - return &AVSDirectoryStorageMagnitudeAllocatedIterator{contract: _AVSDirectoryStorage.contract, event: "MagnitudeAllocated", logs: logs, sub: sub}, nil -} - -// WatchMagnitudeAllocated is a free log subscription operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. -// -// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchMagnitudeAllocated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageMagnitudeAllocated) (event.Subscription, error) { - - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "MagnitudeAllocated") - 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(AVSDirectoryStorageMagnitudeAllocated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeAllocated", 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 -} - -// ParseMagnitudeAllocated is a log parse operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. -// -// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseMagnitudeAllocated(log types.Log) (*AVSDirectoryStorageMagnitudeAllocated, error) { - event := new(AVSDirectoryStorageMagnitudeAllocated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeAllocated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryStorageMagnitudeDeallocationCompletedIterator is returned from FilterMagnitudeDeallocationCompleted and is used to iterate over the raw logs and unpacked data for MagnitudeDeallocationCompleted events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageMagnitudeDeallocationCompletedIterator struct { - Event *AVSDirectoryStorageMagnitudeDeallocationCompleted // 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 *AVSDirectoryStorageMagnitudeDeallocationCompletedIterator) 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(AVSDirectoryStorageMagnitudeDeallocationCompleted) - 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(AVSDirectoryStorageMagnitudeDeallocationCompleted) - 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 *AVSDirectoryStorageMagnitudeDeallocationCompletedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageMagnitudeDeallocationCompletedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageMagnitudeDeallocationCompleted represents a MagnitudeDeallocationCompleted event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageMagnitudeDeallocationCompleted struct { - Operator common.Address - Strategy common.Address - OperatorSet IAVSDirectoryOperatorSet - FreeMagnitudeAdded uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMagnitudeDeallocationCompleted is a free log retrieval operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. -// -// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterMagnitudeDeallocationCompleted(opts *bind.FilterOpts) (*AVSDirectoryStorageMagnitudeDeallocationCompletedIterator, error) { - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "MagnitudeDeallocationCompleted") - if err != nil { - return nil, err - } - return &AVSDirectoryStorageMagnitudeDeallocationCompletedIterator{contract: _AVSDirectoryStorage.contract, event: "MagnitudeDeallocationCompleted", logs: logs, sub: sub}, nil -} - -// WatchMagnitudeDeallocationCompleted is a free log subscription operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. -// -// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchMagnitudeDeallocationCompleted(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageMagnitudeDeallocationCompleted) (event.Subscription, error) { - - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "MagnitudeDeallocationCompleted") - 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(AVSDirectoryStorageMagnitudeDeallocationCompleted) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", 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 -} - -// ParseMagnitudeDeallocationCompleted is a log parse operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. -// -// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseMagnitudeDeallocationCompleted(log types.Log) (*AVSDirectoryStorageMagnitudeDeallocationCompleted, error) { - event := new(AVSDirectoryStorageMagnitudeDeallocationCompleted) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryStorageMagnitudeQueueDeallocatedIterator is returned from FilterMagnitudeQueueDeallocated and is used to iterate over the raw logs and unpacked data for MagnitudeQueueDeallocated events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageMagnitudeQueueDeallocatedIterator struct { - Event *AVSDirectoryStorageMagnitudeQueueDeallocated // 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 *AVSDirectoryStorageMagnitudeQueueDeallocatedIterator) 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(AVSDirectoryStorageMagnitudeQueueDeallocated) - 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(AVSDirectoryStorageMagnitudeQueueDeallocated) - 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 *AVSDirectoryStorageMagnitudeQueueDeallocatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageMagnitudeQueueDeallocatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageMagnitudeQueueDeallocated represents a MagnitudeQueueDeallocated event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageMagnitudeQueueDeallocated struct { - Operator common.Address - Strategy common.Address - OperatorSet IAVSDirectoryOperatorSet - MagnitudeToDeallocate uint64 - CompletableTimestamp uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMagnitudeQueueDeallocated is a free log retrieval operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. -// -// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterMagnitudeQueueDeallocated(opts *bind.FilterOpts) (*AVSDirectoryStorageMagnitudeQueueDeallocatedIterator, error) { - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "MagnitudeQueueDeallocated") - if err != nil { - return nil, err - } - return &AVSDirectoryStorageMagnitudeQueueDeallocatedIterator{contract: _AVSDirectoryStorage.contract, event: "MagnitudeQueueDeallocated", logs: logs, sub: sub}, nil -} - -// WatchMagnitudeQueueDeallocated is a free log subscription operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. -// -// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchMagnitudeQueueDeallocated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageMagnitudeQueueDeallocated) (event.Subscription, error) { - - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "MagnitudeQueueDeallocated") - 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(AVSDirectoryStorageMagnitudeQueueDeallocated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeQueueDeallocated", 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 -} - -// ParseMagnitudeQueueDeallocated is a log parse operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. -// -// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseMagnitudeQueueDeallocated(log types.Log) (*AVSDirectoryStorageMagnitudeQueueDeallocated, error) { - event := new(AVSDirectoryStorageMagnitudeQueueDeallocated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "MagnitudeQueueDeallocated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator struct { - Event *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated // 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 *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) 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(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) - 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(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) - 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 *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated struct { - Operator common.Address - Avs common.Address - Status uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. -// -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil -} - -// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. -// -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, 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(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", 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 -} - -// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. -// -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, error) { - event := new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryStorageOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorAddedToOperatorSetIterator struct { - Event *AVSDirectoryStorageOperatorAddedToOperatorSet // 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 *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) 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(AVSDirectoryStorageOperatorAddedToOperatorSet) - 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(AVSDirectoryStorageOperatorAddedToOperatorSet) - 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 *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageOperatorAddedToOperatorSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorAddedToOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - 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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryStorageOperatorAddedToOperatorSetIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) - if err != nil { - return nil, err - } - return &AVSDirectoryStorageOperatorAddedToOperatorSetIterator{contract: _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _AVSDirectoryStorage.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(AVSDirectoryStorageOperatorAddedToOperatorSet) - if err := _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*AVSDirectoryStorageOperatorAddedToOperatorSet, error) { - event := new(AVSDirectoryStorageOperatorAddedToOperatorSet) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator struct { - Event *AVSDirectoryStorageOperatorMigratedToOperatorSets // 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 *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) 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(AVSDirectoryStorageOperatorMigratedToOperatorSets) - 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(AVSDirectoryStorageOperatorMigratedToOperatorSets) - 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 *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorMigratedToOperatorSets struct { - Operator common.Address - Avs common.Address - OperatorSetIds []uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) - if err != nil { - return nil, err - } - return &AVSDirectoryStorageOperatorMigratedToOperatorSetsIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil -} - -// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, 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(AVSDirectoryStorageOperatorMigratedToOperatorSets) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", 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 -} - -// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*AVSDirectoryStorageOperatorMigratedToOperatorSets, error) { - event := new(AVSDirectoryStorageOperatorMigratedToOperatorSets) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator struct { - Event *AVSDirectoryStorageOperatorRemovedFromOperatorSet // 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 *AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator) 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(AVSDirectoryStorageOperatorRemovedFromOperatorSet) - 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(AVSDirectoryStorageOperatorRemovedFromOperatorSet) - 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 *AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator) Error() error { - return it.fail +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) Error() error { + return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator) Close() error { +func (it *AVSDirectoryStorageAVSMetadataURIUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryStorageOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorRemovedFromOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet +// AVSDirectoryStorageAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageAVSMetadataURIUpdated struct { + Avs common.Address + MetadataURI string Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// FilterAVSMetadataURIUpdated is a free log retrieval operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator, error) { +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*AVSDirectoryStorageAVSMetadataURIUpdatedIterator, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) } - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) if err != nil { return nil, err } - return &AVSDirectoryStorageOperatorRemovedFromOperatorSetIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil + return &AVSDirectoryStorageAVSMetadataURIUpdatedIterator{contract: _AVSDirectoryStorage.contract, event: "AVSMetadataURIUpdated", logs: logs, sub: sub}, nil } -// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// WatchAVSMetadataURIUpdated is a free log subscription operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) } - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "AVSMetadataURIUpdated", avsRule) if err != nil { return nil, err } @@ -2793,8 +547,8 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorRemovedFro select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryStorageOperatorRemovedFromOperatorSet) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { + event := new(AVSDirectoryStorageAVSMetadataURIUpdated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { return err } event.Raw = log @@ -2815,21 +569,21 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorRemovedFro }), nil } -// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// ParseAVSMetadataURIUpdated is a log parse operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*AVSDirectoryStorageOperatorRemovedFromOperatorSet, error) { - event := new(AVSDirectoryStorageOperatorRemovedFromOperatorSet) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*AVSDirectoryStorageAVSMetadataURIUpdated, error) { + event := new(AVSDirectoryStorageAVSMetadataURIUpdated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// AVSDirectoryStorageOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorSetCreatedIterator struct { - Event *AVSDirectoryStorageOperatorSetCreated // Event containing the contract specifics and raw log +// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator struct { + Event *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated // 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 @@ -2843,7 +597,7 @@ type AVSDirectoryStorageOperatorSetCreatedIterator 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 *AVSDirectoryStorageOperatorSetCreatedIterator) Next() bool { +func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2852,7 +606,7 @@ func (it *AVSDirectoryStorageOperatorSetCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(AVSDirectoryStorageOperatorSetCreated) + it.Event = new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2867,7 +621,7 @@ func (it *AVSDirectoryStorageOperatorSetCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(AVSDirectoryStorageOperatorSetCreated) + it.Event = new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2883,178 +637,61 @@ func (it *AVSDirectoryStorageOperatorSetCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryStorageOperatorSetCreatedIterator) Error() error { +func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *AVSDirectoryStorageOperatorSetCreatedIterator) Close() error { +func (it *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// AVSDirectoryStorageOperatorSetCreated represents a OperatorSetCreated event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorSetCreated struct { - OperatorSet IAVSDirectoryOperatorSet - Raw types.Log // Blockchain specific contextual infos +// AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the AVSDirectoryStorage contract. +type AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated struct { + Operator common.Address + Avs common.Address + Status uint8 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorSetCreated is a free log retrieval operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. // -// Solidity: event OperatorSetCreated((address,uint32) operatorSet) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*AVSDirectoryStorageOperatorSetCreatedIterator, error) { +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator, error) { - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorSetCreated") - if err != nil { - return nil, err + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) } - return &AVSDirectoryStorageOperatorSetCreatedIterator{contract: _AVSDirectoryStorage.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 (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorSetCreated) (event.Subscription, error) { - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorSetCreated") + logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, 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(AVSDirectoryStorageOperatorSetCreated) - if err := _AVSDirectoryStorage.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 + return &AVSDirectoryStorageOperatorAVSRegistrationStatusUpdatedIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil } -// ParseOperatorSetCreated is a log parse operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. // -// Solidity: event OperatorSetCreated((address,uint32) operatorSet) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorSetCreated(log types.Log) (*AVSDirectoryStorageOperatorSetCreated, error) { - event := new(AVSDirectoryStorageOperatorSetCreated) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// AVSDirectoryStorageOperatorSlashedIterator is returned from FilterOperatorSlashed and is used to iterate over the raw logs and unpacked data for OperatorSlashed events raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorSlashedIterator struct { - Event *AVSDirectoryStorageOperatorSlashed // 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 *AVSDirectoryStorageOperatorSlashedIterator) 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(AVSDirectoryStorageOperatorSlashed) - 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(AVSDirectoryStorageOperatorSlashed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *AVSDirectoryStorageOperatorSlashedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AVSDirectoryStorageOperatorSlashedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AVSDirectoryStorageOperatorSlashed represents a OperatorSlashed event raised by the AVSDirectoryStorage contract. -type AVSDirectoryStorageOperatorSlashed struct { - Operator common.Address - OperatorSetId uint32 - Strategy common.Address - BipsToSlash uint16 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorSlashed is a free log retrieval operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. -// -// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) FilterOperatorSlashed(opts *bind.FilterOpts) (*AVSDirectoryStorageOperatorSlashedIterator, error) { - - logs, sub, err := _AVSDirectoryStorage.contract.FilterLogs(opts, "OperatorSlashed") - if err != nil { - return nil, err + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) } - return &AVSDirectoryStorageOperatorSlashedIterator{contract: _AVSDirectoryStorage.contract, event: "OperatorSlashed", logs: logs, sub: sub}, nil -} - -// WatchOperatorSlashed is a free log subscription operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. -// -// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorSlashed(opts *bind.WatchOpts, sink chan<- *AVSDirectoryStorageOperatorSlashed) (event.Subscription, error) { - logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorSlashed") + logs, sub, err := _AVSDirectoryStorage.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) if err != nil { return nil, err } @@ -3064,8 +701,8 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorSlashed(op select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(AVSDirectoryStorageOperatorSlashed) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorSlashed", log); err != nil { + event := new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { return err } event.Raw = log @@ -3086,12 +723,12 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) WatchOperatorSlashed(op }), nil } -// ParseOperatorSlashed is a log parse operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. // -// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) -func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorSlashed(log types.Log) (*AVSDirectoryStorageOperatorSlashed, error) { - event := new(AVSDirectoryStorageOperatorSlashed) - if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorSlashed", log); err != nil { +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_AVSDirectoryStorage *AVSDirectoryStorageFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated, error) { + event := new(AVSDirectoryStorageOperatorAVSRegistrationStatusUpdated) + if err := _AVSDirectoryStorage.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { return nil, err } event.Raw = log diff --git a/pkg/bindings/BeaconChainProofs/binding.go b/pkg/bindings/BeaconChainProofs/binding.go index 26a0dc47e..2b165ef8f 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: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220be084b9f9b1032781be7a2d76a8c94953b0684f5f0c9fcef94a547960fdd65e964736f6c634300081b0033", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208a1eb51fb00c60eec27e6475590ffb72349f0d89ab6620fdb8296390a5a598a364736f6c634300081b0033", } // BeaconChainProofsABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/DelegationManager/binding.go b/pkg/bindings/DelegationManager/binding.go index 5740ffc70..106a65762 100644 --- a/pkg/bindings/DelegationManager/binding.go +++ b/pkg/bindings/DelegationManager/binding.go @@ -29,12 +29,6 @@ var ( _ = abi.ConvertType ) -// IDelegationManagerAllocationDelayDetails is an auto generated low-level Go binding around an user-defined struct. -type IDelegationManagerAllocationDelayDetails struct { - IsSet bool - AllocationDelay uint32 -} - // IDelegationManagerOperatorDetails is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerOperatorDetails struct { DeprecatedEarningsReceiver common.Address @@ -51,13 +45,13 @@ type IDelegationManagerQueuedWithdrawalParams struct { // IDelegationManagerWithdrawal is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerWithdrawal struct { - Staker common.Address - DelegatedTo common.Address - Withdrawer common.Address - Nonce *big.Int - StartTimestamp uint32 - Strategies []common.Address - ScaledShares []*big.Int + Staker common.Address + DelegatedTo common.Address + Withdrawer common.Address + Nonce *big.Int + StartBlock uint32 + Strategies []common.Address + Shares []*big.Int } // ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. @@ -68,8 +62,8 @@ type ISignatureUtilsSignatureWithExpiry 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\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"startTimestamp\",\"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\":\"structIDelegationManager.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\":\"startTimestamp\",\"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\":\"structIDelegationManager.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\":\"startTimestamp\",\"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\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"removedShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawableStakerShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"existingShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addedShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeAllocationDelay\",\"inputs\":[{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"minWithdrawalDelay\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minWithdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.AllocationDelayDetails\",\"components\":[{\"name\":\"isSet\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorScaledShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelays\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerScalingFactors\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelays\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyWithdrawalDelaySet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false}]", - Bin: "0x6101206040523480156200001257600080fd5b506040516200745438038062007454833981016040819052620000359162000149565b6001600160a01b0380851660a05280831660e05280841660c05281166080526200005e6200006e565b5050466101005250620001b19050565b600054610100900460ff1615620000db5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200012e576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014657600080fd5b50565b600080600080608085870312156200016057600080fd5b84516200016d8162000130565b6020860151909450620001808162000130565b6040860151909350620001938162000130565b6060860151909250620001a68162000130565b939692955090935050565b60805160a05160c05160e051610100516171af620002a56000396000612ba601526000818161062a0152818161117d0152818161158f01528181611f8601528181612c750152818161327301528181613603015281816155d50152615b72015260006108f401526000818161055f0152818161114b0152818161155d0152818161201a01528181612d1c015281816132fe01528181613681015281816137f2015281816156bd0152615c1801526000818161074e01528181610e810152818161120501528181611617015281816119d8015281816126bd01528181612e12015281816147780152614f6a01526171af6000f3fe608060405234801561001057600080fd5b50600436106103c55760003560e01c806365da1264116101ff578063b7f06ebe1161011a578063da8be864116100ad578063f2fde38b1161007c578063f2fde38b14610abe578063f698da2514610ad1578063f878776e14610ad9578063fabc1cbc14610af957600080fd5b8063da8be86414610a72578063e4cc3f9014610a85578063eea9064b14610a98578063f16172b014610aab57600080fd5b8063c5e480db116100e9578063c5e480db14610990578063c94b511114610a36578063ca661c0414610a49578063cf80873e14610a5157600080fd5b8063b7f06ebe14610916578063bb45fef214610939578063c448feb814610967578063c488375a1461097057600080fd5b80638da5cb5b116101925780639fb4ee32116101615780639fb4ee321461089a578063a1788484146108c5578063a238f9df146108e5578063b1344271146108ef57600080fd5b80638da5cb5b146108485780639104c319146108595780639435bb431461087457806399be81c81461088757600080fd5b8063778e55f3116101ce578063778e55f31461078b5780637f5480711461079e578063886f1195146107b157806389829397146107c457600080fd5b806365da1264146107205780636b3aa72e146107495780636d70f7ae14610770578063715018a61461078357600080fd5b806339b70e38116102ef57806350739be3116102825780635ac86ab7116102515780635ac86ab7146106cf5780635c975abb146106f2578063635bbd10146106fa578063651878101461070d57600080fd5b806350739be31461066957806351260e2314610689578063595c6a67146106b4578063597b36da146106bc57600080fd5b806343377382116102be57806343377382146105fe5780634665bcda14610625578063497300601461064c5780634fc40b611461065f57600080fd5b806339b70e381461055a5780633c651cf2146105995780633cdeb5e0146105ac5780633e28391d146105db57600080fd5b8063132d4967116103675780631bbce091116103365780631bbce091146104ed57806320606b701461050057806322bf40e41461052757806329c77d4f1461053a57600080fd5b8063132d49671461047b578063136439dd1461048e5780631522bf02146104a157806316928365146104b457600080fd5b80630d5b0067116103a35780630d5b00671461042a5780630dd8dd02146104335780630de5495d1461045357806310d67a2f1461046857600080fd5b80630449ca39146103ca57806304a4f979146103f05780630b9f487a14610417575b600080fd5b6103dd6103d8366004615dda565b610b0c565b6040519081526020015b60405180910390f35b6103dd7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6103dd610425366004615e40565b610b91565b6103dd60a25481565b610446610441366004615dda565b610c53565b6040516103e79190615e9b565b610466610461366004615efc565b611084565b005b610466610476366004615f19565b611090565b610466610489366004615f36565b611140565b61046661049c366004615f77565b611287565b6104666104af366004615f90565b6113c6565b6103dd6104c2366004615f19565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b6103dd6104fb366004615f36565b6113e0565b6103dd7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b610466610535366004615ffb565b61140e565b6103dd610548366004615f19565b609b6020526000908152604090205481565b6105817f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103e7565b6104666105a73660046160a2565b611552565b6105816105ba366004615f19565b6001600160a01b039081166000908152609960205260409020600101541690565b6105ee6105e9366004615f19565b6116d3565b60405190151581526020016103e7565b6103dd7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b6105817f000000000000000000000000000000000000000000000000000000000000000081565b61046661065a366004616141565b6116f3565b6103dd6213c68081565b6103dd610677366004615f19565b60a36020526000908152604090205481565b6103dd610697366004616198565b60a460209081526000928352604080842090915290825290205481565b610466611842565b6103dd6106ca36600461640f565b611909565b6105ee6106dd366004616443565b606654600160ff9092169190911b9081161490565b6066546103dd565b610466610708366004615f77565b611939565b61046661071b366004615f90565b61194a565b61058161072e366004615f19565b609a602052600090815260409020546001600160a01b031681565b6105817f000000000000000000000000000000000000000000000000000000000000000081565b6105ee61077e366004615f19565b61195e565b610466611998565b6103dd610799366004616198565b6119ac565b6104666107ac36600461650e565b611a7e565b606554610581906001600160a01b031681565b6108256107d2366004615f19565b6040805180820190915260008082526020820152506001600160a01b0316600090815260a5602090815260409182902082518084019093525460ff811615158352610100900463ffffffff169082015290565b6040805182511515815260209283015163ffffffff1692810192909252016103e7565b6033546001600160a01b0316610581565b61058173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61046661088236600461659e565b611ca1565b610466610895366004616637565b611dc3565b6103dd6108a8366004616198565b609860209081526000928352604080842090915290825290205481565b6103dd6108d3366004615f19565b609f6020526000908152604090205481565b6103dd62278d0081565b6105817f000000000000000000000000000000000000000000000000000000000000000081565b6105ee610924366004615f77565b609e6020526000908152604090205460ff1681565b6105ee61094736600461666c565b609c60209081526000928352604080842090915290825290205460ff1681565b6103dd609d5481565b6103dd61097e366004615f19565b60a16020526000908152604090205481565b610a0061099e366004615f19565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff16908201526060016103e7565b6103dd610a44366004616698565b611e95565b6103dd611f4e565b610a64610a5f366004615f19565b611f5f565b6040516103e7929190616754565b610446610a80366004615f19565b612317565b610466610a93366004616787565b6128e5565b610466610aa636600461680a565b61297e565b610466610ab9366004616862565b612a9b565b610466610acc366004615f19565b612b2c565b6103dd612ba2565b610aec610ae736600461687e565b612be0565b6040516103e791906168d2565b610466610b07366004615f77565b612f5c565b609d54600090815b83811015610b8957600060a16000878785818110610b3457610b346168e5565b9050602002016020810190610b499190615f19565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811115610b78578092505b50610b8281616911565b9050610b14565b509392505050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610c0f612ba2565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b60665460609060019060029081161415610c885760405162461bcd60e51b8152600401610c7f9061692c565b60405180910390fd5b6000836001600160401b03811115610ca257610ca26161d1565b604051908082528060200260200182016040528015610ccb578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b8581101561107957868682818110610d0657610d066168e5565b9050602002810190610d189190616963565b610d26906020810190616983565b9050878783818110610d3a57610d3a6168e5565b9050602002810190610d4c9190616963565b610d569080616983565b905014610dcb5760405162461bcd60e51b815260206004820152603860248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a20696e707574206c656e677468206d69736d6174636800000000000000006064820152608401610c7f565b33878783818110610dde57610dde6168e5565b9050602002810190610df09190616963565b610e01906060810190604001615f19565b6001600160a01b031614610e7d5760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e717565756557697468647261776160448201527f6c3a2077697468647261776572206d757374206265207374616b6572000000006064820152608401610c7f565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166339a9a3ed848a8a86818110610ec157610ec16168e5565b9050602002810190610ed39190616963565b610edd9080616983565b6040518463ffffffff1660e01b8152600401610efb93929190616a0a565b600060405180830381865afa158015610f18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f409190810190616a46565b905061104933848a8a86818110610f5957610f596168e5565b9050602002810190610f6b9190616963565b610f7c906060810190604001615f19565b8b8b87818110610f8e57610f8e6168e5565b9050602002810190610fa09190616963565b610faa9080616983565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508f92508e9150899050818110610ff057610ff06168e5565b90506020028101906110029190616963565b611010906020810190616983565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506130b8915050565b84838151811061105b5761105b6168e5565b6020908102919091010152508061107181616911565b915050610cec565b509095945050505050565b61108d8161398f565b50565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111079190616add565b6001600160a01b0316336001600160a01b0316146111375760405162461bcd60e51b8152600401610c7f90616afa565b61108d81613b24565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061119f5750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6111bb5760405162461bcd60e51b8152600401610c7f90616b44565b6111c4836116d3565b15611282576001600160a01b038381166000908152609a6020526040808220549051635a3932f160e11b8152908316600482018190528584166024830152927f0000000000000000000000000000000000000000000000000000000000000000169063b47265e290604401602060405180830381865afa15801561124c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112709190616ba1565b905061127f8286868685613c1b565b50505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156112cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f39190616bbc565b61130f5760405162461bcd60e51b8152600401610c7f90616bd9565b606654818116146113885760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610c7f565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6113ce613cb7565b6113da84848484613d11565b50505050565b6001600160a01b0383166000908152609b602052604081205461140585828686611e95565b95945050505050565b600054610100900460ff161580801561142e5750600054600160ff909116105b806114485750303b158015611448575060005460ff166001145b6114ab5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c7f565b6000805460ff1916600117905580156114ce576000805461ff0019166101001790555b6114d88888613f1f565b6114e0614009565b6097556114ec896140a0565b6114f5866140f2565b61150185858585613d11565b8015611547576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806115b15750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6115cd5760405162461bcd60e51b8152600401610c7f90616b44565b6115d6846116d3565b156113da576001600160a01b038481166000908152609a6020526040808220549051635a3932f160e11b8152908316600482018190528684166024830152927f0000000000000000000000000000000000000000000000000000000000000000169063b47265e290604401602060405180830381865afa15801561165e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116829190616ba1565b9050600061169387878488886141f6565b6001600160a01b03808916600090815260a460209081526040808320938b1683529290522081905590506116ca83888887866142b1565b50505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b6116fc336116d3565b156117825760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e726567697374657241734f70657260448201527f61746f723a2063616c6c657220697320616c7265616479206163746976656c796064820152690819195b1959d85d195960b21b608482015260a401610c7f565b61178c338561433d565b6040805180820190915260608152600060208201526117ae3380836000614530565b6117b78461398f565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e2866040516117f09190616c21565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051611833929190616c73565b60405180910390a25050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561188a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ae9190616bbc565b6118ca5760405162461bcd60e51b8152600401610c7f90616bd9565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60008160405160200161191c9190616d16565b604051602081830303815290604052805190602001209050919050565b611941613cb7565b61108d816140f2565b611952613cb7565b6113da84848484614947565b60006001600160a01b0382161580159061199257506001600160a01b038083166000818152609a6020526040902054909116145b92915050565b6119a0613cb7565b6119aa60006140a0565b565b604051635a3932f160e11b81526001600160a01b038381166004830152828116602483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063b47265e290604401602060405180830381865afa158015611a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a439190616ba1565b6001600160a01b03808616600090815260986020908152604080832093881683529290522054909150611a769082614b20565b949350505050565b4283602001511015611b025760405162461bcd60e51b815260206004820152604160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b6572207369676e6174757265206578706972656064820152601960fa1b608482015260a401610c7f565b611b0b856116d3565b15611b945760405162461bcd60e51b815260206004820152604d60248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a207374616b657220697320616c726561647920616374697660648201526c195b1e4819195b1959d85d1959609a1b608482015260a401610c7f565b611b9d8461195e565b611c295760405162461bcd60e51b815260206004820152605160248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f4279536960448201527f676e61747572653a206f70657261746f72206973206e6f7420726567697374656064820152703932b21034b71022b4b3b2b72630bcb2b960791b608482015260a401610c7f565b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611c658783888860200151611e95565b6001600160a01b0388166000908152609b602052604090206001840190558551909150611c959088908390614b4f565b6116ca87878686614530565b60665460029060049081161415611cca5760405162461bcd60e51b8152600401610c7f9061692c565b600260cb541415611d1d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b600260cb5560005b86811015611db457611da4888883818110611d4257611d426168e5565b9050602002810190611d549190616d29565b878784818110611d6657611d666168e5565b9050602002810190611d789190616983565b878786818110611d8a57611d8a6168e5565b9050602002016020810190611d9f9190616d3f565b614d09565b611dad81616911565b9050611d25565b5050600160cb55505050505050565b611dcc3361195e565b611e4e5760405162461bcd60e51b815260206004820152604760248201527f44656c65676174696f6e4d616e616765722e7570646174654f70657261746f7260448201527f4d657461646174615552493a2063616c6c6572206d75737420626520616e206f6064820152663832b930ba37b960c91b608482015260a401610c7f565b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051611e89929190616c73565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c0909201909252805191012060009081611f0b612ba2565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b611f5c600c62278d00616d5c565b81565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611fcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff39190616d7e565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa158015612063573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261208b9190810190616df2565b91509150600083136120a257909590945092505050565b60608083516000141561215c576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110612117576121176168e5565b60200260200101906001600160a01b031690816001600160a01b031681525050848160008151811061214b5761214b6168e5565b60200260200101818152505061230a565b8351612169906001616eb6565b6001600160401b03811115612180576121806161d1565b6040519080825280602002602001820160405280156121a9578160200160208202803683370190505b50915081516001600160401b038111156121c5576121c56161d1565b6040519080825280602002602001820160405280156121ee578160200160208202803683370190505b50905060005b84518110156122885784818151811061220f5761220f6168e5565b6020026020010151838281518110612229576122296168e5565b60200260200101906001600160a01b031690816001600160a01b03168152505083818151811061225b5761225b6168e5565b6020026020010151828281518110612275576122756168e5565b60209081029190910101526001016121f4565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600184516122ad9190616ece565b815181106122bd576122bd6168e5565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600184516122ed9190616ece565b815181106122fd576122fd6168e5565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811614156123435760405162461bcd60e51b8152600401610c7f9061692c565b61234c836116d3565b6123cc5760405162461bcd60e51b8152602060048201526044602482018190527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a207374908201527f616b6572206d7573742062652064656c65676174656420746f20756e64656c656064820152636761746560e01b608482015260a401610c7f565b6123d58361195e565b156124485760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a206f7060448201527f657261746f72732063616e6e6f7420626520756e64656c6567617465640000006064820152608401610c7f565b6001600160a01b0383166124c45760405162461bcd60e51b815260206004820152603c60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6e6e6f7420756e64656c6567617465207a65726f2061646472657373000000006064820152608401610c7f565b6001600160a01b038084166000818152609a6020526040902054909116903314806124f75750336001600160a01b038216145b8061251e57506001600160a01b038181166000908152609960205260409020600101541633145b6125905760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e4d616e616765722e756e64656c65676174653a20636160448201527f6c6c65722063616e6e6f7420756e64656c6567617465207374616b65720000006064820152608401610c7f565b60008061259c86611f5f565b9092509050336001600160a01b038716146125f257826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040902080546001600160a01b031916905581516126745760408051600081526020810190915294506128dc565b81516001600160401b0381111561268d5761268d6161d1565b6040519080825280602002602001820160405280156126b6578160200160208202803683370190505b50945060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166339a9a3ed85856040518363ffffffff1660e01b8152600401612709929190616ee5565b600060405180830381865afa158015612726573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261274e9190810190616a46565b905060005b83518110156128d95760408051600180825281830190925260009160208083019080368337505060408051600180825281830190925292935060009291506020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508684815181106127d6576127d66168e5565b6020026020010151836000815181106127f1576127f16168e5565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110612823576128236168e5565b60200260200101518260008151811061283e5761283e6168e5565b60200260200101818152505084848151811061285c5761285c6168e5565b602002602001015181600081518110612877576128776168e5565b60200260200101906001600160401b031690816001600160401b0316815250506128a58b898d8686866130b8565b8a85815181106128b7576128b76168e5565b60200260200101818152505050505080806128d190616911565b915050612753565b50505b50505050919050565b6066546002906004908116141561290e5760405162461bcd60e51b8152600401610c7f9061692c565b600260cb5414156129615760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c7f565b600260cb5561297285858585614d09565b5050600160cb55505050565b612987336116d3565b15612a055760405162461bcd60e51b815260206004820152604260248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a20737460448201527f616b657220697320616c7265616479206163746976656c792064656c65676174606482015261195960f21b608482015260a401610c7f565b612a0e8361195e565b612a8f5760405162461bcd60e51b815260206004820152604660248201527f44656c65676174696f6e4d616e616765722e64656c6567617465546f3a206f7060448201527f657261746f72206973206e6f74207265676973746572656420696e2045696765606482015265372630bcb2b960d11b608482015260a401610c7f565b61128233848484614530565b612aa43361195e565b612b225760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e4d616e616765722e6d6f646966794f70657261746f7260448201527f44657461696c733a2063616c6c6572206d75737420626520616e206f706572616064820152623a37b960e91b608482015260a401610c7f565b61108d338261433d565b612b34613cb7565b6001600160a01b038116612b995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c7f565b61108d816140a0565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612bd3575060975490565b612bdb614009565b905090565b6001600160a01b038084166000908152609a602052604081205460609216905b83811015612f535773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0858583818110612c2f57612c2f6168e5565b9050602002016020810190612c449190615f19565b6001600160a01b03161415612d1a576040516360f4062b60e01b81526001600160a01b0387811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015612cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce29190616d7e565b90506000811315612cf35780612cf6565b60005b848381518110612d0857612d086168e5565b60200260200101818152505050612dff565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637a7e0d9287878785818110612d5c57612d5c6168e5565b9050602002016020810190612d719190615f19565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de09190616d7e565b838281518110612df257612df26168e5565b6020026020010181815250505b6001600160a01b03821615612f435760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b47265e284888886818110612e5257612e526168e5565b9050602002016020810190612e679190615f19565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612eb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed69190616ba1565b9050612f2387878785818110612eee57612eee6168e5565b9050602002016020810190612f039190615f19565b868581518110612f1557612f156168e5565b6020026020010151846150ab565b848381518110612f3557612f356168e5565b602002602001018181525050505b612f4c81616911565b9050612c00565b50509392505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd39190616add565b6001600160a01b0316336001600160a01b0316146130035760405162461bcd60e51b8152600401610c7f90616afa565b6066541981196066541916146130815760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610c7f565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016113bb565b60006001600160a01b03871661313d5760405162461bcd60e51b8152602060048201526050602482015260008051602061711a83398151915260448201527f6e6451756575655769746864726177616c3a207374616b65722063616e6e6f7460648201526f206265207a65726f206164647265737360801b608482015260a401610c7f565b83516131b55760405162461bcd60e51b815260206004820152604d602482015260008051602061711a83398151915260448201527f6e6451756575655769746864726177616c3a207374726174656769657320636160648201526c6e6e6f7420626520656d70747960981b608482015260a401610c7f565b600084516001600160401b038111156131d0576131d06161d1565b6040519080825280602002602001820160405280156131f9578160200160208202803683370190505b50905060005b855181101561389b57600073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b031687838151811061323a5761323a6168e5565b60200260200101516001600160a01b031614156132fc576040516360f4062b60e01b81526001600160a01b038b811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa1580156132bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e09190616d7e565b905060008113156132f157806132f4565b60005b9150506133bc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637a7e0d928b89858151811061333e5761333e6168e5565b60200260200101516040518363ffffffff1660e01b81526004016133789291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015613395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b99190616d7e565b90505b6133fa8a8884815181106133d2576133d26168e5565b6020026020010151838886815181106133ed576133ed6168e5565b60200260200101516150ab565b86838151811061340c5761340c6168e5565b602002602001015111156134a65760405162461bcd60e51b8152602060048201526061602482015260008051602061711a83398151915260448201527f6e6451756575655769746864726177616c3a2073686172657320746f2077697460648201527f6864726177206578636565647320776974686472617761626c652073686172656084820152607360f81b60a482015260c401610c7f565b60006134cb8b8985815181106134be576134be6168e5565b60200260200101516150eb565b905060008061350d8986815181106134e5576134e56168e5565b6020026020010151848a8881518110613500576135006168e5565b6020026020010151615129565b9150915080868681518110613524576135246168e5565b60209081029190910101526001600160a01b038c1615613596576135968c8e8c8881518110613555576135556168e5565b60200260200101518c898151811061356f5761356f6168e5565b60200260200101518c8a81518110613589576135896168e5565b6020026020010151613c1b565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168a86815181106135c6576135c66168e5565b60200260200101516001600160a01b031614156136645760405163beffbb8960e01b81526001600160a01b038e81166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063beffbb8990604401600060405180830381600087803b15801561364757600080fd5b505af115801561365b573d6000803e3d6000fd5b5050505061388c565b8a6001600160a01b03168d6001600160a01b0316148061373657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d8b87815181106136c0576136c06168e5565b60200260200101516040518263ffffffff1660e01b81526004016136f391906001600160a01b0391909116815260200190565b602060405180830381865afa158015613710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137349190616bbc565b155b6137f05760405162461bcd60e51b81526020600482015260846024820181905260008051602061711a83398151915260448301527f6e6451756575655769746864726177616c3a2077697468647261776572206d7560648301527f73742062652073616d652061646472657373206173207374616b657220696620908201527f746869726450617274795472616e7366657273466f7262696464656e2061726560a482015263081cd95d60e21b60c482015260e401610c7f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e58e8c8881518110613832576138326168e5565b6020026020010151856040518463ffffffff1660e01b815260040161385993929190616f09565b600060405180830381600087803b15801561387357600080fd5b505af1158015613887573d6000803e3d6000fd5b505050505b846001019450505050506131ff565b506001600160a01b0388166000908152609f602052604081208054918291906138c383616911565b919050555060006040518060e001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001896001600160a01b031681526020018381526020014263ffffffff168152602001888152602001848152509050600061392b82611909565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f9906139799083908590616f2d565b60405180910390a19a9950505050505050505050565b6139983361195e565b613a305760405162461bcd60e51b815260206004820152605760248201527f44656c65676174696f6e4d616e616765722e5f696e697469616c697a65416c6c60448201527f6f636174696f6e44656c61793a206f70657261746f72206e6f7420726567697360648201527f746572656420746f20456967656e4c6179657220796574000000000000000000608482015260a401610c7f565b33600090815260a5602052604090205460ff1615613ac95760405162461bcd60e51b815260206004820152604a60248201527f44656c65676174696f6e4d616e616765722e5f696e697469616c697a65416c6c60448201527f6f636174696f6e44656c61793a20616c6c6f636174696f6e2064656c617920616064820152691b1c9958591e481cd95d60b21b608482015260a401610c7f565b6040805180820182526001815263ffffffff928316602080830191825233600090815260a59091529290922090518154925164ffffffffff1990931690151564ffffffff001916176101009290931691909102919091179055565b6001600160a01b038116613bb25760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610c7f565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000613c27838361518b565b6001600160a01b038088166000908152609860209081526040808320938916835292905290812080549293508392909190613c63908490616ece565b92505081905550856001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd868684604051613ca793929190616f09565b60405180910390a2505050505050565b6033546001600160a01b031633146119aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c7f565b828114613d875760405162461bcd60e51b815260206004820152604a602482015260008051602061715a83398151915260448201527f746864726177616c44656c6179426c6f636b733a20696e707574206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610c7f565b8260005b81811015613f17576000868683818110613da757613da76168e5565b9050602002016020810190613dbc9190615f19565b6001600160a01b038116600090815260a16020526040812054919250868685818110613dea57613dea6168e5565b905060200201359050600c62278d00613e039190616d5c565b811115613ea85760405162461bcd60e51b8152602060048201526073602482015260008051602061715a83398151915260448201527f746864726177616c44656c6179426c6f636b733a205f7769746864726177616c60648201527f44656c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544860848201527244524157414c5f44454c41595f424c4f434b5360681b60a482015260c401610c7f565b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a150505080613f1090616911565b9050613d8b565b505050505050565b6065546001600160a01b0316158015613f4057506001600160a01b03821615155b613fc25760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610c7f565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261400582613b24565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b614100600c62278d00616d5c565b8111156141b55760405162461bcd60e51b815260206004820152607160248201527f44656c65676174696f6e4d616e616765722e5f7365744d696e5769746864726160448201527f77616c44656c6179426c6f636b733a205f6d696e5769746864726177616c446560648201527f6c6179426c6f636b732063616e6e6f74206265203e204d41585f5749544844526084820152704157414c5f44454c41595f424c4f434b5360781b60a482015260c401610c7f565b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b60008083614220576142196001600160401b038616670de0b6b3a7640000616d5c565b90506142a7565b600061422c88886150eb565b90506001600160401b0386166142428587616eb6565b61424c9190616f46565b61425e670de0b6b3a764000086616f46565b670de0b6b3a76400006001600160401b03891661427b8986616f46565b6142859190616f46565b61428f9190616d5c565b6142999190616eb6565b6142a39190616d5c565b9150505b9695505050505050565b60006142bd838361518b565b6001600160a01b0380881660009081526098602090815260408083209389168352929052908120805492935083929091906142f9908490616eb6565b92505081905550856001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c868684604051613ca793929190616f09565b6213c6806143516060830160408401615efc565b63ffffffff1611156144065760405162461bcd60e51b815260206004820152606c60248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527f63616e6e6f74206265203e204d41585f5354414b45525f4f50545f4f55545f5760848201526b494e444f575f424c4f434b5360a01b60a482015260c401610c7f565b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff16906144429060608401908401615efc565b63ffffffff1610156144d85760405162461bcd60e51b815260206004820152605360248201527f44656c65676174696f6e4d616e616765722e5f7365744f70657261746f72446560448201527f7461696c733a207374616b65724f70744f757457696e646f77426c6f636b732060648201527218d85b9b9bdd08189948191958dc99585cd959606a1b608482015260a401610c7f565b6001600160a01b038216600090815260996020526040902081906144fc8282616f85565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac90611e89908490616c21565b606654600090600190811614156145595760405162461bcd60e51b8152600401610c7f9061692c565b6001600160a01b0380851660009081526099602052604090206001015416801580159061458f5750336001600160a01b03821614155b80156145a45750336001600160a01b03861614155b156147115742846020015110156146235760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f766572207369676e617475726520657870697265640000000000000000006064820152608401610c7f565b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff16156146bd5760405162461bcd60e51b815260206004820152603760248201527f44656c65676174696f6e4d616e616765722e5f64656c65676174653a2061707060448201527f726f76657253616c7420616c7265616479207370656e740000000000000000006064820152608401610c7f565b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516146fe908890889085908890610b91565b905061470f82828760000151614b4f565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a360008061477088611f5f565b9150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166339a9a3ed89856040518363ffffffff1660e01b81526004016147c4929190616ee5565b600060405180830381865afa1580156147e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148099190810190616a46565b905060005b835181101561493b5760006148728b86848151811061482f5761482f6168e5565b6020026020010151858581518110614849576148496168e5565b60200260200101516000888781518110614865576148656168e5565b60200260200101516141f6565b90508060a460008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008785815181106148ae576148ae6168e5565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506149328a8c8785815181106148f1576148f16168e5565b602002602001015187868151811061490b5761490b6168e5565b6020026020010151878781518110614925576149256168e5565b60200260200101516142b1565b5060010161480e565b50505050505050505050565b8281146149b85760405162461bcd60e51b81526020600482015260446024820181905260008051602061715a833981519152908201527f746864726177616c44656c61793a20696e707574206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a401610c7f565b8260005b81811015613f175760008686838181106149d8576149d86168e5565b90506020020160208101906149ed9190615f19565b6001600160a01b038116600090815260a36020526040812054919250868685818110614a1b57614a1b6168e5565b90506020020135905062278d00811115614ab15760405162461bcd60e51b8152602060048201526060602482015260008051602061715a83398151915260448201527f746864726177616c44656c61793a205f7769746864726177616c44656c61792060648201527f63616e6e6f74206265203e204d41585f5749544844524157414c5f44454c4159608482015260a401610c7f565b6001600160a01b038316600081815260a360209081526040918290208490558151928352820184905281018290527f4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e59060600160405180910390a150505080614b1990616911565b90506149bc565b6000670de0b6b3a7640000614b3e6001600160401b03841685616f46565b614b489190616d5c565b9392505050565b6001600160a01b0383163b15614c6957604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e90614b8f9086908690600401616fe8565b602060405180830381865afa158015614bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bd09190617045565b6001600160e01b031916146112825760405162461bcd60e51b815260206004820152605360248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a2045524331323731207369676e6174757265206064820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b608482015260a401610c7f565b826001600160a01b0316614c7d83836151a9565b6001600160a01b0316146112825760405162461bcd60e51b815260206004820152604760248201527f454950313237315369676e61747572655574696c732e636865636b5369676e6160448201527f747572655f454950313237313a207369676e6174757265206e6f742066726f6d6064820152661039b4b3b732b960c91b608482015260a401610c7f565b6000614d176106ca8661706f565b6000818152609e602052604090205490915060ff16614d985760405162461bcd60e51b8152602060048201526043602482015260008051602061713a83398151915260448201527f645769746864726177616c3a20616374696f6e206973206e6f7420696e20717560648201526265756560e81b608482015260a401610c7f565b60a2544390614dad60a0880160808901615efc565b63ffffffff16614dbd9190616eb6565b1115614e455760405162461bcd60e51b8152602060048201526059602482015260008051602061713a83398151915260448201527f645769746864726177616c3a206d696e5769746864726177616c44656c61792060648201527f706572696f6420686173206e6f74207965742070617373656400000000000000608482015260a401610c7f565b614e556060860160408701615f19565b6001600160a01b0316336001600160a01b031614614ee25760405162461bcd60e51b8152602060048201526050602482015260008051602061713a83398151915260448201527f645769746864726177616c3a206f6e6c7920776974686472617765722063616e60648201526f1031b7b6b83632ba329030b1ba34b7b760811b608482015260a401610c7f565b614eef60a0860186616983565b84149050614f5e5760405162461bcd60e51b8152602060048201526042602482015260008051602061713a83398151915260448201527f645769746864726177616c3a20696e707574206c656e677468206d69736d61746064820152610c6d60f31b608482015260a401610c7f565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663858d0b47614f9f6040890160208a01615f19565b614fac60a08a018a616983565b62171240614fc060a08d0160808e01615efc565b614fca919061707b565b6040518563ffffffff1660e01b8152600401614fe994939291906170a3565b600060405180830381865afa158015615006573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261502e9190810190616a46565b9050821561504757615042868686846151c5565b615053565b615053868686846153bc565b6000828152609e602052604090819020805460ff19169055517fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9061509b9084815260200190565b60405180910390a1505050505050565b6000806150b886866150eb565b9050670de0b6b3a76400006001600160401b0384166150d78684616f46565b6150e19190616f46565b6142a79190616d5c565b6001600160a01b03808316600090815260a46020908152604080832093851683529290529081205480614b485750670de0b6b3a76400009392505050565b60008061513f6001600160401b03841685616f46565b6151586ec097ce7bc90715b34b9f100000000087616f46565b6151629190616d5c565b9150670de0b6b3a76400006151778587616f46565b6151819190616d5c565b9050935093915050565b60006001600160401b038216614b3e670de0b6b3a764000085616f46565b60008060006151b8858561590c565b91509150610b898161597c565b60005b6151d560a0860186616983565b905081101561127f574260a360006151f060a0890189616983565b85818110615200576152006168e5565b90506020020160208101906152159190615f19565b6001600160a01b0316815260208101919091526040016000205461523f60a0880160808901615efc565b63ffffffff1661524f9190616eb6565b11156152f95760405162461bcd60e51b815260206004820152606760248201527f44656c65676174696f6e4d616e616765722e5f636f6d706c657465526563656960448201527f76654173546f6b656e733a207769746864726177616c44656c6179207065726960648201527f6f6420686173206e6f74207965742070617373656420666f72207468697320736084820152667472617465677960c81b60a482015260c401610c7f565b600061534161530b60c0880188616983565b8481811061531b5761531b6168e5565b90506020020135848481518110615334576153346168e5565b6020026020010151614b20565b90506153b36153536020880188615f19565b3361536160a08a018a616983565b86818110615371576153716168e5565b90506020020160208101906153869190615f19565b84898988818110615399576153996168e5565b90506020020160208101906153ae9190615f19565b615b37565b506001016151c8565b336000908152609a60205260408120546001600160a01b0316905b6153e460a0870187616983565b9050811015613f17574360a360006153ff60a08a018a616983565b8581811061540f5761540f6168e5565b90506020020160208101906154249190615f19565b6001600160a01b0316815260208101919091526040016000205461544e60a0890160808a01615efc565b63ffffffff1661545e9190616eb6565b11156155085760405162461bcd60e51b815260206004820152606760248201527f44656c65676174696f6e4d616e616765722e5f636f6d706c657465526563656960448201527f766541735368617265733a207769746864726177616c44656c6179207065726960648201527f6f6420686173206e6f74207965742070617373656420666f72207468697320736084820152667472617465677960c81b60a482015260c401610c7f565b600061554361551a60c0890189616983565b8481811061552a5761552a6168e5565b90506020020135858481518110615334576153346168e5565b9050600073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061556960a08a018a616983565b85818110615579576155796168e5565b905060200201602081019061558e9190615f19565b6001600160a01b031614156156bb5760006155ac60208a018a615f19565b6040516303a041cf60e21b81526001600160a01b038083166004830152602482018690529192507f000000000000000000000000000000000000000000000000000000000000000090911690630e81073c9060440160408051808303816000875af115801561561f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061564391906170df565b6001600160a01b038084166000908152609a60205260409020549295509093501680156156b4576156b4818361567c60a08e018e616983565b8981811061568c5761568c6168e5565b90506020020160208101906156a19190615f19565b878b8a81518110614925576149256168e5565b5050615820565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea1338989878181106156fd576156fd6168e5565b90506020020160208101906157129190615f19565b61571f60a08d018d616983565b8881811061572f5761572f6168e5565b90506020020160208101906157449190615f19565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018590526084016020604051808303816000875af11580156157a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906157c59190616d7e565b90506001600160a01b038416156158205761582084336157e860a08c018c616983565b878181106157f8576157f86168e5565b905060200201602081019061580d9190615f19565b85898881518110614925576149256168e5565b600061588561583260208b018b615f19565b61583f60a08c018c616983565b8781811061584f5761584f6168e5565b90506020020160208101906158649190615f19565b888781518110615876576158766168e5565b602002602001015185876141f6565b90508060a4600061589960208d018d615f19565b6001600160a01b0316815260208101919091526040016000908120906158c260a08d018d616983565b888181106158d2576158d26168e5565b90506020020160208101906158e79190615f19565b6001600160a01b031681526020810191909152604001600020555050506001016153d7565b6000808251604114156159435760208301516040840151606085015160001a61593787828585615c70565b94509450505050615975565b82516040141561596d5760208301516040840151615962868383615d5d565b935093505050615975565b506000905060025b9250929050565b600081600481111561599057615990617103565b14156159995750565b60018160048111156159ad576159ad617103565b14156159fb5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610c7f565b6002816004811115615a0f57615a0f617103565b1415615a5d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610c7f565b6003816004811115615a7157615a71617103565b1415615aca5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610c7f565b6004816004811115615ade57615ade617103565b141561108d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610c7f565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac01415615be25760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b130090615bab90889088908790600401616f09565b600060405180830381600087803b158015615bc557600080fd5b505af1158015615bd9573d6000803e3d6000fd5b5050505061127f565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b158015615c5c57600080fd5b505af1158015611547573d6000803e3d6000fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115615ca75750600090506003615d54565b8460ff16601b14158015615cbf57508460ff16601c14155b15615cd05750600090506004615d54565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015615d24573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116615d4d57600060019250925050615d54565b9150600090505b94509492505050565b6000806001600160ff1b03831681615d7a60ff86901c601b616eb6565b9050615d8887828885615c70565b935093505050935093915050565b60008083601f840112615da857600080fd5b5081356001600160401b03811115615dbf57600080fd5b6020830191508360208260051b850101111561597557600080fd5b60008060208385031215615ded57600080fd5b82356001600160401b03811115615e0357600080fd5b615e0f85828601615d96565b90969095509350505050565b6001600160a01b038116811461108d57600080fd5b8035615e3b81615e1b565b919050565b600080600080600060a08688031215615e5857600080fd5b8535615e6381615e1b565b94506020860135615e7381615e1b565b93506040860135615e8381615e1b565b94979396509394606081013594506080013592915050565b6020808252825182820181905260009190848201906040850190845b81811015615ed357835183529284019291840191600101615eb7565b50909695505050505050565b63ffffffff8116811461108d57600080fd5b8035615e3b81615edf565b600060208284031215615f0e57600080fd5b8135614b4881615edf565b600060208284031215615f2b57600080fd5b8135614b4881615e1b565b600080600060608486031215615f4b57600080fd5b8335615f5681615e1b565b92506020840135615f6681615e1b565b929592945050506040919091013590565b600060208284031215615f8957600080fd5b5035919050565b60008060008060408587031215615fa657600080fd5b84356001600160401b0380821115615fbd57600080fd5b615fc988838901615d96565b90965094506020870135915080821115615fe257600080fd5b50615fef87828801615d96565b95989497509550505050565b60008060008060008060008060c0898b03121561601757600080fd5b883561602281615e1b565b9750602089013561603281615e1b565b9650604089013595506060890135945060808901356001600160401b038082111561605c57600080fd5b6160688c838d01615d96565b909650945060a08b013591508082111561608157600080fd5b5061608e8b828c01615d96565b999c989b5096995094979396929594505050565b600080600080608085870312156160b857600080fd5b84356160c381615e1b565b935060208501356160d381615e1b565b93969395505050506040820135916060013590565b6000606082840312156160fa57600080fd5b50919050565b60008083601f84011261611257600080fd5b5081356001600160401b0381111561612957600080fd5b60208301915083602082850101111561597557600080fd5b60008060008060a0858703121561615757600080fd5b61616186866160e8565b9350606085013561617181615edf565b925060808501356001600160401b0381111561618c57600080fd5b615fef87828801616100565b600080604083850312156161ab57600080fd5b82356161b681615e1b565b915060208301356161c681615e1b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715616209576162096161d1565b60405290565b604080519081016001600160401b0381118282101715616209576162096161d1565b604051601f8201601f191681016001600160401b0381118282101715616259576162596161d1565b604052919050565b60006001600160401b0382111561627a5761627a6161d1565b5060051b60200190565b600082601f83011261629557600080fd5b813560206162aa6162a583616261565b616231565b82815260059290921b840181019181810190868411156162c957600080fd5b8286015b848110156162ed5780356162e081615e1b565b83529183019183016162cd565b509695505050505050565b600082601f83011261630957600080fd5b813560206163196162a583616261565b82815260059290921b8401810191818101908684111561633857600080fd5b8286015b848110156162ed578035835291830191830161633c565b600060e0828403121561636557600080fd5b61636d6161e7565b905061637882615e30565b815261638660208301615e30565b602082015261639760408301615e30565b6040820152606082013560608201526163b260808301615ef1565b608082015260a08201356001600160401b03808211156163d157600080fd5b6163dd85838601616284565b60a084015260c08401359150808211156163f657600080fd5b50616403848285016162f8565b60c08301525092915050565b60006020828403121561642157600080fd5b81356001600160401b0381111561643757600080fd5b611a7684828501616353565b60006020828403121561645557600080fd5b813560ff81168114614b4857600080fd5b60006040828403121561647857600080fd5b61648061620f565b905081356001600160401b038082111561649957600080fd5b818401915084601f8301126164ad57600080fd5b81356020828211156164c1576164c16161d1565b6164d3601f8301601f19168201616231565b925081835286818386010111156164e957600080fd5b8181850182850137600081838501015282855280860135818601525050505092915050565b600080600080600060a0868803121561652657600080fd5b853561653181615e1b565b9450602086013561654181615e1b565b935060408601356001600160401b038082111561655d57600080fd5b61656989838a01616466565b9450606088013591508082111561657f57600080fd5b5061658c88828901616466565b95989497509295608001359392505050565b600080600080600080606087890312156165b757600080fd5b86356001600160401b03808211156165ce57600080fd5b6165da8a838b01615d96565b909850965060208901359150808211156165f357600080fd5b6165ff8a838b01615d96565b9096509450604089013591508082111561661857600080fd5b5061662589828a01615d96565b979a9699509497509295939492505050565b6000806020838503121561664a57600080fd5b82356001600160401b0381111561666057600080fd5b615e0f85828601616100565b6000806040838503121561667f57600080fd5b823561668a81615e1b565b946020939093013593505050565b600080600080608085870312156166ae57600080fd5b84356166b981615e1b565b93506020850135925060408501356166d081615e1b565b9396929550929360600135925050565b600081518084526020808501945080840160005b838110156167195781516001600160a01b0316875295820195908201906001016166f4565b509495945050505050565b600081518084526020808501945080840160005b8381101561671957815187529582019590820190600101616738565b60408152600061676760408301856166e0565b82810360208401526114058185616724565b801515811461108d57600080fd5b6000806000806060858703121561679d57600080fd5b84356001600160401b03808211156167b457600080fd5b9086019060e082890312156167c857600080fd5b909450602086013590808211156167de57600080fd5b506167eb87828801615d96565b90945092505060408501356167ff81616779565b939692955090935050565b60008060006060848603121561681f57600080fd5b833561682a81615e1b565b925060208401356001600160401b0381111561684557600080fd5b61685186828701616466565b925050604084013590509250925092565b60006060828403121561687457600080fd5b614b4883836160e8565b60008060006040848603121561689357600080fd5b833561689e81615e1b565b925060208401356001600160401b038111156168b957600080fd5b6168c586828701615d96565b9497909650939450505050565b602081526000614b486020830184616724565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415616925576169256168fb565b5060010190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b60008235605e1983360301811261697957600080fd5b9190910192915050565b6000808335601e1984360301811261699a57600080fd5b8301803591506001600160401b038211156169b457600080fd5b6020019150600581901b360382131561597557600080fd5b8183526000602080850194508260005b858110156167195781356169ef81615e1b565b6001600160a01b0316875295820195908201906001016169dc565b6001600160a01b038416815260406020820181905260009061140590830184866169cc565b80516001600160401b0381168114615e3b57600080fd5b60006020808385031215616a5957600080fd5b82516001600160401b03811115616a6f57600080fd5b8301601f81018513616a8057600080fd5b8051616a8e6162a582616261565b81815260059190911b82018301908381019087831115616aad57600080fd5b928401925b82841015616ad257616ac384616a2f565b82529284019290840190616ab2565b979650505050505050565b600060208284031215616aef57600080fd5b8151614b4881615e1b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60208082526037908201527f44656c65676174696f6e4d616e616765723a206f6e6c7953747261746567794d60408201527f616e616765724f72456967656e506f644d616e61676572000000000000000000606082015260800190565b600060208284031215616bb357600080fd5b614b4882616a2f565b600060208284031215616bce57600080fd5b8151614b4881616779565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b606081018235616c3081615e1b565b6001600160a01b039081168352602084013590616c4c82615e1b565b1660208301526040830135616c6081615edf565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600060018060a01b03808351168452806020840151166020850152806040840151166040850152506060820151606084015263ffffffff608083015116608084015260a082015160e060a0850152616cfd60e08501826166e0565b905060c083015184820360c08601526114058282616724565b602081526000614b486020830184616ca2565b6000823560de1983360301811261697957600080fd5b600060208284031215616d5157600080fd5b8135614b4881616779565b600082616d7957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215616d9057600080fd5b5051919050565b600082601f830112616da857600080fd5b81516020616db86162a583616261565b82815260059290921b84018101918181019086841115616dd757600080fd5b8286015b848110156162ed5780518352918301918301616ddb565b60008060408385031215616e0557600080fd5b82516001600160401b0380821115616e1c57600080fd5b818501915085601f830112616e3057600080fd5b81516020616e406162a583616261565b82815260059290921b84018101918181019089841115616e5f57600080fd5b948201945b83861015616e86578551616e7781615e1b565b82529482019490820190616e64565b91880151919650909350505080821115616e9f57600080fd5b50616eac85828601616d97565b9150509250929050565b60008219821115616ec957616ec96168fb565b500190565b600082821015616ee057616ee06168fb565b500390565b6001600160a01b0383168152604060208201819052600090611a76908301846166e0565b6001600160a01b039384168152919092166020820152604081019190915260600190565b828152604060208201526000611a766040830184616ca2565b6000816000190483118215151615616f6057616f606168fb565b500290565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135616f9081615e1b565b616f9a8183616f65565b50600181016020830135616fad81615e1b565b616fb78183616f65565b506040830135616fc681615edf565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b82815260006020604081840152835180604085015260005b8181101561701c57858101830151858201606001528201617000565b8181111561702e576000606083870101525b50601f01601f191692909201606001949350505050565b60006020828403121561705757600080fd5b81516001600160e01b031981168114614b4857600080fd5b60006119923683616353565b600063ffffffff80831681851680830382111561709a5761709a6168fb565b01949350505050565b6001600160a01b03851681526060602082018190526000906170c890830185876169cc565b905063ffffffff8316604083015295945050505050565b600080604083850312156170f257600080fd5b505080516020909101519092909150565b634e487b7160e01b600052602160045260246000fdfe44656c65676174696f6e4d616e616765722e5f72656d6f76655368617265734144656c65676174696f6e4d616e616765722e5f636f6d706c657465517565756544656c65676174696f6e4d616e616765722e5f73657453747261746567795769a2646970667358221220ba649443e45a93abe956d2562b7180994d60197a942bf86d641a4808199648da64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_STAKER_OPT_OUT_WINDOW_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_WITHDRAWAL_DELAY_BLOCKS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAKER_DELEGATION_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\":\"calculateCurrentStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"calculateStakerDelegationDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_stakerNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"middlewareTimesIndexes\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"delegateToBySignature\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"getDelegatableShares\",\"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\":\"getWithdrawalDelay\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"_withdrawalDelayBlocks\",\"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\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"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\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"registeringOperatorDetails\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"newMinWithdrawalDelayBlocks\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawalDelayBlocks\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerNonce\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerOptOutWindowBlocks\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWithdrawalDelayBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDetailsModified\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOperatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"operatorDetails\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.OperatorDetails\",\"components\":[{\"name\":\"__deprecated_earningsReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"stakerOptOutWindowBlocks\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"StrategyWithdrawalDelayBlocksSet\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"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\":\"event\",\"name\":\"WithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEOA\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotCurrentlyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureSaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksCannotDecrease\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerOptOutWindowBlocksExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotStaker\",\"inputs\":[]}]", + Bin: "0x61010060405234801561001157600080fd5b50604051614ca9380380614ca983398101604081905261003091610135565b6001600160a01b0380841660805280821660c052821660a05261005161005d565b50504660e05250610182565b600054610100900460ff16156100c95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013257600080fd5b50565b60008060006060848603121561014a57600080fd5b83516101558161011d565b60208501519093506101668161011d565b60408501519092506101778161011d565b809150509250925092565b60805160a05160c05160e051614a9361021660003960006120e50152600081816105b101528181610f0401528181611232015281816118fa01528181612312015281816131a401526135ba015260006107620152600081816104f901528181610ed2015281816112000152818161198e015281816123df015281816124b3015281816132ca01526136600152614a936000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063635bbd10116101b8578063b7f06ebe11610104578063cf80873e116100a2578063f16172b01161007c578063f16172b014610908578063f2fde38b1461091b578063f698da251461092e578063fabc1cbc1461093657600080fd5b8063cf80873e146108c1578063da8be864146108e2578063eea9064b146108f557600080fd5b8063c488375a116100de578063c488375a146107de578063c5e480db146107fe578063c94b5111146108a4578063ca661c04146108b757600080fd5b8063b7f06ebe14610784578063bb45fef2146107a7578063c448feb8146107d557600080fd5b8063886f1195116101715780639104c3191161014b5780639104c3191461070f57806399be81c81461072a578063a17884841461073d578063b13442711461075d57600080fd5b8063886f1195146106cb5780638da5cb5b146106de57806390041347146106ef57600080fd5b8063635bbd101461063657806365da1264146106495780636d70f7ae14610672578063715018a614610685578063778e55f31461068d5780637f548071146106b857600080fd5b806328a573ae116102925780634665bcda11610230578063597b36da1161020a578063597b36da146105e55780635ac86ab7146105f85780635c975abb1461061b57806360d7faed1461062357600080fd5b80634665bcda146105ac5780634fc40b61146105d3578063595c6a67146105dd57600080fd5b806339b70e381161026c57806339b70e38146104f45780633cdeb5e0146105335780633e28391d14610562578063433773821461058557600080fd5b806328a573ae146104ae57806329c77d4f146104c157806333404396146104e157600080fd5b8063132d4967116102ff57806316928365116102d957806316928365146104285780631bbce0911461046157806320606b701461047457806322bf40e41461049b57600080fd5b8063132d4967146103ef578063136439dd146104025780631522bf021461041557600080fd5b80630449ca391461034757806304a4f9791461036d5780630b9f487a146103945780630dd8dd02146103a75780630f589e59146103c757806310d67a2f146103dc575b600080fd5b61035a610355366004613a69565b610949565b6040519081526020015b60405180910390f35b61035a7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b61035a6103a2366004613acf565b6109c8565b6103ba6103b5366004613a69565b610a8a565b6040516103649190613b2a565b6103da6103d5366004613bbb565b610d36565b005b6103da6103ea366004613c0e565b610e13565b6103da6103fd366004613c32565b610ec7565b6103da610410366004613c73565b610f7f565b6103da610423366004613c8c565b61106a565b61035a610436366004613c0e565b6001600160a01b0316600090815260996020526040902060010154600160a01b900463ffffffff1690565b61035a61046f366004613c32565b61107e565b61035a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6103da6104a9366004613cfb565b6110ac565b6103da6104bc366004613c32565b6111f5565b61035a6104cf366004613c0e565b609b6020526000908152604090205481565b6103da6104ef366004613da6565b6112a6565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610364565b61051b610541366004613c0e565b6001600160a01b039081166000908152609960205260409020600101541690565b610575610570366004613c0e565b6113da565b6040519015158152602001610364565b61035a7f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b81565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b61035a6213c68081565b6103da6113fa565b61035a6105f33660046140bd565b6114c2565b6105756106063660046140f9565b606654600160ff9092169190911b9081161490565b60665461035a565b6103da61063136600461412a565b6114f2565b6103da610644366004613c73565b61158c565b61051b610657366004613c0e565b609a602052600090815260409020546001600160a01b031681565b610575610680366004613c0e565b61159d565b6103da6115d4565b61035a61069b3660046141ba565b609860209081526000928352604080842090915290825290205481565b6103da6106c636600461429e565b6115e8565b60655461051b906001600160a01b031681565b6033546001600160a01b031661051b565b6107026106fd366004614332565b6116db565b60405161036491906143bd565b61051b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6103da6107383660046143d0565b6117ad565b61035a61074b366004613c0e565b609f6020526000908152604090205481565b61051b7f000000000000000000000000000000000000000000000000000000000000000081565b610575610792366004613c73565b609e6020526000908152604090205460ff1681565b6105756107b5366004614405565b609c60209081526000928352604080842090915290825290205460ff1681565b61035a609d5481565b61035a6107ec366004613c0e565b60a16020526000908152604090205481565b61086e61080c366004613c0e565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03948516815260998352839020835191820184528054851682526001015493841691810191909152600160a01b90920463ffffffff169082015290565b6040805182516001600160a01b039081168252602080850151909116908201529181015163ffffffff1690820152606001610364565b61035a6108b2366004614431565b61181a565b61035a62034bc081565b6108d46108cf366004613c0e565b6118d3565b6040516103649291906144b4565b6103ba6108f0366004613c0e565b611c8a565b6103da6109033660046144d9565b611fe2565b6103da610916366004614532565b61203b565b6103da610929366004613c0e565b61206b565b61035a6120e1565b6103da610944366004613c73565b61211e565b609d54600090815b838110156109be57600060a160008787858181106109715761097161454e565b90506020020160208101906109869190613c0e565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828111156109b5578092505b50600101610951565b5090505b92915050565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad6020808301919091526001600160a01b038681168385015288811660608401528716608083015260a0820185905260c08083018590528351808403909101815260e0909201909252805191012060009081610a466120e1565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f19018152919052805160209091012098975050505050505050565b606654606090600190600290811603610ab65760405163840a48d560e01b815260040160405180910390fd5b6000836001600160401b03811115610ad057610ad0613e59565b604051908082528060200260200182016040528015610af9578160200160208202803683370190505b50336000908152609a60205260408120549192506001600160a01b03909116905b85811015610d2b57868682818110610b3457610b3461454e565b9050602002810190610b469190614564565b610b54906020810190614584565b9050878783818110610b6857610b6861454e565b9050602002810190610b7a9190614564565b610b849080614584565b905014610ba4576040516343714afd60e01b815260040160405180910390fd5b33878783818110610bb757610bb761454e565b9050602002810190610bc99190614564565b610bda906060810190604001613c0e565b6001600160a01b031614610c01576040516330c4716960e21b815260040160405180910390fd5b610d063383898985818110610c1857610c1861454e565b9050602002810190610c2a9190614564565b610c3b906060810190604001613c0e565b8a8a86818110610c4d57610c4d61454e565b9050602002810190610c5f9190614564565b610c699080614584565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d9150889050818110610caf57610caf61454e565b9050602002810190610cc19190614564565b610ccf906020810190614584565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061222692505050565b838281518110610d1857610d1861454e565b6020908102919091010152600101610b1a565b509095945050505050565b610d3f336113da565b15610d5d57604051631a30c08d60e31b815260040160405180910390fd5b610d673384612660565b604080518082019091526060815260006020820152610d893380836000612752565b336001600160a01b03167f8e8485583a2310d41f7c82b9427d0bd49bad74bb9cff9d3402a29d8f9b28a0e285604051610dc291906145cd565b60405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051610e05929190614624565b60405180910390a250505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a9190614653565b6001600160a01b0316336001600160a01b031614610ebb5760405163794821ff60e01b815260040160405180910390fd5b610ec48161293e565b50565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610f265750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610f4357604051635c427cd960e01b815260040160405180910390fd5b610f4c836113da565b15610f7a576001600160a01b038084166000908152609a602052604090205416610f78818585856129ce565b505b505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190614670565b61100857604051631d77d47760e21b815260040160405180910390fd5b6066548181161461102c5760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b611072612a49565b610f7884848484612aa3565b6001600160a01b0383166000908152609b60205260408120546110a38582868661181a565b95945050505050565b600054610100900460ff16158080156110cc5750600054600160ff909116105b806110e65750303b1580156110e6575060005460ff166001145b61114e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015611171576000805461ff0019166101001790555b61117b8888612bc4565b611183612c49565b60975561118f89612ce0565b61119886612d32565b6111a485858585612aa3565b80156111ea576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112545750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61127157604051635c427cd960e01b815260040160405180910390fd5b61127a836113da565b15610f7a576001600160a01b038084166000908152609a602052604090205416610f7881858585612d97565b6066546002906004908116036112cf5760405163840a48d560e01b815260040160405180910390fd5b600260c954036113215760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611145565b600260c95560005b888110156113c9576113c18a8a838181106113465761134661454e565b9050602002810190611358919061468d565b89898481811061136a5761136a61454e565b905060200281019061137c9190614584565b89898681811061138e5761138e61454e565b905060200201358888878181106113a7576113a761454e565b90506020020160208101906113bc91906146a3565b612e12565b600101611329565b5050600160c9555050505050505050565b6001600160a01b039081166000908152609a602052604090205416151590565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190614670565b61148357604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000816040516020016114d5919061473f565b604051602081830303815290604052805190602001209050919050565b60665460029060049081160361151b5760405163840a48d560e01b815260040160405180910390fd5b600260c9540361156d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611145565b600260c95561157f8686868686612e12565b5050600160c95550505050565b611594612a49565b610ec481612d32565b60006001600160a01b038216158015906109c25750506001600160a01b039081166000818152609a60205260409020549091161490565b6115dc612a49565b6115e66000612ce0565b565b428360200151101561160d57604051630819bdcd60e01b815260040160405180910390fd5b611616856113da565b1561163457604051631a30c08d60e31b815260040160405180910390fd5b61163d8461159d565b61165a576040516325878fa360e21b815260040160405180910390fd5b6000609b6000876001600160a01b03166001600160a01b031681526020019081526020016000205490506000611696878388886020015161181a565b6001600160a01b0388166000908152609b6020526040902060018401905585519091506116c6908890839061349b565b6116d287878686612752565b50505050505050565b6060600082516001600160401b038111156116f8576116f8613e59565b604051908082528060200260200182016040528015611721578160200160208202803683370190505b50905060005b83518110156109be576001600160a01b0385166000908152609860205260408120855190919086908490811061175f5761175f61454e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061179a5761179a61454e565b6020908102919091010152600101611727565b6117b63361159d565b6117d3576040516325878fa360e21b815260040160405180910390fd5b336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b6708090838360405161180e929190614624565b60405180910390a25050565b604080517f39111bc4a4d688e1f685123d7497d4615370152a8ee4a0593e647bd06ad8bb0b6020808301919091526001600160a01b0387811683850152851660608301526080820186905260a08083018590528351808403909101815260c09092019092528051910120600090816118906120e1565b60405161190160f01b602082015260228101919091526042810183905260620160408051808303601f190181529190528051602090910120979650505050505050565b6040516360f4062b60e01b81526001600160a01b03828116600483015260609182916000917f0000000000000000000000000000000000000000000000000000000000000000909116906360f4062b90602401602060405180830381865afa158015611943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119679190614752565b6040516394f649dd60e01b81526001600160a01b03868116600483015291925060009182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd90602401600060405180830381865afa1580156119d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119ff91908101906147c9565b9150915060008313611a1657909590945092505050565b6060808351600003611acf576040805160018082528183019092529060208083019080368337505060408051600180825281830190925292945090506020808301908036833701905050905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac082600081518110611a8a57611a8a61454e565b60200260200101906001600160a01b031690816001600160a01b0316815250508481600081518110611abe57611abe61454e565b602002602001018181525050611c7d565b8351611adc9060016148a0565b6001600160401b03811115611af357611af3613e59565b604051908082528060200260200182016040528015611b1c578160200160208202803683370190505b50915081516001600160401b03811115611b3857611b38613e59565b604051908082528060200260200182016040528015611b61578160200160208202803683370190505b50905060005b8451811015611bfb57848181518110611b8257611b8261454e565b6020026020010151838281518110611b9c57611b9c61454e565b60200260200101906001600160a01b031690816001600160a01b031681525050838181518110611bce57611bce61454e565b6020026020010151828281518110611be857611be861454e565b6020908102919091010152600101611b67565b5073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08260018451611c2091906148b3565b81518110611c3057611c3061454e565b60200260200101906001600160a01b031690816001600160a01b031681525050848160018451611c6091906148b3565b81518110611c7057611c7061454e565b6020026020010181815250505b9097909650945050505050565b606654606090600190600290811603611cb65760405163840a48d560e01b815260040160405180910390fd5b611cbf836113da565b611cdc57604051630b3d63f960e11b815260040160405180910390fd5b611ce58361159d565b15611d03576040516311ca333560e31b815260040160405180910390fd5b6001600160a01b038316611d2a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b038084166000818152609a602052604090205490911690331480611d5d5750336001600160a01b038216145b80611d8457506001600160a01b038181166000908152609960205260409020600101541633145b611da157604051635c427cd960e01b815260040160405180910390fd5b600080611dad866118d3565b9092509050336001600160a01b03871614611e0357826001600160a01b0316866001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a35b826001600160a01b0316866001600160a01b03167ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467660405160405180910390a36001600160a01b0386166000908152609a6020526040812080546001600160a01b031916905582519003611e87576040805160008152602081019091529450611fd9565b81516001600160401b03811115611ea057611ea0613e59565b604051908082528060200260200182016040528015611ec9578160200160208202803683370190505b50945060005b8251811015611fd757604080516001808252818301909252600091602080830190803683375050604080516001808252818301909252929350600092915060208083019080368337019050509050848381518110611f2f57611f2f61454e565b602002602001015182600081518110611f4a57611f4a61454e565b60200260200101906001600160a01b031690816001600160a01b031681525050838381518110611f7c57611f7c61454e565b602002602001015181600081518110611f9757611f9761454e565b602002602001018181525050611fb089878b8585612226565b888481518110611fc257611fc261454e565b60209081029190910101525050600101611ecf565b505b50505050919050565b611feb336113da565b1561200957604051631a30c08d60e31b815260040160405180910390fd5b6120128361159d565b61202f576040516325878fa360e21b815260040160405180910390fd5b610f7a33848484612752565b6120443361159d565b612061576040516325878fa360e21b815260040160405180910390fd5b610ec43382612660565b612073612a49565b6001600160a01b0381166120d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611145565b610ec481612ce0565b60007f00000000000000000000000000000000000000000000000000000000000000004603612111575060975490565b612119612c49565b905090565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121959190614653565b6001600160a01b0316336001600160a01b0316146121c65760405163794821ff60e01b815260040160405180910390fd5b6066541981196066541916146121ef5760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200161105f565b60006001600160a01b03861661224f576040516339b190bb60e11b815260040160405180910390fd5b82516000036122715760405163796cc52560e01b815260040160405180910390fd5b60005b835181101561256e576001600160a01b038616156122ca576122ca86888684815181106122a3576122a361454e565b60200260200101518685815181106122bd576122bd61454e565b60200260200101516129ce565b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b03168482815181106122fa576122fa61454e565b60200260200101516001600160a01b0316036123c2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663beffbb89888584815181106123525761235261454e565b60200260200101516040518363ffffffff1660e01b815260040161238b9291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b1580156123a557600080fd5b505af11580156123b9573d6000803e3d6000fd5b50505050612566565b846001600160a01b0316876001600160a01b0316148061249457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b4da03d85838151811061241e5761241e61454e565b60200260200101516040518263ffffffff1660e01b815260040161245191906001600160a01b0391909116815260200190565b602060405180830381865afa15801561246e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124929190614670565b155b6124b1576040516330c4716960e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638c80d4e5888684815181106124f3576124f361454e565b602002602001015186858151811061250d5761250d61454e565b60200260200101516040518463ffffffff1660e01b8152600401612533939291906148c6565b600060405180830381600087803b15801561254d57600080fd5b505af1158015612561573d6000803e3d6000fd5b505050505b600101612274565b506001600160a01b0386166000908152609f60205260408120805491829190612596836148ea565b919050555060006040518060e00160405280896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b031681526020018381526020014363ffffffff16815260200186815260200185815250905060006125fe826114c2565b6000818152609e602052604090819020805460ff19166001179055519091507f9009ab153e8014fbfb02f2217f5cde7aa7f9ad734ae85ca3ee3f4ca2fdd499f99061264c9083908590614903565b60405180910390a198975050505050505050565b6213c680612674606083016040840161491c565b63ffffffff16111561269957604051638b11ba2f60e01b815260040160405180910390fd5b6001600160a01b0382166000908152609960205260409081902060010154600160a01b900463ffffffff16906126d5906060840190840161491c565b63ffffffff1610156126fa5760405163102b92a760e01b815260040160405180910390fd5b6001600160a01b0382166000908152609960205260409020819061271e8282614959565b505060405133907ffebe5cd24b2cbc7b065b9d0fdeb904461e4afcff57dd57acda1e7832031ba7ac9061180e9084906145cd565b60665460009060019081160361277b5760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b038085166000908152609960205260409020600101541680158015906127b15750336001600160a01b03821614155b80156127c65750336001600160a01b03861614155b156128895742846020015110156127f057604051630819bdcd60e01b815260040160405180910390fd5b6001600160a01b0381166000908152609c6020908152604080832086845290915290205460ff161561283557604051639a5afeb760e01b815260040160405180910390fd5b6001600160a01b0381166000908152609c6020908152604080832086845282528220805460ff191660011790558501516128769088908890859088906109c8565b90506128878282876000015161349b565b505b6001600160a01b038681166000818152609a602052604080822080546001600160a01b031916948a169485179055517fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d87433049190a36000806128e8886118d3565b9150915060005b82518110156111ea57612936888a85848151811061290f5761290f61454e565b60200260200101518585815181106129295761292961454e565b6020026020010151612d97565b6001016128ef565b6001600160a01b038116612965576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290612a059084906148b3565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051610e05939291906148c6565b6033546001600160a01b031633146115e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611145565b828114612ac3576040516343714afd60e01b815260040160405180910390fd5b8260005b81811015612bbc576000868683818110612ae357612ae361454e565b9050602002016020810190612af89190613c0e565b6001600160a01b038116600090815260a16020526040812054919250868685818110612b2657612b2661454e565b90506020020135905062034bc0811115612b5357604051639373e7cf60e01b815260040160405180910390fd5b6001600160a01b038316600081815260a160209081526040918290208490558151928352820184905281018290527f0e7efa738e8b0ce6376a0c1af471655540d2e9a81647d7b09ed823018426576d9060600160405180910390a1505050806001019050612ac7565b505050505050565b6065546001600160a01b0316158015612be557506001600160a01b03821615155b612c02576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2612c458261293e565b5050565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62034bc0811115612d5657604051639373e7cf60e01b815260040160405180910390fd5b609d5460408051918252602082018390527fafa003cd76f87ff9d62b35beea889920f33c0c42b8d45b74954d61d50f4b6b69910160405180910390a1609d55565b6001600160a01b03808516600090815260986020908152604080832093861683529290529081208054839290612dce9084906148a0565b92505081905550836001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c848484604051610e05939291906148c6565b6000612e206105f3876149bc565b6000818152609e602052604090205490915060ff16612e525760405163295a66e160e11b815260040160405180910390fd5b609d544390612e6760a0890160808a0161491c565b63ffffffff16612e7791906148a0565b1115612e96576040516378f67ae160e11b815260040160405180910390fd5b612ea66060870160408801613c0e565b6001600160a01b0316336001600160a01b031614612ed757604051635c427cd960e01b815260040160405180910390fd5b8115612f0b57612eea60a0870187614584565b85149050612f0b576040516343714afd60e01b815260040160405180910390fd5b6000818152609e60205260409020805460ff1916905581156130715760005b612f3760a0880188614584565b905081101561306b574360a16000612f5260a08b018b614584565b85818110612f6257612f6261454e565b9050602002016020810190612f779190613c0e565b6001600160a01b03168152602081019190915260400160002054612fa160a08a0160808b0161491c565b63ffffffff16612fb191906148a0565b1115612fd0576040516378f67ae160e11b815260040160405180910390fd5b613063612fe06020890189613c0e565b33612fee60a08b018b614584565b85818110612ffe57612ffe61454e565b90506020020160208101906130139190613c0e565b61302060c08c018c614584565b868181106130305761303061454e565b905060200201358a8a878181106130495761304961454e565b905060200201602081019061305e9190613c0e565b61357f565b600101612f2a565b50613460565b336000908152609a60205260408120546001600160a01b0316905b61309960a0890189614584565b905081101561345d574360a160006130b460a08c018c614584565b858181106130c4576130c461454e565b90506020020160208101906130d99190613c0e565b6001600160a01b0316815260208101919091526040016000205461310360a08b0160808c0161491c565b63ffffffff1661311391906148a0565b1115613132576040516378f67ae160e11b815260040160405180910390fd5b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061315460a08a018a614584565b838181106131645761316461454e565b90506020020160208101906131799190613c0e565b6001600160a01b0316036132c857600061319660208a018a613c0e565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630e81073c836131d760c08e018e614584565b878181106131e7576131e761454e565b6040516001600160e01b031960e087901b1681526001600160a01b03909416600485015260200291909101356024830152506044016020604051808303816000875af115801561323b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325f9190614752565b6001600160a01b038084166000908152609a60205260409020549192501680156132c0576132c0818461329560a08f018f614584565b888181106132a5576132a561454e565b90506020020160208101906132ba9190613c0e565b85612d97565b505050613455565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c4623ea13389898581811061330a5761330a61454e565b905060200201602081019061331f9190613c0e565b61332c60a08d018d614584565b8681811061333c5761333c61454e565b90506020020160208101906133519190613c0e565b61335e60c08e018e614584565b8781811061336e5761336e61454e565b60405160e088901b6001600160e01b03191681526001600160a01b03968716600482015294861660248601529290941660448401526020909102013560648201526084019050600060405180830381600087803b1580156133ce57600080fd5b505af11580156133e2573d6000803e3d6000fd5b505050506001600160a01b0382161561345557613455823361340760a08c018c614584565b858181106134175761341761454e565b905060200201602081019061342c9190613c0e565b61343960c08d018d614584565b868181106134495761344961454e565b90506020020135612d97565b60010161308c565b50505b6040518181527fc97098c2f658800b4df29001527f7324bcdffcf6e8751a699ab920a1eced5b1d9060200160405180910390a1505050505050565b6001600160a01b0383163b1561354457604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906134db90869086906004016149c8565b602060405180830381865afa1580156134f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351c9190614a1d565b6001600160e01b03191614610f7a5760405163026aa43360e31b815260040160405180910390fd5b826001600160a01b031661355883836136bf565b6001600160a01b031614610f7a576040516306c653c360e31b815260040160405180910390fd5b73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b0384160161362a5760405162387b1360e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063387b1300906135f3908890889087906004016148c6565b600060405180830381600087803b15801561360d57600080fd5b505af1158015613621573d6000803e3d6000fd5b505050506136b8565b60405163c608c7f360e01b81526001600160a01b03858116600483015284811660248301526044820184905282811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063c608c7f390608401600060405180830381600087803b1580156136a457600080fd5b505af11580156111ea573d6000803e3d6000fd5b5050505050565b60008060006136ce85856136db565b915091506109be81613749565b60008082516041036137115760208301516040840151606085015160001a613705878285856138ff565b94509450505050613742565b825160400361373a576020830151604084015161372f8683836139ec565b935093505050613742565b506000905060025b9250929050565b600081600481111561375d5761375d614a47565b036137655750565b600181600481111561377957613779614a47565b036137c65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611145565b60028160048111156137da576137da614a47565b036138275760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611145565b600381600481111561383b5761383b614a47565b036138935760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611145565b60048160048111156138a7576138a7614a47565b03610ec45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401611145565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561393657506000905060036139e3565b8460ff16601b1415801561394e57508460ff16601c14155b1561395f57506000905060046139e3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156139b3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166139dc576000600192509250506139e3565b9150600090505b94509492505050565b6000806001600160ff1b03831681613a0960ff86901c601b6148a0565b9050613a17878288856138ff565b935093505050935093915050565b60008083601f840112613a3757600080fd5b5081356001600160401b03811115613a4e57600080fd5b6020830191508360208260051b850101111561374257600080fd5b60008060208385031215613a7c57600080fd5b82356001600160401b03811115613a9257600080fd5b613a9e85828601613a25565b90969095509350505050565b6001600160a01b0381168114610ec457600080fd5b8035613aca81613aaa565b919050565b600080600080600060a08688031215613ae757600080fd5b8535613af281613aaa565b94506020860135613b0281613aaa565b93506040860135613b1281613aaa565b94979396509394606081013594506080013592915050565b602080825282518282018190526000918401906040840190835b81811015610d2b578351835260209384019390920191600101613b44565b600060608284031215613b7457600080fd5b50919050565b60008083601f840112613b8c57600080fd5b5081356001600160401b03811115613ba357600080fd5b60208301915083602082850101111561374257600080fd5b600080600060808486031215613bd057600080fd5b613bda8585613b62565b925060608401356001600160401b03811115613bf557600080fd5b613c0186828701613b7a565b9497909650939450505050565b600060208284031215613c2057600080fd5b8135613c2b81613aaa565b9392505050565b600080600060608486031215613c4757600080fd5b8335613c5281613aaa565b92506020840135613c6281613aaa565b929592945050506040919091013590565b600060208284031215613c8557600080fd5b5035919050565b60008060008060408587031215613ca257600080fd5b84356001600160401b03811115613cb857600080fd5b613cc487828801613a25565b90955093505060208501356001600160401b03811115613ce357600080fd5b613cef87828801613a25565b95989497509550505050565b60008060008060008060008060c0898b031215613d1757600080fd5b8835613d2281613aaa565b97506020890135613d3281613aaa565b9650604089013595506060890135945060808901356001600160401b03811115613d5b57600080fd5b613d678b828c01613a25565b90955093505060a08901356001600160401b03811115613d8657600080fd5b613d928b828c01613a25565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b031215613dc257600080fd5b88356001600160401b03811115613dd857600080fd5b613de48b828c01613a25565b90995097505060208901356001600160401b03811115613e0357600080fd5b613e0f8b828c01613a25565b90975095505060408901356001600160401b03811115613e2e57600080fd5b613e3a8b828c01613a25565b90955093505060608901356001600160401b03811115613d8657600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715613e9157613e91613e59565b60405290565b604080519081016001600160401b0381118282101715613e9157613e91613e59565b604051601f8201601f191681016001600160401b0381118282101715613ee157613ee1613e59565b604052919050565b63ffffffff81168114610ec457600080fd5b8035613aca81613ee9565b60006001600160401b03821115613f1f57613f1f613e59565b5060051b60200190565b600082601f830112613f3a57600080fd5b8135613f4d613f4882613f06565b613eb9565b8082825260208201915060208360051b860101925085831115613f6f57600080fd5b602085015b83811015613f95578035613f8781613aaa565b835260209283019201613f74565b5095945050505050565b600082601f830112613fb057600080fd5b8135613fbe613f4882613f06565b8082825260208201915060208360051b860101925085831115613fe057600080fd5b602085015b83811015613f95578035835260209283019201613fe5565b600060e0828403121561400f57600080fd5b614017613e6f565b905061402282613abf565b815261403060208301613abf565b602082015261404160408301613abf565b60408201526060828101359082015261405c60808301613efb565b608082015260a08201356001600160401b0381111561407a57600080fd5b61408684828501613f29565b60a08301525060c08201356001600160401b038111156140a557600080fd5b6140b184828501613f9f565b60c08301525092915050565b6000602082840312156140cf57600080fd5b81356001600160401b038111156140e557600080fd5b6140f184828501613ffd565b949350505050565b60006020828403121561410b57600080fd5b813560ff81168114613c2b57600080fd5b8015158114610ec457600080fd5b60008060008060006080868803121561414257600080fd5b85356001600160401b0381111561415857600080fd5b860160e0818903121561416a57600080fd5b945060208601356001600160401b0381111561418557600080fd5b61419188828901613a25565b9095509350506040860135915060608601356141ac8161411c565b809150509295509295909350565b600080604083850312156141cd57600080fd5b82356141d881613aaa565b915060208301356141e881613aaa565b809150509250929050565b60006040828403121561420557600080fd5b61420d613e97565b905081356001600160401b0381111561422557600080fd5b8201601f8101841361423657600080fd5b80356001600160401b0381111561424f5761424f613e59565b614262601f8201601f1916602001613eb9565b81815285602083850101111561427757600080fd5b81602084016020830137600060209282018301528352928301359282019290925292915050565b600080600080600060a086880312156142b657600080fd5b85356142c181613aaa565b945060208601356142d181613aaa565b935060408601356001600160401b038111156142ec57600080fd5b6142f8888289016141f3565b93505060608601356001600160401b0381111561431457600080fd5b614320888289016141f3565b95989497509295608001359392505050565b6000806040838503121561434557600080fd5b823561435081613aaa565b915060208301356001600160401b0381111561436b57600080fd5b61437785828601613f29565b9150509250929050565b600081518084526020840193506020830160005b828110156143b3578151865260209586019590910190600101614395565b5093949350505050565b602081526000613c2b6020830184614381565b600080602083850312156143e357600080fd5b82356001600160401b038111156143f957600080fd5b613a9e85828601613b7a565b6000806040838503121561441857600080fd5b823561442381613aaa565b946020939093013593505050565b6000806000806080858703121561444757600080fd5b843561445281613aaa565b935060208501359250604085013561446981613aaa565b9396929550929360600135925050565b600081518084526020840193506020830160005b828110156143b35781516001600160a01b031686526020958601959091019060010161448d565b6040815260006144c76040830185614479565b82810360208401526110a38185614381565b6000806000606084860312156144ee57600080fd5b83356144f981613aaa565b925060208401356001600160401b0381111561451457600080fd5b614520868287016141f3565b93969395505050506040919091013590565b60006060828403121561454457600080fd5b613c2b8383613b62565b634e487b7160e01b600052603260045260246000fd5b60008235605e1983360301811261457a57600080fd5b9190910192915050565b6000808335601e1984360301811261459b57600080fd5b8301803591506001600160401b038211156145b557600080fd5b6020019150600581901b360382131561374257600080fd5b6060810182356145dc81613aaa565b6001600160a01b0316825260208301356145f581613aaa565b6001600160a01b03166020830152604083013561461181613ee9565b63ffffffff811660408401525092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561466557600080fd5b8151613c2b81613aaa565b60006020828403121561468257600080fd5b8151613c2b8161411c565b6000823560de1983360301811261457a57600080fd5b6000602082840312156146b557600080fd5b8135613c2b8161411c565b80516001600160a01b039081168352602080830151821690840152604080830151909116908301526060808201519083015260808082015160009161470c9085018263ffffffff169052565b5060a082015160e060a085015261472660e0850182614479565b905060c083015184820360c08601526110a38282614381565b602081526000613c2b60208301846146c0565b60006020828403121561476457600080fd5b5051919050565b600082601f83011261477c57600080fd5b815161478a613f4882613f06565b8082825260208201915060208360051b8601019250858311156147ac57600080fd5b602085015b83811015613f955780518352602092830192016147b1565b600080604083850312156147dc57600080fd5b82516001600160401b038111156147f257600080fd5b8301601f8101851361480357600080fd5b8051614811613f4882613f06565b8082825260208201915060208360051b85010192508783111561483357600080fd5b6020840193505b8284101561485e57835161484d81613aaa565b82526020938401939091019061483a565b8095505050505060208301516001600160401b0381111561487e57600080fd5b6143778582860161476b565b634e487b7160e01b600052601160045260246000fd5b808201808211156109c2576109c261488a565b818103818111156109c2576109c261488a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000600182016148fc576148fc61488a565b5060010190565b8281526040602082015260006140f160408301846146c0565b60006020828403121561492e57600080fd5b8135613c2b81613ee9565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561496481613aaa565b61496e8183614939565b5060018101602083013561498181613aaa565b61498b8183614939565b50604083013561499a81613ee9565b815463ffffffff60a01b191660a09190911b63ffffffff60a01b161790555050565b60006109c23683613ffd565b828152604060208201526000825180604084015260005b818110156149fc57602081860181015160608684010152016149df565b506000606082850101526060601f19601f8301168401019150509392505050565b600060208284031215614a2f57600080fd5b81516001600160e01b031981168114613c2b57600080fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220196e24351b49d934a7545548d043d9b4aaaf25ae2fc57705df170153f75a12a864736f6c634300081b0033", } // DelegationManagerABI is the input ABI used to generate the binding from. @@ -81,7 +75,7 @@ var DelegationManagerABI = DelegationManagerMetaData.ABI var DelegationManagerBin = DelegationManagerMetaData.Bin // DeployDelegationManager deploys a new Ethereum contract, binding an instance of DelegationManager to it. -func DeployDelegationManager(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _slasher common.Address, _eigenPodManager common.Address, _avsDirectory common.Address) (common.Address, *types.Transaction, *DelegationManager, error) { +func DeployDelegationManager(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _slasher common.Address, _eigenPodManager common.Address) (common.Address, *types.Transaction, *DelegationManager, error) { parsed, err := DelegationManagerMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -90,7 +84,7 @@ func DeployDelegationManager(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(DelegationManagerBin), backend, _strategyManager, _slasher, _eigenPodManager, _avsDirectory) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(DelegationManagerBin), backend, _strategyManager, _slasher, _eigenPodManager) if err != nil { return common.Address{}, nil, nil, err } @@ -332,37 +326,6 @@ func (_DelegationManager *DelegationManagerCallerSession) MAXSTAKEROPTOUTWINDOWB return _DelegationManager.Contract.MAXSTAKEROPTOUTWINDOWBLOCKS(&_DelegationManager.CallOpts) } -// MAXWITHDRAWALDELAY is a free data retrieval call binding the contract method 0xa238f9df. -// -// Solidity: function MAX_WITHDRAWAL_DELAY() view returns(uint256) -func (_DelegationManager *DelegationManagerCaller) MAXWITHDRAWALDELAY(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _DelegationManager.contract.Call(opts, &out, "MAX_WITHDRAWAL_DELAY") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MAXWITHDRAWALDELAY is a free data retrieval call binding the contract method 0xa238f9df. -// -// Solidity: function MAX_WITHDRAWAL_DELAY() view returns(uint256) -func (_DelegationManager *DelegationManagerSession) MAXWITHDRAWALDELAY() (*big.Int, error) { - return _DelegationManager.Contract.MAXWITHDRAWALDELAY(&_DelegationManager.CallOpts) -} - -// MAXWITHDRAWALDELAY is a free data retrieval call binding the contract method 0xa238f9df. -// -// Solidity: function MAX_WITHDRAWAL_DELAY() view returns(uint256) -func (_DelegationManager *DelegationManagerCallerSession) MAXWITHDRAWALDELAY() (*big.Int, error) { - return _DelegationManager.Contract.MAXWITHDRAWALDELAY(&_DelegationManager.CallOpts) -} - // MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. // // Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) @@ -425,37 +388,6 @@ func (_DelegationManager *DelegationManagerCallerSession) STAKERDELEGATIONTYPEHA return _DelegationManager.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManager.CallOpts) } -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_DelegationManager *DelegationManagerCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _DelegationManager.contract.Call(opts, &out, "avsDirectory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_DelegationManager *DelegationManagerSession) AvsDirectory() (common.Address, error) { - return _DelegationManager.Contract.AvsDirectory(&_DelegationManager.CallOpts) -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_DelegationManager *DelegationManagerCallerSession) AvsDirectory() (common.Address, error) { - return _DelegationManager.Contract.AvsDirectory(&_DelegationManager.CallOpts) -} - // BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. // // Solidity: function beaconChainETHStrategy() view returns(address) @@ -829,12 +761,12 @@ func (_DelegationManager *DelegationManagerCallerSession) GetDelegatableShares(s return _DelegationManager.Contract.GetDelegatableShares(&_DelegationManager.CallOpts, staker) } -// GetWithdrawableStakerShares is a free data retrieval call binding the contract method 0xf878776e. +// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. // -// Solidity: function getWithdrawableStakerShares(address staker, address[] strategies) view returns(uint256[] shares) -func (_DelegationManager *DelegationManagerCaller) GetWithdrawableStakerShares(opts *bind.CallOpts, staker common.Address, strategies []common.Address) ([]*big.Int, error) { +// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) +func (_DelegationManager *DelegationManagerCaller) GetOperatorShares(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]*big.Int, error) { var out []interface{} - err := _DelegationManager.contract.Call(opts, &out, "getWithdrawableStakerShares", staker, strategies) + err := _DelegationManager.contract.Call(opts, &out, "getOperatorShares", operator, strategies) if err != nil { return *new([]*big.Int), err @@ -846,18 +778,18 @@ func (_DelegationManager *DelegationManagerCaller) GetWithdrawableStakerShares(o } -// GetWithdrawableStakerShares is a free data retrieval call binding the contract method 0xf878776e. +// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. // -// Solidity: function getWithdrawableStakerShares(address staker, address[] strategies) view returns(uint256[] shares) -func (_DelegationManager *DelegationManagerSession) GetWithdrawableStakerShares(staker common.Address, strategies []common.Address) ([]*big.Int, error) { - return _DelegationManager.Contract.GetWithdrawableStakerShares(&_DelegationManager.CallOpts, staker, strategies) +// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) +func (_DelegationManager *DelegationManagerSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { + return _DelegationManager.Contract.GetOperatorShares(&_DelegationManager.CallOpts, operator, strategies) } -// GetWithdrawableStakerShares is a free data retrieval call binding the contract method 0xf878776e. +// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. // -// Solidity: function getWithdrawableStakerShares(address staker, address[] strategies) view returns(uint256[] shares) -func (_DelegationManager *DelegationManagerCallerSession) GetWithdrawableStakerShares(staker common.Address, strategies []common.Address) ([]*big.Int, error) { - return _DelegationManager.Contract.GetWithdrawableStakerShares(&_DelegationManager.CallOpts, staker, strategies) +// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) +func (_DelegationManager *DelegationManagerCallerSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { + return _DelegationManager.Contract.GetOperatorShares(&_DelegationManager.CallOpts, operator, strategies) } // GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. @@ -953,37 +885,6 @@ func (_DelegationManager *DelegationManagerCallerSession) IsOperator(operator co return _DelegationManager.Contract.IsOperator(&_DelegationManager.CallOpts, operator) } -// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. -// -// Solidity: function minWithdrawalDelay() view returns(uint256) -func (_DelegationManager *DelegationManagerCaller) MinWithdrawalDelay(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _DelegationManager.contract.Call(opts, &out, "minWithdrawalDelay") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. -// -// Solidity: function minWithdrawalDelay() view returns(uint256) -func (_DelegationManager *DelegationManagerSession) MinWithdrawalDelay() (*big.Int, error) { - return _DelegationManager.Contract.MinWithdrawalDelay(&_DelegationManager.CallOpts) -} - -// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. -// -// Solidity: function minWithdrawalDelay() view returns(uint256) -func (_DelegationManager *DelegationManagerCallerSession) MinWithdrawalDelay() (*big.Int, error) { - return _DelegationManager.Contract.MinWithdrawalDelay(&_DelegationManager.CallOpts) -} - // MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. // // Solidity: function minWithdrawalDelayBlocks() view returns(uint256) @@ -1015,37 +916,6 @@ func (_DelegationManager *DelegationManagerCallerSession) MinWithdrawalDelayBloc return _DelegationManager.Contract.MinWithdrawalDelayBlocks(&_DelegationManager.CallOpts) } -// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. -// -// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) -func (_DelegationManager *DelegationManagerCaller) OperatorAllocationDelay(opts *bind.CallOpts, operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { - var out []interface{} - err := _DelegationManager.contract.Call(opts, &out, "operatorAllocationDelay", operator) - - if err != nil { - return *new(IDelegationManagerAllocationDelayDetails), err - } - - out0 := *abi.ConvertType(out[0], new(IDelegationManagerAllocationDelayDetails)).(*IDelegationManagerAllocationDelayDetails) - - return out0, err - -} - -// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. -// -// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) -func (_DelegationManager *DelegationManagerSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { - return _DelegationManager.Contract.OperatorAllocationDelay(&_DelegationManager.CallOpts, operator) -} - -// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. -// -// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) -func (_DelegationManager *DelegationManagerCallerSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { - return _DelegationManager.Contract.OperatorAllocationDelay(&_DelegationManager.CallOpts, operator) -} - // OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. // // Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) @@ -1077,43 +947,12 @@ func (_DelegationManager *DelegationManagerCallerSession) OperatorDetails(operat return _DelegationManager.Contract.OperatorDetails(&_DelegationManager.CallOpts, operator) } -// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. -// -// Solidity: function operatorScaledShares(address , address ) view returns(uint256) -func (_DelegationManager *DelegationManagerCaller) OperatorScaledShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { - var out []interface{} - err := _DelegationManager.contract.Call(opts, &out, "operatorScaledShares", arg0, arg1) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. -// -// Solidity: function operatorScaledShares(address , address ) view returns(uint256) -func (_DelegationManager *DelegationManagerSession) OperatorScaledShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManager.Contract.OperatorScaledShares(&_DelegationManager.CallOpts, arg0, arg1) -} - -// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. -// -// Solidity: function operatorScaledShares(address , address ) view returns(uint256) -func (_DelegationManager *DelegationManagerCallerSession) OperatorScaledShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManager.Contract.OperatorScaledShares(&_DelegationManager.CallOpts, arg0, arg1) -} - // OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) -func (_DelegationManager *DelegationManagerCaller) OperatorShares(opts *bind.CallOpts, operator common.Address, strategy common.Address) (*big.Int, error) { +// Solidity: function operatorShares(address , address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCaller) OperatorShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { var out []interface{} - err := _DelegationManager.contract.Call(opts, &out, "operatorShares", operator, strategy) + err := _DelegationManager.contract.Call(opts, &out, "operatorShares", arg0, arg1) if err != nil { return *new(*big.Int), err @@ -1127,16 +966,16 @@ func (_DelegationManager *DelegationManagerCaller) OperatorShares(opts *bind.Cal // OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) -func (_DelegationManager *DelegationManagerSession) OperatorShares(operator common.Address, strategy common.Address) (*big.Int, error) { - return _DelegationManager.Contract.OperatorShares(&_DelegationManager.CallOpts, operator, strategy) +// Solidity: function operatorShares(address , address ) view returns(uint256) +func (_DelegationManager *DelegationManagerSession) OperatorShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.OperatorShares(&_DelegationManager.CallOpts, arg0, arg1) } // OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) -func (_DelegationManager *DelegationManagerCallerSession) OperatorShares(operator common.Address, strategy common.Address) (*big.Int, error) { - return _DelegationManager.Contract.OperatorShares(&_DelegationManager.CallOpts, operator, strategy) +// Solidity: function operatorShares(address , address ) view returns(uint256) +func (_DelegationManager *DelegationManagerCallerSession) OperatorShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManager.Contract.OperatorShares(&_DelegationManager.CallOpts, arg0, arg1) } // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. @@ -1387,37 +1226,6 @@ func (_DelegationManager *DelegationManagerCallerSession) StakerOptOutWindowBloc return _DelegationManager.Contract.StakerOptOutWindowBlocks(&_DelegationManager.CallOpts, operator) } -// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. -// -// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) -func (_DelegationManager *DelegationManagerCaller) StakerScalingFactors(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { - var out []interface{} - err := _DelegationManager.contract.Call(opts, &out, "stakerScalingFactors", arg0, arg1) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. -// -// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) -func (_DelegationManager *DelegationManagerSession) StakerScalingFactors(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManager.Contract.StakerScalingFactors(&_DelegationManager.CallOpts, arg0, arg1) -} - -// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. -// -// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) -func (_DelegationManager *DelegationManagerCallerSession) StakerScalingFactors(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManager.Contract.StakerScalingFactors(&_DelegationManager.CallOpts, arg0, arg1) -} - // StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. // // Solidity: function strategyManager() view returns(address) @@ -1480,98 +1288,67 @@ func (_DelegationManager *DelegationManagerCallerSession) StrategyWithdrawalDela return _DelegationManager.Contract.StrategyWithdrawalDelayBlocks(&_DelegationManager.CallOpts, arg0) } -// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. -// -// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) -func (_DelegationManager *DelegationManagerCaller) StrategyWithdrawalDelays(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { - var out []interface{} - err := _DelegationManager.contract.Call(opts, &out, "strategyWithdrawalDelays", arg0) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. // -// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) -func (_DelegationManager *DelegationManagerSession) StrategyWithdrawalDelays(arg0 common.Address) (*big.Int, error) { - return _DelegationManager.Contract.StrategyWithdrawalDelays(&_DelegationManager.CallOpts, arg0) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) } -// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. // -// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) -func (_DelegationManager *DelegationManagerCallerSession) StrategyWithdrawalDelays(arg0 common.Address) (*big.Int, error) { - return _DelegationManager.Contract.StrategyWithdrawalDelays(&_DelegationManager.CallOpts, arg0) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManager.Contract.CompleteQueuedWithdrawal(&_DelegationManager.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManager.Contract.CompleteQueuedWithdrawal(&_DelegationManager.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManager.Contract.CompleteQueuedWithdrawal(&_DelegationManager.TransactOpts, withdrawal, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManager.Contract.CompleteQueuedWithdrawal(&_DelegationManager.TransactOpts, withdrawal, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManager.Contract.CompleteQueuedWithdrawals(&_DelegationManager.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, receiveAsTokens) -} - -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. -// -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManager.Contract.CompleteQueuedWithdrawals(&_DelegationManager.TransactOpts, withdrawals, tokens, receiveAsTokens) -} - -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. -// -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() -func (_DelegationManager *DelegationManagerTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManager.Contract.CompleteQueuedWithdrawals(&_DelegationManager.TransactOpts, withdrawals, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_DelegationManager *DelegationManagerTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManager.Contract.CompleteQueuedWithdrawals(&_DelegationManager.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() -func (_DelegationManager *DelegationManagerTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, removedShares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManager *DelegationManagerTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, shares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() -func (_DelegationManager *DelegationManagerSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { - return _DelegationManager.Contract.DecreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, removedShares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManager *DelegationManagerSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.DecreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, shares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() -func (_DelegationManager *DelegationManagerTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { - return _DelegationManager.Contract.DecreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, removedShares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManager *DelegationManagerTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.DecreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, shares) } // DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. @@ -1616,25 +1393,25 @@ func (_DelegationManager *DelegationManagerTransactorSession) DelegateToBySignat return _DelegationManager.Contract.DelegateToBySignature(&_DelegationManager.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() -func (_DelegationManager *DelegationManagerTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, existingShares, addedShares) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManager *DelegationManagerTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, shares) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() -func (_DelegationManager *DelegationManagerSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { - return _DelegationManager.Contract.IncreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, existingShares, addedShares) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManager *DelegationManagerSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.IncreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, shares) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() -func (_DelegationManager *DelegationManagerTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { - return _DelegationManager.Contract.IncreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, existingShares, addedShares) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManager *DelegationManagerTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManager.Contract.IncreaseDelegatedShares(&_DelegationManager.TransactOpts, staker, strategy, shares) } // Initialize is a paid mutator transaction binding the contract method 0x22bf40e4. @@ -1658,27 +1435,6 @@ func (_DelegationManager *DelegationManagerTransactorSession) Initialize(initial return _DelegationManager.Contract.Initialize(&_DelegationManager.TransactOpts, initialOwner, _pauserRegistry, initialPausedStatus, _minWithdrawalDelayBlocks, _strategies, _withdrawalDelayBlocks) } -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. -// -// Solidity: function initializeAllocationDelay(uint32 delay) returns() -func (_DelegationManager *DelegationManagerTransactor) InitializeAllocationDelay(opts *bind.TransactOpts, delay uint32) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "initializeAllocationDelay", delay) -} - -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. -// -// Solidity: function initializeAllocationDelay(uint32 delay) returns() -func (_DelegationManager *DelegationManagerSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { - return _DelegationManager.Contract.InitializeAllocationDelay(&_DelegationManager.TransactOpts, delay) -} - -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. -// -// Solidity: function initializeAllocationDelay(uint32 delay) returns() -func (_DelegationManager *DelegationManagerTransactorSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { - return _DelegationManager.Contract.InitializeAllocationDelay(&_DelegationManager.TransactOpts, delay) -} - // ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. // // Solidity: function modifyOperatorDetails((address,address,uint32) newOperatorDetails) returns() @@ -1763,25 +1519,25 @@ func (_DelegationManager *DelegationManagerTransactorSession) QueueWithdrawals(q return _DelegationManager.Contract.QueueWithdrawals(&_DelegationManager.TransactOpts, queuedWithdrawalParams) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() -func (_DelegationManager *DelegationManagerTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, allocationDelay, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_DelegationManager *DelegationManagerTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _DelegationManager.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() -func (_DelegationManager *DelegationManagerSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { - return _DelegationManager.Contract.RegisterAsOperator(&_DelegationManager.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_DelegationManager *DelegationManagerSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _DelegationManager.Contract.RegisterAsOperator(&_DelegationManager.TransactOpts, registeringOperatorDetails, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() -func (_DelegationManager *DelegationManagerTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { - return _DelegationManager.Contract.RegisterAsOperator(&_DelegationManager.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_DelegationManager *DelegationManagerTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _DelegationManager.Contract.RegisterAsOperator(&_DelegationManager.TransactOpts, registeringOperatorDetails, metadataURI) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -1847,27 +1603,6 @@ func (_DelegationManager *DelegationManagerTransactorSession) SetPauserRegistry( return _DelegationManager.Contract.SetPauserRegistry(&_DelegationManager.TransactOpts, newPauserRegistry) } -// SetStrategyWithdrawalDelay is a paid mutator transaction binding the contract method 0x65187810. -// -// Solidity: function setStrategyWithdrawalDelay(address[] strategies, uint256[] withdrawalDelays) returns() -func (_DelegationManager *DelegationManagerTransactor) SetStrategyWithdrawalDelay(opts *bind.TransactOpts, strategies []common.Address, withdrawalDelays []*big.Int) (*types.Transaction, error) { - return _DelegationManager.contract.Transact(opts, "setStrategyWithdrawalDelay", strategies, withdrawalDelays) -} - -// SetStrategyWithdrawalDelay is a paid mutator transaction binding the contract method 0x65187810. -// -// Solidity: function setStrategyWithdrawalDelay(address[] strategies, uint256[] withdrawalDelays) returns() -func (_DelegationManager *DelegationManagerSession) SetStrategyWithdrawalDelay(strategies []common.Address, withdrawalDelays []*big.Int) (*types.Transaction, error) { - return _DelegationManager.Contract.SetStrategyWithdrawalDelay(&_DelegationManager.TransactOpts, strategies, withdrawalDelays) -} - -// SetStrategyWithdrawalDelay is a paid mutator transaction binding the contract method 0x65187810. -// -// Solidity: function setStrategyWithdrawalDelay(address[] strategies, uint256[] withdrawalDelays) returns() -func (_DelegationManager *DelegationManagerTransactorSession) SetStrategyWithdrawalDelay(strategies []common.Address, withdrawalDelays []*big.Int) (*types.Transaction, error) { - return _DelegationManager.Contract.SetStrategyWithdrawalDelay(&_DelegationManager.TransactOpts, strategies, withdrawalDelays) -} - // SetStrategyWithdrawalDelayBlocks is a paid mutator transaction binding the contract method 0x1522bf02. // // Solidity: function setStrategyWithdrawalDelayBlocks(address[] strategies, uint256[] withdrawalDelayBlocks) returns() @@ -3999,142 +3734,6 @@ func (_DelegationManager *DelegationManagerFilterer) ParseStrategyWithdrawalDela return event, nil } -// DelegationManagerStrategyWithdrawalDelaySetIterator is returned from FilterStrategyWithdrawalDelaySet and is used to iterate over the raw logs and unpacked data for StrategyWithdrawalDelaySet events raised by the DelegationManager contract. -type DelegationManagerStrategyWithdrawalDelaySetIterator struct { - Event *DelegationManagerStrategyWithdrawalDelaySet // 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 *DelegationManagerStrategyWithdrawalDelaySetIterator) 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(DelegationManagerStrategyWithdrawalDelaySet) - 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(DelegationManagerStrategyWithdrawalDelaySet) - 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 *DelegationManagerStrategyWithdrawalDelaySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *DelegationManagerStrategyWithdrawalDelaySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// DelegationManagerStrategyWithdrawalDelaySet represents a StrategyWithdrawalDelaySet event raised by the DelegationManager contract. -type DelegationManagerStrategyWithdrawalDelaySet struct { - Strategy common.Address - PreviousValue *big.Int - NewValue *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStrategyWithdrawalDelaySet is a free log retrieval operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. -// -// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) -func (_DelegationManager *DelegationManagerFilterer) FilterStrategyWithdrawalDelaySet(opts *bind.FilterOpts) (*DelegationManagerStrategyWithdrawalDelaySetIterator, error) { - - logs, sub, err := _DelegationManager.contract.FilterLogs(opts, "StrategyWithdrawalDelaySet") - if err != nil { - return nil, err - } - return &DelegationManagerStrategyWithdrawalDelaySetIterator{contract: _DelegationManager.contract, event: "StrategyWithdrawalDelaySet", logs: logs, sub: sub}, nil -} - -// WatchStrategyWithdrawalDelaySet is a free log subscription operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. -// -// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) -func (_DelegationManager *DelegationManagerFilterer) WatchStrategyWithdrawalDelaySet(opts *bind.WatchOpts, sink chan<- *DelegationManagerStrategyWithdrawalDelaySet) (event.Subscription, error) { - - logs, sub, err := _DelegationManager.contract.WatchLogs(opts, "StrategyWithdrawalDelaySet") - 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(DelegationManagerStrategyWithdrawalDelaySet) - if err := _DelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", 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 -} - -// ParseStrategyWithdrawalDelaySet is a log parse operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. -// -// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) -func (_DelegationManager *DelegationManagerFilterer) ParseStrategyWithdrawalDelaySet(log types.Log) (*DelegationManagerStrategyWithdrawalDelaySet, error) { - event := new(DelegationManagerStrategyWithdrawalDelaySet) - if err := _DelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // DelegationManagerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the DelegationManager contract. type DelegationManagerUnpausedIterator struct { Event *DelegationManagerUnpaused // Event containing the contract specifics and raw log diff --git a/pkg/bindings/DelegationManagerStorage/binding.go b/pkg/bindings/DelegationManagerStorage/binding.go index c6e4bb0dd..4b84442e1 100644 --- a/pkg/bindings/DelegationManagerStorage/binding.go +++ b/pkg/bindings/DelegationManagerStorage/binding.go @@ -29,12 +29,6 @@ var ( _ = abi.ConvertType ) -// IDelegationManagerAllocationDelayDetails is an auto generated low-level Go binding around an user-defined struct. -type IDelegationManagerAllocationDelayDetails struct { - IsSet bool - AllocationDelay uint32 -} - // IDelegationManagerOperatorDetails is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerOperatorDetails struct { DeprecatedEarningsReceiver common.Address @@ -51,13 +45,13 @@ type IDelegationManagerQueuedWithdrawalParams struct { // IDelegationManagerWithdrawal is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerWithdrawal struct { - Staker common.Address - DelegatedTo common.Address - Withdrawer common.Address - Nonce *big.Int - StartTimestamp uint32 - Strategies []common.Address - ScaledShares []*big.Int + Staker common.Address + DelegatedTo common.Address + Withdrawer common.Address + Nonce *big.Int + StartBlock uint32 + Strategies []common.Address + Shares []*big.Int } // ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. @@ -279,66 +273,66 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) DOMAINTY return _DelegationManagerStorage.Contract.DOMAINTYPEHASH(&_DelegationManagerStorage.CallOpts) } -// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. // -// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) STAKERDELEGATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) MAXWITHDRAWALDELAYBLOCKS(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "STAKER_DELEGATION_TYPEHASH") + err := _DelegationManagerStorage.contract.Call(opts, &out, "MAX_WITHDRAWAL_DELAY_BLOCKS") if err != nil { - return *new([32]byte), err + return *new(*big.Int), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) return out0, err } -// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. // -// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) -func (_DelegationManagerStorage *DelegationManagerStorageSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { - return _DelegationManagerStorage.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManagerStorage.CallOpts) +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { + return _DelegationManagerStorage.Contract.MAXWITHDRAWALDELAYBLOCKS(&_DelegationManagerStorage.CallOpts) } -// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. +// MAXWITHDRAWALDELAYBLOCKS is a free data retrieval call binding the contract method 0xca661c04. // -// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { - return _DelegationManagerStorage.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManagerStorage.CallOpts) +// Solidity: function MAX_WITHDRAWAL_DELAY_BLOCKS() view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) MAXWITHDRAWALDELAYBLOCKS() (*big.Int, error) { + return _DelegationManagerStorage.Contract.MAXWITHDRAWALDELAYBLOCKS(&_DelegationManagerStorage.CallOpts) } -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. // -// Solidity: function avsDirectory() view returns(address) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) STAKERDELEGATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "avsDirectory") + err := _DelegationManagerStorage.contract.Call(opts, &out, "STAKER_DELEGATION_TYPEHASH") if err != nil { - return *new(common.Address), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. // -// Solidity: function avsDirectory() view returns(address) -func (_DelegationManagerStorage *DelegationManagerStorageSession) AvsDirectory() (common.Address, error) { - return _DelegationManagerStorage.Contract.AvsDirectory(&_DelegationManagerStorage.CallOpts) +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _DelegationManagerStorage.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManagerStorage.CallOpts) } -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. +// STAKERDELEGATIONTYPEHASH is a free data retrieval call binding the contract method 0x43377382. // -// Solidity: function avsDirectory() view returns(address) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) AvsDirectory() (common.Address, error) { - return _DelegationManagerStorage.Contract.AvsDirectory(&_DelegationManagerStorage.CallOpts) +// Solidity: function STAKER_DELEGATION_TYPEHASH() view returns(bytes32) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) STAKERDELEGATIONTYPEHASH() ([32]byte, error) { + return _DelegationManagerStorage.Contract.STAKERDELEGATIONTYPEHASH(&_DelegationManagerStorage.CallOpts) } // BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. @@ -682,6 +676,37 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) EigenPod return _DelegationManagerStorage.Contract.EigenPodManager(&_DelegationManagerStorage.CallOpts) } +// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. +// +// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) GetOperatorShares(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]*big.Int, error) { + var out []interface{} + err := _DelegationManagerStorage.contract.Call(opts, &out, "getOperatorShares", operator, strategies) + + if err != nil { + return *new([]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) + + return out0, err + +} + +// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. +// +// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) +func (_DelegationManagerStorage *DelegationManagerStorageSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { + return _DelegationManagerStorage.Contract.GetOperatorShares(&_DelegationManagerStorage.CallOpts, operator, strategies) +} + +// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. +// +// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { + return _DelegationManagerStorage.Contract.GetOperatorShares(&_DelegationManagerStorage.CallOpts, operator, strategies) +} + // GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. // // Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) @@ -775,37 +800,6 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) IsOperat return _DelegationManagerStorage.Contract.IsOperator(&_DelegationManagerStorage.CallOpts, operator) } -// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. -// -// Solidity: function minWithdrawalDelay() view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) MinWithdrawalDelay(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "minWithdrawalDelay") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. -// -// Solidity: function minWithdrawalDelay() view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageSession) MinWithdrawalDelay() (*big.Int, error) { - return _DelegationManagerStorage.Contract.MinWithdrawalDelay(&_DelegationManagerStorage.CallOpts) -} - -// MinWithdrawalDelay is a free data retrieval call binding the contract method 0x0d5b0067. -// -// Solidity: function minWithdrawalDelay() view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) MinWithdrawalDelay() (*big.Int, error) { - return _DelegationManagerStorage.Contract.MinWithdrawalDelay(&_DelegationManagerStorage.CallOpts) -} - // MinWithdrawalDelayBlocks is a free data retrieval call binding the contract method 0xc448feb8. // // Solidity: function minWithdrawalDelayBlocks() view returns(uint256) @@ -837,37 +831,6 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) MinWithd return _DelegationManagerStorage.Contract.MinWithdrawalDelayBlocks(&_DelegationManagerStorage.CallOpts) } -// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. -// -// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) OperatorAllocationDelay(opts *bind.CallOpts, operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { - var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "operatorAllocationDelay", operator) - - if err != nil { - return *new(IDelegationManagerAllocationDelayDetails), err - } - - out0 := *abi.ConvertType(out[0], new(IDelegationManagerAllocationDelayDetails)).(*IDelegationManagerAllocationDelayDetails) - - return out0, err - -} - -// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. -// -// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) -func (_DelegationManagerStorage *DelegationManagerStorageSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { - return _DelegationManagerStorage.Contract.OperatorAllocationDelay(&_DelegationManagerStorage.CallOpts, operator) -} - -// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. -// -// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { - return _DelegationManagerStorage.Contract.OperatorAllocationDelay(&_DelegationManagerStorage.CallOpts, operator) -} - // OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. // // Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) @@ -899,12 +862,12 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) Operator return _DelegationManagerStorage.Contract.OperatorDetails(&_DelegationManagerStorage.CallOpts, operator) } -// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorScaledShares(address , address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) OperatorScaledShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { +// Solidity: function operatorShares(address , address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCaller) OperatorShares(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "operatorScaledShares", arg0, arg1) + err := _DelegationManagerStorage.contract.Call(opts, &out, "operatorShares", arg0, arg1) if err != nil { return *new(*big.Int), err @@ -916,18 +879,18 @@ func (_DelegationManagerStorage *DelegationManagerStorageCaller) OperatorScaledS } -// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorScaledShares(address , address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageSession) OperatorScaledShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManagerStorage.Contract.OperatorScaledShares(&_DelegationManagerStorage.CallOpts, arg0, arg1) +// Solidity: function operatorShares(address , address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageSession) OperatorShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.OperatorShares(&_DelegationManagerStorage.CallOpts, arg0, arg1) } -// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorScaledShares(address , address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) OperatorScaledShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManagerStorage.Contract.OperatorScaledShares(&_DelegationManagerStorage.CallOpts, arg0, arg1) +// Solidity: function operatorShares(address , address ) view returns(uint256) +func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) OperatorShares(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _DelegationManagerStorage.Contract.OperatorShares(&_DelegationManagerStorage.CallOpts, arg0, arg1) } // PendingWithdrawals is a free data retrieval call binding the contract method 0xb7f06ebe. @@ -1054,37 +1017,6 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) StakerOp return _DelegationManagerStorage.Contract.StakerOptOutWindowBlocks(&_DelegationManagerStorage.CallOpts, operator) } -// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. -// -// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) StakerScalingFactors(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { - var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "stakerScalingFactors", arg0, arg1) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. -// -// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageSession) StakerScalingFactors(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManagerStorage.Contract.StakerScalingFactors(&_DelegationManagerStorage.CallOpts, arg0, arg1) -} - -// StakerScalingFactors is a free data retrieval call binding the contract method 0x51260e23. -// -// Solidity: function stakerScalingFactors(address , address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) StakerScalingFactors(arg0 common.Address, arg1 common.Address) (*big.Int, error) { - return _DelegationManagerStorage.Contract.StakerScalingFactors(&_DelegationManagerStorage.CallOpts, arg0, arg1) -} - // StrategyManager is a free data retrieval call binding the contract method 0x39b70e38. // // Solidity: function strategyManager() view returns(address) @@ -1147,98 +1079,67 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) Strategy return _DelegationManagerStorage.Contract.StrategyWithdrawalDelayBlocks(&_DelegationManagerStorage.CallOpts, arg0) } -// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. -// -// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) StrategyWithdrawalDelays(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { - var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "strategyWithdrawalDelays", arg0) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. -// -// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageSession) StrategyWithdrawalDelays(arg0 common.Address) (*big.Int, error) { - return _DelegationManagerStorage.Contract.StrategyWithdrawalDelays(&_DelegationManagerStorage.CallOpts, arg0) -} - -// StrategyWithdrawalDelays is a free data retrieval call binding the contract method 0x50739be3. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. // -// Solidity: function strategyWithdrawalDelays(address ) view returns(uint256) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) StrategyWithdrawalDelays(arg0 common.Address) (*big.Int, error) { - return _DelegationManagerStorage.Contract.StrategyWithdrawalDelays(&_DelegationManagerStorage.CallOpts, arg0) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManagerStorage.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawal(&_DelegationManagerStorage.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawal(&_DelegationManagerStorage.TransactOpts, withdrawal, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawal(&_DelegationManagerStorage.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawal(&_DelegationManagerStorage.TransactOpts, withdrawal, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManagerStorage.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawals(&_DelegationManagerStorage.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawals(&_DelegationManagerStorage.TransactOpts, withdrawals, tokens, receiveAsTokens) -} - -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. -// -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawals(&_DelegationManagerStorage.TransactOpts, withdrawals, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.CompleteQueuedWithdrawals(&_DelegationManagerStorage.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, removedShares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, shares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.DecreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, removedShares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.DecreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, shares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.DecreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, removedShares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.DecreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, shares) } // DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. @@ -1283,46 +1184,25 @@ func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) Dele return _DelegationManagerStorage.Contract.DelegateToBySignature(&_DelegationManagerStorage.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. -// -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, existingShares, addedShares) -} - -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. -// -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.IncreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, existingShares, addedShares) -} - -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. -// -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.IncreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, existingShares, addedShares) -} - -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. // -// Solidity: function initializeAllocationDelay(uint32 delay) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactor) InitializeAllocationDelay(opts *bind.TransactOpts, delay uint32) (*types.Transaction, error) { - return _DelegationManagerStorage.contract.Transact(opts, "initializeAllocationDelay", delay) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, shares) } -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. // -// Solidity: function initializeAllocationDelay(uint32 delay) returns() -func (_DelegationManagerStorage *DelegationManagerStorageSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.InitializeAllocationDelay(&_DelegationManagerStorage.TransactOpts, delay) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.IncreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, shares) } -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. // -// Solidity: function initializeAllocationDelay(uint32 delay) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.InitializeAllocationDelay(&_DelegationManagerStorage.TransactOpts, delay) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.IncreaseDelegatedShares(&_DelegationManagerStorage.TransactOpts, staker, strategy, shares) } // ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. @@ -1367,25 +1247,25 @@ func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) Queu return _DelegationManagerStorage.Contract.QueueWithdrawals(&_DelegationManagerStorage.TransactOpts, queuedWithdrawalParams) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { - return _DelegationManagerStorage.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, allocationDelay, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _DelegationManagerStorage.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() -func (_DelegationManagerStorage *DelegationManagerStorageSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.RegisterAsOperator(&_DelegationManagerStorage.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_DelegationManagerStorage *DelegationManagerStorageSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.RegisterAsOperator(&_DelegationManagerStorage.TransactOpts, registeringOperatorDetails, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() -func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { - return _DelegationManagerStorage.Contract.RegisterAsOperator(&_DelegationManagerStorage.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_DelegationManagerStorage *DelegationManagerStorageTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _DelegationManagerStorage.Contract.RegisterAsOperator(&_DelegationManagerStorage.TransactOpts, registeringOperatorDetails, metadataURI) } // Undelegate is a paid mutator transaction binding the contract method 0xda8be864. @@ -2889,142 +2769,6 @@ func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseStrategy return event, nil } -// DelegationManagerStorageStrategyWithdrawalDelaySetIterator is returned from FilterStrategyWithdrawalDelaySet and is used to iterate over the raw logs and unpacked data for StrategyWithdrawalDelaySet events raised by the DelegationManagerStorage contract. -type DelegationManagerStorageStrategyWithdrawalDelaySetIterator struct { - Event *DelegationManagerStorageStrategyWithdrawalDelaySet // 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 *DelegationManagerStorageStrategyWithdrawalDelaySetIterator) 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(DelegationManagerStorageStrategyWithdrawalDelaySet) - 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(DelegationManagerStorageStrategyWithdrawalDelaySet) - 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 *DelegationManagerStorageStrategyWithdrawalDelaySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *DelegationManagerStorageStrategyWithdrawalDelaySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// DelegationManagerStorageStrategyWithdrawalDelaySet represents a StrategyWithdrawalDelaySet event raised by the DelegationManagerStorage contract. -type DelegationManagerStorageStrategyWithdrawalDelaySet struct { - Strategy common.Address - PreviousValue *big.Int - NewValue *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStrategyWithdrawalDelaySet is a free log retrieval operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. -// -// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) -func (_DelegationManagerStorage *DelegationManagerStorageFilterer) FilterStrategyWithdrawalDelaySet(opts *bind.FilterOpts) (*DelegationManagerStorageStrategyWithdrawalDelaySetIterator, error) { - - logs, sub, err := _DelegationManagerStorage.contract.FilterLogs(opts, "StrategyWithdrawalDelaySet") - if err != nil { - return nil, err - } - return &DelegationManagerStorageStrategyWithdrawalDelaySetIterator{contract: _DelegationManagerStorage.contract, event: "StrategyWithdrawalDelaySet", logs: logs, sub: sub}, nil -} - -// WatchStrategyWithdrawalDelaySet is a free log subscription operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. -// -// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) -func (_DelegationManagerStorage *DelegationManagerStorageFilterer) WatchStrategyWithdrawalDelaySet(opts *bind.WatchOpts, sink chan<- *DelegationManagerStorageStrategyWithdrawalDelaySet) (event.Subscription, error) { - - logs, sub, err := _DelegationManagerStorage.contract.WatchLogs(opts, "StrategyWithdrawalDelaySet") - 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(DelegationManagerStorageStrategyWithdrawalDelaySet) - if err := _DelegationManagerStorage.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", 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 -} - -// ParseStrategyWithdrawalDelaySet is a log parse operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. -// -// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) -func (_DelegationManagerStorage *DelegationManagerStorageFilterer) ParseStrategyWithdrawalDelaySet(log types.Log) (*DelegationManagerStorageStrategyWithdrawalDelaySet, error) { - event := new(DelegationManagerStorageStrategyWithdrawalDelaySet) - if err := _DelegationManagerStorage.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // DelegationManagerStorageWithdrawalCompletedIterator is returned from FilterWithdrawalCompleted and is used to iterate over the raw logs and unpacked data for WithdrawalCompleted events raised by the DelegationManagerStorage contract. type DelegationManagerStorageWithdrawalCompletedIterator struct { Event *DelegationManagerStorageWithdrawalCompleted // Event containing the contract specifics and raw log diff --git a/pkg/bindings/EIP1271SignatureUtils/binding.go b/pkg/bindings/EIP1271SignatureUtils/binding.go index d931a2b72..b854fe640 100644 --- a/pkg/bindings/EIP1271SignatureUtils/binding.go +++ b/pkg/bindings/EIP1271SignatureUtils/binding.go @@ -31,8 +31,8 @@ var ( // EIP1271SignatureUtilsMetaData contains all meta data concerning the EIP1271SignatureUtils contract. var EIP1271SignatureUtilsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"inputs\":[]}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122086f0e45761e8a933effdbcd0e9023709b61ae6a3fa6d56225e4ca34aba053bdb64736f6c634300081b0033", + ABI: "[{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEOA\",\"inputs\":[]}]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a27cdff4a9cf4e5da49114322ca7517a562e3d78193fe8b3dffb108e578d732664736f6c634300081b0033", } // EIP1271SignatureUtilsABI 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 5ff23a0da..32d0cd7a2 100644 --- a/pkg/bindings/EigenPod/binding.go +++ b/pkg/bindings/EigenPod/binding.go @@ -72,8 +72,8 @@ type IEigenPodValidatorInfo 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\":\"_GENESIS_TIME\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"GENESIS_TIME\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsWithdrawableRestakedExecutionLayerGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountMustBeMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncompletePreviousCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBlockRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorFieldsLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoints\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofLengthNotMultipleOf32\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofOlderThanLastCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExiting\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNoPendingActivation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawCredentialsNotForEigenPod\",\"inputs\":[]}]", - Bin: "0x60e060405234801561001057600080fd5b50604051613ce3380380613ce383398101604081905261002f91610137565b6001600160a01b03808416608052821660a0526001600160401b03811660c05261005761005f565b505050610190565b600054610100900460ff16156100cb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013457600080fd5b50565b60008060006060848603121561014c57600080fd5b83516101578161011f565b60208501519093506101688161011f565b60408501519092506001600160401b038116811461018557600080fd5b809150509250925092565b60805160a05160c051613ad761020c60003960006105ff0152600081816102bd0152818161063a015281816106e4015281816109af01528181610b7601528181610e5f01528181610f0801528181611146015281816114af015281816115e601526126a90152600081816104b80152610f710152613ad76000f3fe60806040526004361061016a5760003560e01c80636fcd0e53116100d1578063c49074421161008a578063dda3346c11610064578063dda3346c1461058d578063ee94d67c146105ad578063f074ba62146105cd578063f2882461146105ed57600080fd5b8063c49074421461052d578063c4d66de81461054d578063d06d55871461056d57600080fd5b80636fcd0e53146104425780637439841f1461046f57806374cdd798146104a657806388676cad146104da5780639b4e4634146104fa578063b522538a1461050d57600080fd5b80634665bcda116101235780634665bcda146102ab57806347d28372146102df57806352396a591461039f57806358753357146103d557806358eaee79146103f55780636c0d2d5a1461042257600080fd5b8063039157d2146101a95780630b18ff66146101cb5780632340e8d3146102085780633474aa161461022c5780633f65cf191461026457806342ecff2a1461028457600080fd5b366101a4576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101b557600080fd5b506101c96101c4366004612fd3565b610621565b005b3480156101d757600080fd5b506033546101eb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561021457600080fd5b5061021e60395481565b6040519081526020016101ff565b34801561023857600080fd5b5060345461024c906001600160401b031681565b6040516001600160401b0390911681526020016101ff565b34801561027057600080fd5b506101c961027f366004613095565b610956565b34801561029057600080fd5b50603a5461024c90600160401b90046001600160401b031681565b3480156102b757600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102eb57600080fd5b5061035b6040805160808101825260008082526020820181905291810182905260608101919091525060408051608081018252603c548152603d5462ffffff811660208301526001600160401b03630100000082041692820192909252600160581b909104600f0b606082015290565b6040516101ff91908151815260208083015162ffffff16908201526040808301516001600160401b031690820152606091820151600f0b9181019190915260800190565b3480156103ab57600080fd5b5061024c6103ba366004613173565b603b602052600090815260409020546001600160401b031681565b3480156103e157600080fd5b50603e546101eb906001600160a01b031681565b34801561040157600080fd5b506104156104103660046131cf565b610be0565b6040516101ff9190613248565b34801561042e57600080fd5b5061021e61043d366004613173565b610c45565b34801561044e57600080fd5b5061046261045d366004613256565b610d59565b6040516101ff919061326f565b34801561047b57600080fd5b5061041561048a366004613256565b600090815260366020526040902054600160c01b900460ff1690565b3480156104b257600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e657600080fd5b506101c96104f53660046132d1565b610e06565b6101c96105083660046132ee565b610efd565b34801561051957600080fd5b506104626105283660046131cf565b611048565b34801561053957600080fd5b506101c9610548366004613385565b61113b565b34801561055957600080fd5b506101c96105683660046133b1565b611287565b34801561057957600080fd5b506101c96105883660046133b1565b6113d7565b34801561059957600080fd5b506101c96105a83660046134a4565b61146b565b3480156105b957600080fd5b50603a5461024c906001600160401b031681565b3480156105d957600080fd5b506101c96105e836600461357d565b6115cd565b3480156105f957600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad91906135e9565b156106cb5760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610733573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075791906135e9565b156107755760405163840a48d560e01b815260040160405180910390fd5b60006107bb6107848580613606565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061199f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561082a5761082a613210565b600281111561083b5761083b613210565b81525050905080604001516001600160401b0316876001600160401b03161161087757604051630767e73160e41b815260040160405180910390fd5b60018160600151600281111561088f5761088f613210565b146108ad576040516353670afb60e11b815260040160405180910390fd5b6108f16108ba8680613606565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506119c392505050565b61090e576040516321b6a8f960e11b815260040160405180910390fd5b61092061091a88610c45565b876119ed565b610943863561092f8780613606565b61093c60208a018a61364f565b8651611a93565b61094d6000611bbe565b50505050505050565b6033546001600160a01b03163314806109795750603e546001600160a01b031633145b6109965760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2291906135e9565b15610a405760405163840a48d560e01b815260040160405180910390fd5b8584148015610a4e57508382145b610a6b576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610aa1576040516337e07ffd60e01b815260040160405180910390fd5b610ab3610aad8a610c45565b896119ed565b6000805b87811015610b4c57610b388a358a8a84818110610ad657610ad6613695565b9050602002016020810190610aeb91906136ab565b898985818110610afd57610afd613695565b9050602002810190610b0f919061364f565b898987818110610b2157610b21613695565b9050602002810190610b339190613606565b611d38565b610b4290836136e8565b9150600101610ab7565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b158015610bbc57600080fd5b505af1158015610bd0573d6000803e3d6000fd5b5050505050505050505050505050565b600080610c2284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121a792505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b6000610c54611fff600c6136fb565b610c676001600160401b03841642613712565b10610c8557604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201526000918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f1981840301815290829052610ccd91613749565b600060405180830381855afa9150503d8060008114610d08576040519150601f19603f3d011682016040523d82523d6000602084013e610d0d565b606091505b5091509150818015610d20575060008151115b610d3d5760405163e01c3f9560e01b815260040160405180910390fd5b80806020019051810190610d519190613765565b949350505050565b610d816040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610dec57610dec613210565b6002811115610dfd57610dfd613210565b90525092915050565b6033546001600160a01b0316331480610e295750603e546001600160a01b031633145b610e465760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed291906135e9565b15610ef05760405163840a48d560e01b815260040160405180910390fd5b610ef982611bbe565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f4657604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec80000014610f6f5760405163049696b360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787610fb261223c565b8888886040518863ffffffff1660e01b8152600401610fd6969594939291906137d3565b6000604051808303818588803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051611039929190613822565b60405180910390a15050505050565b6110706040805160808101825260008082526020820181905291810182905290606082015290565b603660006110b385858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121a792505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561112057611120613210565b600281111561113157611131613210565b9052509392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461118457604051633213a66160e21b815260040160405180910390fd5b611192633b9aca008261384c565b156111b0576040516321ddeb1760e21b815260040160405180910390fd5b60006111c0633b9aca0083613860565b6034549091506001600160401b0390811690821611156111f35760405163786be08d60e01b815260040160405180910390fd5b603480548291906000906112119084906001600160401b0316613874565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161127091815260200190565b60405180910390a26112828383612281565b505050565b600054610100900460ff16158080156112a75750600054600160ff909116105b806112c15750303b1580156112c1575060005460ff166001145b6113295760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561134c576000805461ff0019166101001790555b6001600160a01b038216611373576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0384161790558015610ef9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b031633146114025760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146114965760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156114fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152291906135e9565b156115405760405163840a48d560e01b815260040160405180910390fd5b8251845114611562576040516343714afd60e01b815260040160405180910390fd5b60005b84518110156115c6576115be8385838151811061158457611584613695565b602002602001015187848151811061159e5761159e613695565b60200260200101516001600160a01b031661239a9092919063ffffffff16565b600101611565565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165991906135e9565b156116775760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b031660008190036116ab57604051620e680d60e11b815260040160405180910390fd5b60408051608081018252603c54808252603d5462ffffff811660208401526001600160401b03630100000082041693830193909352600160581b909204600f0b6060820152906116fb90876123ec565b6000805b85811015611945573687878381811061171a5761171a613695565b905060200281019061172c9190613893565b80356000908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561179d5761179d613210565b60028111156117ae576117ae613210565b90525090506001816060015160028111156117cb576117cb613210565b146117d757505061193d565b856001600160401b031681604001516001600160401b0316106117fb57505061193d565b60008061180b83898e358761249e565b602089018051929450909250611820826138a9565b62ffffff1690525060608701805183919061183c9083906138c8565b600f0b90525061184c81876138f5565b84356000908152603660209081526040918290208651815492880151938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060870151939950869390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156118f1576118f1613210565b021790555050835160405164ffffffffff90911691506001600160401b038a16907fa91c59033c3423e18b54d0acecebb4972f9ea95aedf5f4cae3b677b02eaf3a3f90600090a3505050505b6001016116ff565b506001600160401b038084166000908152603b6020526040812080548493919291611972918591166138f5565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061094d826125c3565b6000816000815181106119b4576119b4613695565b60200260200101519050919050565b6000816003815181106119d8576119d8613695565b60200260200101516000801b14159050919050565b6119f9600360206136fb565b611a06602083018361364f565b905014611a26576040516313717da960e21b815260040160405180910390fd5b611a76611a36602083018361364f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250508435905060036127cd565b610ef9576040516309bde33960e01b815260040160405180910390fd5b60088414611ab45760405163200591bd60e01b815260040160405180910390fd5b6005611ac2602860016136e8565b611acc91906136e8565b611ad79060206136fb565b8214611af6576040516313717da960e21b815260040160405180910390fd5b6000611b348686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127e592505050565b9050600064ffffffffff8316611b4c602860016136e8565b600b901b179050611b9785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508691508590506127cd565b611bb4576040516309bde33960e01b815260040160405180910390fd5b5050505050505050565b603a54600160401b90046001600160401b031615611bef57604051630e2d94e160e31b815260040160405180910390fd5b603a546001600160401b03428116911603611c1d576040516367db5b8b60e01b815260040160405180910390fd5b6034546000906001600160401b0316611c3a633b9aca0047613860565b611c449190613874565b9050818015611c5a57506001600160401b038116155b15611c78576040516332dea95960e21b815260040160405180910390fd5b60006040518060800160405280611c8e42610c45565b815260200160395462ffffff168152602001836001600160401b031681526020016000600f0b815250905042603a60086101000a8154816001600160401b0302191690836001600160401b03160217905550611ce9816125c3565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b600080611d7784848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061199f92505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611de657611de6613210565b6002811115611df757611df7613210565b9052509050600081606001516002811115611e1457611e14613210565b14611e32576040516343f8f5e960e01b815260040160405180910390fd5b6001600160401b038016611e78868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7e92505050565b6001600160401b031603611e9f5760405163ab42cfd960e01b815260040160405180910390fd5b6001600160401b038016611ee5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612aa392505050565b6001600160401b031614611f0c5760405163b64ec9a760e01b815260040160405180910390fd5b611f1461223c565b611f1d90613914565b611f59868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612abb92505050565b14611f7757604051632230566760e11b815260040160405180910390fd5b6000611fb5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612ad092505050565b9050611fc58a87878b8b8e611a93565b60398054906000611fd583613938565b9091555050603a54600090600160401b90046001600160401b03161561200d57603a54600160401b90046001600160401b031661201a565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190526000858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156120f0576120f0613210565b02179055505060405164ffffffffff8c1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a16040805164ffffffffff8c1681526001600160401b03838116602083015284168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a1612198633b9aca006001600160401b0384166136fb565b9b9a5050505050505050505050565b600081516030146121cb576040516350b541b960e11b815260040160405180910390fd5b6040516002906121e2908490600090602001613951565b60408051601f19818403018152908290526121fc91613749565b602060405180830381855afa158015612219573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c3f9190613765565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b804710156122d15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611320565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b50509050806112825760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611320565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611282908490612ae8565b6123f8600560036136e8565b6124039060206136fb565b612410602083018361364f565b905014612430576040516313717da960e21b815260040160405180910390fd5b606c612481612442602084018461364f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792505085359050846127cd565b611282576040516309bde33960e01b815260040160405180910390fd5b835160208501516000918291826124b6878488612bba565b9050816001600160401b0316816001600160401b031614612530576124db8183612c9d565b6040805164ffffffffff861681526001600160401b038b8116602083015284168183015290519196507f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df919081900360600190a15b6001600160401b0380821660208b0181905290891660408b01526000036125b7576039805490600061256183613980565b9091555050600260608a015261257685613997565b93508264ffffffffff16886001600160401b03167f2a02361ffa66cf2c2da4682c2355a6adcaa9f6c227b6e6563e68480f9587626a60405160405180910390a35b50505094509492505050565b806020015162ffffff1660000361274d576000633b9aca00826060015183604001516001600160401b03166125f891906138c8565b600f0b61260591906139bd565b604083015160348054929350909160009061262a9084906001600160401b03166138f5565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b81049092166001600160801b0319909216919091179055506000603c55603d80546001600160d81b031916905560335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b1580156126ef57600080fd5b505af1158015612703573d6000803e3d6000fd5b5050603a546040518481526001600160401b0390911692507f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e44915060200160405180910390a25050565b8051603c556020810151603d8054604084015160608501516fffffffffffffffffffffffffffffffff16600160581b026fffffffffffffffffffffffffffffffff60581b196001600160401b039092166301000000026affffffffffffffffffffff1990931662ffffff9095169490941791909117169190911790555b50565b6000836127db868585612cb5565b1495945050505050565b600080600283516127f69190613860565b90506000816001600160401b03811115612812576128126133ce565b60405190808252806020026020018201604052801561283b578160200160208202803683370190505b50905060005b828110156129385760028561285683836136fb565b8151811061286657612866613695565b60200260200101518683600261287c91906136fb565b6128879060016136e8565b8151811061289757612897613695565b60200260200101516040516020016128b9929190918252602082015260400190565b60408051601f19818403018152908290526128d391613749565b602060405180830381855afa1580156128f0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906129139190613765565b82828151811061292557612925613695565b6020908102919091010152600101612841565b50612944600283613860565b91505b8115612a5a5760005b82811015612a475760028261296583836136fb565b8151811061297557612975613695565b60200260200101518383600261298b91906136fb565b6129969060016136e8565b815181106129a6576129a6613695565b60200260200101516040516020016129c8929190918252602082015260400190565b60408051601f19818403018152908290526129e291613749565b602060405180830381855afa1580156129ff573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612a229190613765565b828281518110612a3457612a34613695565b6020908102919091010152600101612950565b50612a53600283613860565b9150612947565b80600081518110612a6d57612a6d613695565b602002602001015192505050919050565b6000610c3f82600581518110612a9657612a96613695565b6020026020010151612d92565b6000610c3f82600681518110612a9657612a96613695565b6000816001815181106119b4576119b4613695565b6000610c3f82600281518110612a9657612a96613695565b6000612b3d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612df99092919063ffffffff16565b8051909150156112825780806020019051810190612b5b91906135e9565b6112825760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611320565b6000612bc8602660016136e8565b612bd39060206136fb565b612be0604084018461364f565b905014612c00576040516313717da960e21b815260040160405180910390fd5b6000612c0d6004856139ed565b64ffffffffff169050612c67612c26604085018561364f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050506020860135846127cd565b612c84576040516309bde33960e01b815260040160405180910390fd5b612c92836020013585612e08565b9150505b9392505050565b6000612c966001600160401b03808416908516613a17565b60008351600014158015612cd4575060208451612cd2919061384c565b155b612cf157604051630228be0560e31b815260040160405180910390fd5b604080516020808201909252848152905b85518111612d8857612d1560028561384c565b600003612d4b578151600052808601516020526020826040600060026107d05a03fa612d4057600080fd5b600284049350612d76565b8086015160005281516020526020826040600060026107d05a03fa612d6f57600080fd5b6002840493505b612d816020826136e8565b9050612d02565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6060610d518484600085612e35565b600080612e16600484613a44565b612e21906040613a6e565b64ffffffffff169050610d5184821b612d92565b606082471015612e965760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611320565b6001600160a01b0385163b612eed5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611320565b600080866001600160a01b03168587604051612f099190613749565b60006040518083038185875af1925050503d8060008114612f46576040519150601f19603f3d011682016040523d82523d6000602084013e612f4b565b606091505b5091509150612f5b828286612f66565b979650505050505050565b60608315612f75575081612c96565b825115612f855782518084602001fd5b8160405162461bcd60e51b81526004016113209190613a8e565b80356001600160401b0381168114612fb657600080fd5b919050565b600060408284031215612fcd57600080fd5b50919050565b600080600060608486031215612fe857600080fd5b612ff184612f9f565b925060208401356001600160401b0381111561300c57600080fd5b61301886828701612fbb565b92505060408401356001600160401b0381111561303457600080fd5b61304086828701612fbb565b9150509250925092565b60008083601f84011261305c57600080fd5b5081356001600160401b0381111561307357600080fd5b6020830191508360208260051b850101111561308e57600080fd5b9250929050565b60008060008060008060008060a0898b0312156130b157600080fd5b6130ba89612f9f565b975060208901356001600160401b038111156130d557600080fd5b6130e18b828c01612fbb565b97505060408901356001600160401b038111156130fd57600080fd5b6131098b828c0161304a565b90975095505060608901356001600160401b0381111561312857600080fd5b6131348b828c0161304a565b90955093505060808901356001600160401b0381111561315357600080fd5b61315f8b828c0161304a565b999c989b5096995094979396929594505050565b60006020828403121561318557600080fd5b612c9682612f9f565b60008083601f8401126131a057600080fd5b5081356001600160401b038111156131b757600080fd5b60208301915083602082850101111561308e57600080fd5b600080602083850312156131e257600080fd5b82356001600160401b038111156131f857600080fd5b6132048582860161318e565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b6003811061324457634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c3f8284613226565b60006020828403121561326857600080fd5b5035919050565b60006080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b03604084015116604083015260608301516132bc6060840182613226565b5092915050565b80151581146127ca57600080fd5b6000602082840312156132e357600080fd5b8135612c96816132c3565b60008060008060006060868803121561330657600080fd5b85356001600160401b0381111561331c57600080fd5b6133288882890161318e565b90965094505060208601356001600160401b0381111561334757600080fd5b6133538882890161318e565b96999598509660400135949350505050565b6001600160a01b03811681146127ca57600080fd5b8035612fb681613365565b6000806040838503121561339857600080fd5b82356133a381613365565b946020939093013593505050565b6000602082840312156133c357600080fd5b8135612c9681613365565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561340c5761340c6133ce565b604052919050565b60006001600160401b0382111561342d5761342d6133ce565b5060051b60200190565b600082601f83011261344857600080fd5b813561345b61345682613414565b6133e4565b8082825260208201915060208360051b86010192508583111561347d57600080fd5b602085015b8381101561349a578035835260209283019201613482565b5095945050505050565b6000806000606084860312156134b957600080fd5b83356001600160401b038111156134cf57600080fd5b8401601f810186136134e057600080fd5b80356134ee61345682613414565b8082825260208201915060208360051b85010192508883111561351057600080fd5b6020840193505b8284101561353b57833561352a81613365565b825260209384019390910190613517565b955050505060208401356001600160401b0381111561355957600080fd5b61356586828701613437565b9250506135746040850161337a565b90509250925092565b60008060006040848603121561359257600080fd5b83356001600160401b038111156135a857600080fd5b6135b486828701612fbb565b93505060208401356001600160401b038111156135d057600080fd5b6135dc8682870161304a565b9497909650939450505050565b6000602082840312156135fb57600080fd5b8151612c96816132c3565b6000808335601e1984360301811261361d57600080fd5b8301803591506001600160401b0382111561363757600080fd5b6020019150600581901b360382131561308e57600080fd5b6000808335601e1984360301811261366657600080fd5b8301803591506001600160401b0382111561368057600080fd5b60200191503681900382131561308e57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156136bd57600080fd5b813564ffffffffff81168114612c9657600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610c3f57610c3f6136d2565b8082028115828204841417610c3f57610c3f6136d2565b81810381811115610c3f57610c3f6136d2565b60005b83811015613740578181015183820152602001613728565b50506000910152565b6000825161375b818460208701613725565b9190910192915050565b60006020828403121561377757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526137bf816020860160208601613725565b601f01601f19169290920160200192915050565b6080815260006137e760808301888a61377e565b82810360208401526137f981886137a7565b9050828103604084015261380e81868861377e565b915050826060830152979650505050505050565b602081526000610d5160208301848661377e565b634e487b7160e01b600052601260045260246000fd5b60008261385b5761385b613836565b500690565b60008261386f5761386f613836565b500490565b6001600160401b038281168282160390811115610c3f57610c3f6136d2565b60008235605e1983360301811261375b57600080fd5b600062ffffff8216806138be576138be6136d2565b6000190192915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715610c3f57610c3f6136d2565b6001600160401b038181168382160190811115610c3f57610c3f6136d2565b80516020808301519190811015612fcd5760001960209190910360031b1b16919050565b60006001820161394a5761394a6136d2565b5060010190565b60008351613963818460208801613725565b6001600160801b0319939093169190920190815260100192915050565b60008161398f5761398f6136d2565b506000190190565b600081600f0b60016001607f1b031981036139b4576139b46136d2565b60000392915050565b80820260008212600160ff1b841416156139d9576139d96136d2565b8181058314821517610c3f57610c3f6136d2565b600064ffffffffff831680613a0457613a04613836565b8064ffffffffff84160491505092915050565b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610c3f57610c3f6136d2565b600064ffffffffff831680613a5b57613a5b613836565b8064ffffffffff84160691505092915050565b64ffffffffff81811683821602908116908181146132bc576132bc6136d2565b602081526000612c9660208301846137a756fea2646970667358221220b4610270d194abb013c8f07f39c7cb97be61bfeacd17e2dcdd4b12d850abfef064736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_GENESIS_TIME\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"GENESIS_TIME\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountMustBeMultipleOfGwei\",\"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\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientWithdrawableBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEIP4788Response\",\"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\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorInactiveOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExitingBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActiveInPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashedOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawCredentialsNotForEigenPod\",\"inputs\":[]}]", + Bin: "0x60e060405234801561001057600080fd5b50604051613ce3380380613ce383398101604081905261002f91610137565b6001600160a01b03808416608052821660a0526001600160401b03811660c05261005761005f565b505050610190565b600054610100900460ff16156100cb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013457600080fd5b50565b60008060006060848603121561014c57600080fd5b83516101578161011f565b60208501519093506101688161011f565b60408501519092506001600160401b038116811461018557600080fd5b809150509250925092565b60805160a05160c051613ad761020c60003960006105ff0152600081816102bd0152818161063a015281816106e4015281816109af01528181610b7601528181610e5f01528181610f0801528181611146015281816114af015281816115e601526126a90152600081816104b80152610f710152613ad76000f3fe60806040526004361061016a5760003560e01c80636fcd0e53116100d1578063c49074421161008a578063dda3346c11610064578063dda3346c1461058d578063ee94d67c146105ad578063f074ba62146105cd578063f2882461146105ed57600080fd5b8063c49074421461052d578063c4d66de81461054d578063d06d55871461056d57600080fd5b80636fcd0e53146104425780637439841f1461046f57806374cdd798146104a657806388676cad146104da5780639b4e4634146104fa578063b522538a1461050d57600080fd5b80634665bcda116101235780634665bcda146102ab57806347d28372146102df57806352396a591461039f57806358753357146103d557806358eaee79146103f55780636c0d2d5a1461042257600080fd5b8063039157d2146101a95780630b18ff66146101cb5780632340e8d3146102085780633474aa161461022c5780633f65cf191461026457806342ecff2a1461028457600080fd5b366101a4576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b600080fd5b3480156101b557600080fd5b506101c96101c4366004612fd3565b610621565b005b3480156101d757600080fd5b506033546101eb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561021457600080fd5b5061021e60395481565b6040519081526020016101ff565b34801561023857600080fd5b5060345461024c906001600160401b031681565b6040516001600160401b0390911681526020016101ff565b34801561027057600080fd5b506101c961027f366004613095565b610956565b34801561029057600080fd5b50603a5461024c90600160401b90046001600160401b031681565b3480156102b757600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102eb57600080fd5b5061035b6040805160808101825260008082526020820181905291810182905260608101919091525060408051608081018252603c548152603d5462ffffff811660208301526001600160401b03630100000082041692820192909252600160581b909104600f0b606082015290565b6040516101ff91908151815260208083015162ffffff16908201526040808301516001600160401b031690820152606091820151600f0b9181019190915260800190565b3480156103ab57600080fd5b5061024c6103ba366004613173565b603b602052600090815260409020546001600160401b031681565b3480156103e157600080fd5b50603e546101eb906001600160a01b031681565b34801561040157600080fd5b506104156104103660046131cf565b610be0565b6040516101ff9190613248565b34801561042e57600080fd5b5061021e61043d366004613173565b610c45565b34801561044e57600080fd5b5061046261045d366004613256565b610d59565b6040516101ff919061326f565b34801561047b57600080fd5b5061041561048a366004613256565b600090815260366020526040902054600160c01b900460ff1690565b3480156104b257600080fd5b506101eb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e657600080fd5b506101c96104f53660046132d1565b610e06565b6101c96105083660046132ee565b610efd565b34801561051957600080fd5b506104626105283660046131cf565b611048565b34801561053957600080fd5b506101c9610548366004613385565b61113b565b34801561055957600080fd5b506101c96105683660046133b1565b611287565b34801561057957600080fd5b506101c96105883660046133b1565b6113d7565b34801561059957600080fd5b506101c96105a83660046134a4565b61146b565b3480156105b957600080fd5b50603a5461024c906001600160401b031681565b3480156105d957600080fd5b506101c96105e836600461357d565b6115cd565b3480156105f957600080fd5b5061024c7f000000000000000000000000000000000000000000000000000000000000000081565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad91906135e9565b156106cb5760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610733573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075791906135e9565b156107755760405163840a48d560e01b815260040160405180910390fd5b60006107bb6107848580613606565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506119a092505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561082a5761082a613210565b600281111561083b5761083b613210565b81525050905080604001516001600160401b0316876001600160401b031611610877576040516337e07ffd60e01b815260040160405180910390fd5b60018160600151600281111561088f5761088f613210565b146108ad5760405163d49e19a760e01b815260040160405180910390fd5b6108f16108ba8680613606565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506119c492505050565b61090e5760405163161ce5ed60e31b815260040160405180910390fd5b61092061091a88610c45565b876119ee565b610943863561092f8780613606565b61093c60208a018a61364f565b8651611a94565b61094d6000611bbf565b50505050505050565b6033546001600160a01b03163314806109795750603e546001600160a01b031633145b61099657604051635c427cd960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2291906135e9565b15610a405760405163840a48d560e01b815260040160405180910390fd5b8584148015610a4e57508382145b610a6b576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610aa1576040516337e07ffd60e01b815260040160405180910390fd5b610ab3610aad8a610c45565b896119ee565b6000805b87811015610b4c57610b388a358a8a84818110610ad657610ad6613695565b9050602002016020810190610aeb91906136ab565b898985818110610afd57610afd613695565b9050602002810190610b0f919061364f565b898987818110610b2157610b21613695565b9050602002810190610b339190613606565b611d38565b610b4290836136e8565b9150600101610ab7565b5060335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b158015610bbc57600080fd5b505af1158015610bd0573d6000803e3d6000fd5b5050505050505050505050505050565b600080610c2284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121a792505050565b600090815260366020526040902054600160c01b900460ff169150505b92915050565b6000610c54611fff600c6136fb565b610c676001600160401b03841642613712565b10610c8557604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201526000918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f1981840301815290829052610ccd91613749565b600060405180830381855afa9150503d8060008114610d08576040519150601f19603f3d011682016040523d82523d6000602084013e610d0d565b606091505b5091509150818015610d20575060008151115b610d3d5760405163558ad0a360e01b815260040160405180910390fd5b80806020019051810190610d519190613765565b949350505050565b610d816040805160808101825260008082526020820181905291810182905290606082015290565b600082815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff166002811115610dec57610dec613210565b6002811115610dfd57610dfd613210565b90525092915050565b6033546001600160a01b0316331480610e295750603e546001600160a01b031633145b610e4657604051635c427cd960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed291906135e9565b15610ef05760405163840a48d560e01b815260040160405180910390fd5b610ef982611bbf565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f4657604051635c427cd960e01b815260040160405180910390fd5b346801bc16d674ec80000014610f6f5760405163049696b360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787610fb261223c565b8888886040518863ffffffff1660e01b8152600401610fd6969594939291906137d3565b6000604051808303818588803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b50505050507f606865b7934a25d4aed43f6cdb426403353fa4b3009c4d228407474581b01e238585604051611039929190613822565b60405180910390a15050505050565b6110706040805160808101825260008082526020820181905291810182905290606082015290565b603660006110b385858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121a792505050565b81526020808201929092526040908101600020815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561112057611120613210565b600281111561113157611131613210565b9052509392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461118457604051635c427cd960e01b815260040160405180910390fd5b611192633b9aca008261384c565b156111b0576040516321ddeb1760e21b815260040160405180910390fd5b60006111c0633b9aca0083613860565b6034549091506001600160401b0390811690821611156111f3576040516302c6f54760e21b815260040160405180910390fd5b603480548291906000906112119084906001600160401b0316613874565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e8360405161127091815260200190565b60405180910390a26112828383612281565b505050565b600054610100900460ff16158080156112a75750600054600160ff909116105b806112c15750303b1580156112c1575060005460ff166001145b6113295760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561134c576000805461ff0019166101001790555b6001600160a01b038216611373576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0384161790558015610ef9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b0316331461140257604051635c427cd960e01b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b0316331461149657604051635c427cd960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156114fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152291906135e9565b156115405760405163840a48d560e01b815260040160405180910390fd5b8251845114611562576040516343714afd60e01b815260040160405180910390fd5b60005b84518110156115c6576115be8385838151811061158457611584613695565b602002602001015187848151811061159e5761159e613695565b60200260200101516001600160a01b031661239a9092919063ffffffff16565b600101611565565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165991906135e9565b156116775760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b031660008190036116ac57604051631a544f4960e01b815260040160405180910390fd5b60408051608081018252603c54808252603d5462ffffff811660208401526001600160401b03630100000082041693830193909352600160581b909204600f0b6060820152906116fc90876123ec565b6000805b85811015611946573687878381811061171b5761171b613695565b905060200281019061172d9190613893565b80356000908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561179e5761179e613210565b60028111156117af576117af613210565b90525090506001816060015160028111156117cc576117cc613210565b146117d857505061193e565b856001600160401b031681604001516001600160401b0316106117fc57505061193e565b60008061180c83898e358761249e565b602089018051929450909250611821826138a9565b62ffffff1690525060608701805183919061183d9083906138c8565b600f0b90525061184d81876138f5565b84356000908152603660209081526040918290208651815492880151938801516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060870151939950869390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156118f2576118f2613210565b021790555050835160405164ffffffffff90911691506001600160401b038a16907fa91c59033c3423e18b54d0acecebb4972f9ea95aedf5f4cae3b677b02eaf3a3f90600090a3505050505b600101611700565b506001600160401b038084166000908152603b6020526040812080548493919291611973918591166138f5565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061094d826125c3565b6000816000815181106119b5576119b5613695565b60200260200101519050919050565b6000816003815181106119d9576119d9613695565b60200260200101516000801b14159050919050565b6119fa600360206136fb565b611a07602083018361364f565b905014611a27576040516313717da960e21b815260040160405180910390fd5b611a77611a37602083018361364f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250508435905060036127cd565b610ef9576040516309bde33960e01b815260040160405180910390fd5b60088414611ab55760405163200591bd60e01b815260040160405180910390fd5b6005611ac3602860016136e8565b611acd91906136e8565b611ad89060206136fb565b8214611af7576040516313717da960e21b815260040160405180910390fd5b6000611b358686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506127e592505050565b9050600064ffffffffff8316611b4d602860016136e8565b600b901b179050611b9885858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508691508590506127cd565b611bb5576040516309bde33960e01b815260040160405180910390fd5b5050505050505050565b603a54600160401b90046001600160401b031615611bef5760405162be9bc360e81b815260040160405180910390fd5b603a546001600160401b03428116911603611c1d576040516367db5b8b60e01b815260040160405180910390fd5b6034546000906001600160401b0316611c3a633b9aca0047613860565b611c449190613874565b9050818015611c5a57506001600160401b038116155b15611c78576040516332dea95960e21b815260040160405180910390fd5b60006040518060800160405280611c8e42610c45565b815260200160395462ffffff168152602001836001600160401b031681526020016000600f0b815250905042603a60086101000a8154816001600160401b0302191690836001600160401b03160217905550611ce9816125c3565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b600080611d778484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506119a092505050565b6000818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611de657611de6613210565b6002811115611df757611df7613210565b9052509050600081606001516002811115611e1457611e14613210565b14611e32576040516335e09e9d60e01b815260040160405180910390fd5b6001600160401b038016611e78868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a7e92505050565b6001600160401b031603611e9f57604051631958236d60e21b815260040160405180910390fd5b6001600160401b038016611ee5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612aa392505050565b6001600160401b031614611f0c57604051632eade63760e01b815260040160405180910390fd5b611f1461223c565b611f1d90613914565b611f59868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612abb92505050565b14611f7757604051632230566760e11b815260040160405180910390fd5b6000611fb5868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612ad092505050565b9050611fc58a87878b8b8e611a94565b60398054906000611fd583613938565b9091555050603a54600090600160401b90046001600160401b03161561200d57603a54600160401b90046001600160401b031661201a565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190526000858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156120f0576120f0613210565b02179055505060405164ffffffffff8c1681527f2d0800bbc377ea54a08c5db6a87aafff5e3e9c8fead0eda110e40e0c10441449915060200160405180910390a16040805164ffffffffff8c1681526001600160401b03838116602083015284168183015290517f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df9181900360600190a1612198633b9aca006001600160401b0384166136fb565b9b9a5050505050505050505050565b600081516030146121cb57604051634f88323960e11b815260040160405180910390fd5b6040516002906121e2908490600090602001613951565b60408051601f19818403018152908290526121fc91613749565b602060405180830381855afa158015612219573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610c3f9190613765565b60408051600160f81b60208201526000602182015230606090811b6bffffffffffffffffffffffff1916602c8301529101604051602081830303815290604052905090565b804710156122d15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611320565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b50509050806112825760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611320565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611282908490612ae8565b6123f8600560036136e8565b6124039060206136fb565b612410602083018361364f565b905014612430576040516313717da960e21b815260040160405180910390fd5b606c612481612442602084018461364f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792505085359050846127cd565b611282576040516309bde33960e01b815260040160405180910390fd5b835160208501516000918291826124b6878488612bba565b9050816001600160401b0316816001600160401b031614612530576124db8183612c9d565b6040805164ffffffffff861681526001600160401b038b8116602083015284168183015290519196507f0e5fac175b83177cc047381e030d8fb3b42b37bd1c025e22c280facad62c32df919081900360600190a15b6001600160401b0380821660208b0181905290891660408b01526000036125b7576039805490600061256183613980565b9091555050600260608a015261257685613997565b93508264ffffffffff16886001600160401b03167f2a02361ffa66cf2c2da4682c2355a6adcaa9f6c227b6e6563e68480f9587626a60405160405180910390a35b50505094509492505050565b806020015162ffffff1660000361274d576000633b9aca00826060015183604001516001600160401b03166125f891906138c8565b600f0b61260591906139bd565b604083015160348054929350909160009061262a9084906001600160401b03166138f5565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b81049092166001600160801b0319909216919091179055506000603c55603d80546001600160d81b031916905560335460405163030b147160e61b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063c2c51c4090604401600060405180830381600087803b1580156126ef57600080fd5b505af1158015612703573d6000803e3d6000fd5b5050603a546040518481526001600160401b0390911692507f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e44915060200160405180910390a25050565b8051603c556020810151603d8054604084015160608501516fffffffffffffffffffffffffffffffff16600160581b026fffffffffffffffffffffffffffffffff60581b196001600160401b039092166301000000026affffffffffffffffffffff1990931662ffffff9095169490941791909117169190911790555b50565b6000836127db868585612cb5565b1495945050505050565b600080600283516127f69190613860565b90506000816001600160401b03811115612812576128126133ce565b60405190808252806020026020018201604052801561283b578160200160208202803683370190505b50905060005b828110156129385760028561285683836136fb565b8151811061286657612866613695565b60200260200101518683600261287c91906136fb565b6128879060016136e8565b8151811061289757612897613695565b60200260200101516040516020016128b9929190918252602082015260400190565b60408051601f19818403018152908290526128d391613749565b602060405180830381855afa1580156128f0573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906129139190613765565b82828151811061292557612925613695565b6020908102919091010152600101612841565b50612944600283613860565b91505b8115612a5a5760005b82811015612a475760028261296583836136fb565b8151811061297557612975613695565b60200260200101518383600261298b91906136fb565b6129969060016136e8565b815181106129a6576129a6613695565b60200260200101516040516020016129c8929190918252602082015260400190565b60408051601f19818403018152908290526129e291613749565b602060405180830381855afa1580156129ff573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612a229190613765565b828281518110612a3457612a34613695565b6020908102919091010152600101612950565b50612a53600283613860565b9150612947565b80600081518110612a6d57612a6d613695565b602002602001015192505050919050565b6000610c3f82600581518110612a9657612a96613695565b6020026020010151612d92565b6000610c3f82600681518110612a9657612a96613695565b6000816001815181106119b5576119b5613695565b6000610c3f82600281518110612a9657612a96613695565b6000612b3d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612df99092919063ffffffff16565b8051909150156112825780806020019051810190612b5b91906135e9565b6112825760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611320565b6000612bc8602660016136e8565b612bd39060206136fb565b612be0604084018461364f565b905014612c00576040516313717da960e21b815260040160405180910390fd5b6000612c0d6004856139ed565b64ffffffffff169050612c67612c26604085018561364f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050506020860135846127cd565b612c84576040516309bde33960e01b815260040160405180910390fd5b612c92836020013585612e08565b9150505b9392505050565b6000612c966001600160401b03808416908516613a17565b60008351600014158015612cd4575060208451612cd2919061384c565b155b612cf1576040516313717da960e21b815260040160405180910390fd5b604080516020808201909252848152905b85518111612d8857612d1560028561384c565b600003612d4b578151600052808601516020526020826040600060026107d05a03fa612d4057600080fd5b600284049350612d76565b8086015160005281516020526020826040600060026107d05a03fa612d6f57600080fd5b6002840493505b612d816020826136e8565b9050612d02565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b6060610d518484600085612e35565b600080612e16600484613a44565b612e21906040613a6e565b64ffffffffff169050610d5184821b612d92565b606082471015612e965760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611320565b6001600160a01b0385163b612eed5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611320565b600080866001600160a01b03168587604051612f099190613749565b60006040518083038185875af1925050503d8060008114612f46576040519150601f19603f3d011682016040523d82523d6000602084013e612f4b565b606091505b5091509150612f5b828286612f66565b979650505050505050565b60608315612f75575081612c96565b825115612f855782518084602001fd5b8160405162461bcd60e51b81526004016113209190613a8e565b80356001600160401b0381168114612fb657600080fd5b919050565b600060408284031215612fcd57600080fd5b50919050565b600080600060608486031215612fe857600080fd5b612ff184612f9f565b925060208401356001600160401b0381111561300c57600080fd5b61301886828701612fbb565b92505060408401356001600160401b0381111561303457600080fd5b61304086828701612fbb565b9150509250925092565b60008083601f84011261305c57600080fd5b5081356001600160401b0381111561307357600080fd5b6020830191508360208260051b850101111561308e57600080fd5b9250929050565b60008060008060008060008060a0898b0312156130b157600080fd5b6130ba89612f9f565b975060208901356001600160401b038111156130d557600080fd5b6130e18b828c01612fbb565b97505060408901356001600160401b038111156130fd57600080fd5b6131098b828c0161304a565b90975095505060608901356001600160401b0381111561312857600080fd5b6131348b828c0161304a565b90955093505060808901356001600160401b0381111561315357600080fd5b61315f8b828c0161304a565b999c989b5096995094979396929594505050565b60006020828403121561318557600080fd5b612c9682612f9f565b60008083601f8401126131a057600080fd5b5081356001600160401b038111156131b757600080fd5b60208301915083602082850101111561308e57600080fd5b600080602083850312156131e257600080fd5b82356001600160401b038111156131f857600080fd5b6132048582860161318e565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b6003811061324457634e487b7160e01b600052602160045260246000fd5b9052565b60208101610c3f8284613226565b60006020828403121561326857600080fd5b5035919050565b60006080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b03604084015116604083015260608301516132bc6060840182613226565b5092915050565b80151581146127ca57600080fd5b6000602082840312156132e357600080fd5b8135612c96816132c3565b60008060008060006060868803121561330657600080fd5b85356001600160401b0381111561331c57600080fd5b6133288882890161318e565b90965094505060208601356001600160401b0381111561334757600080fd5b6133538882890161318e565b96999598509660400135949350505050565b6001600160a01b03811681146127ca57600080fd5b8035612fb681613365565b6000806040838503121561339857600080fd5b82356133a381613365565b946020939093013593505050565b6000602082840312156133c357600080fd5b8135612c9681613365565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561340c5761340c6133ce565b604052919050565b60006001600160401b0382111561342d5761342d6133ce565b5060051b60200190565b600082601f83011261344857600080fd5b813561345b61345682613414565b6133e4565b8082825260208201915060208360051b86010192508583111561347d57600080fd5b602085015b8381101561349a578035835260209283019201613482565b5095945050505050565b6000806000606084860312156134b957600080fd5b83356001600160401b038111156134cf57600080fd5b8401601f810186136134e057600080fd5b80356134ee61345682613414565b8082825260208201915060208360051b85010192508883111561351057600080fd5b6020840193505b8284101561353b57833561352a81613365565b825260209384019390910190613517565b955050505060208401356001600160401b0381111561355957600080fd5b61356586828701613437565b9250506135746040850161337a565b90509250925092565b60008060006040848603121561359257600080fd5b83356001600160401b038111156135a857600080fd5b6135b486828701612fbb565b93505060208401356001600160401b038111156135d057600080fd5b6135dc8682870161304a565b9497909650939450505050565b6000602082840312156135fb57600080fd5b8151612c96816132c3565b6000808335601e1984360301811261361d57600080fd5b8301803591506001600160401b0382111561363757600080fd5b6020019150600581901b360382131561308e57600080fd5b6000808335601e1984360301811261366657600080fd5b8301803591506001600160401b0382111561368057600080fd5b60200191503681900382131561308e57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156136bd57600080fd5b813564ffffffffff81168114612c9657600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610c3f57610c3f6136d2565b8082028115828204841417610c3f57610c3f6136d2565b81810381811115610c3f57610c3f6136d2565b60005b83811015613740578181015183820152602001613728565b50506000910152565b6000825161375b818460208701613725565b9190910192915050565b60006020828403121561377757600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526137bf816020860160208601613725565b601f01601f19169290920160200192915050565b6080815260006137e760808301888a61377e565b82810360208401526137f981886137a7565b9050828103604084015261380e81868861377e565b915050826060830152979650505050505050565b602081526000610d5160208301848661377e565b634e487b7160e01b600052601260045260246000fd5b60008261385b5761385b613836565b500690565b60008261386f5761386f613836565b500490565b6001600160401b038281168282160390811115610c3f57610c3f6136d2565b60008235605e1983360301811261375b57600080fd5b600062ffffff8216806138be576138be6136d2565b6000190192915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715610c3f57610c3f6136d2565b6001600160401b038181168382160190811115610c3f57610c3f6136d2565b80516020808301519190811015612fcd5760001960209190910360031b1b16919050565b60006001820161394a5761394a6136d2565b5060010190565b60008351613963818460208801613725565b6001600160801b0319939093169190920190815260100192915050565b60008161398f5761398f6136d2565b506000190190565b600081600f0b60016001607f1b031981036139b4576139b46136d2565b60000392915050565b80820260008212600160ff1b841416156139d9576139d96136d2565b8181058314821517610c3f57610c3f6136d2565b600064ffffffffff831680613a0457613a04613836565b8064ffffffffff84160491505092915050565b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610c3f57610c3f6136d2565b600064ffffffffff831680613a5b57613a5b613836565b8064ffffffffff84160691505092915050565b64ffffffffff81811683821602908116908181146132bc576132bc6136d2565b602081526000612c9660208301846137a756fea26469706673582212209e075b43bbcca176175fb3a36f1f6917ac5855ce95f3ee3faea93db4c35c7ce264736f6c634300081b0033", } // EigenPodABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenPodManager/binding.go b/pkg/bindings/EigenPodManager/binding.go index 394bf5ae7..783f74e36 100644 --- a/pkg/bindings/EigenPodManager/binding.go +++ b/pkg/bindings/EigenPodManager/binding.go @@ -31,8 +31,8 @@ var ( // 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\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"increaseInDelegateableShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"existingPodShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620031b9380380620031b983398101604081905262000035916200014b565b6001600160a01b0380861660805280851660a05280841660c05280831660e0528116610100526200006562000070565b5050505050620001cb565b600054610100900460ff1615620000dd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000130576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200014857600080fd5b50565b600080600080600060a086880312156200016457600080fd5b8551620001718162000132565b6020870151909550620001848162000132565b6040870151909450620001978162000132565b6060870151909350620001aa8162000132565b6080870151909250620001bd8162000132565b809150509295509295909350565b60805160a05160c05160e05161010051612f7862000241600039600081816105620152818161060d01528181610b9f0152818161133b015281816117e70152611899015260006104ee015260006102d601526000818161026a015281816112b80152611eb4015260006103c00152612f786000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b14610550578063f2fde38b14610584578063f6848d24146105a4578063fabc1cbc146105df57600080fd5b8063b1344271146104dc578063beffbb8914610510578063c2c51c401461053057600080fd5b80639b4e4634116100c65780639b4e46341461045d5780639ba0627514610470578063a38406a3146104a6578063a6a509be146104c657600080fd5b8063886f1195146103f75780638da5cb5b146104175780639104c3191461043557600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461036c578063715018a61461039957806374cdd798146103ae57806384d81062146103e257600080fd5b8063595c6a67146102f85780635ac86ab71461030d5780635c975abb1461034d57600080fd5b80631794bb3c116101955780631794bb3c14610238578063292b7b2b14610258578063387b1300146102a457806339b70e38146102c457600080fd5b80630e81073c146101bc57806310d67a2f146101f6578063136439dd14610218575b600080fd5b3480156101c857600080fd5b506101dc6101d736600461214c565b6105ff565b604080519283526020830191909152015b60405180910390f35b34801561020257600080fd5b50610216610211366004612178565b610883565b005b34801561022457600080fd5b5061021661023336600461219c565b610936565b34801561024457600080fd5b506102166102533660046121b5565b610a75565b34801561026457600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101ed565b3480156102b057600080fd5b506102166102bf3660046121b5565b610b94565b3480156102d057600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561030457600080fd5b50610216610fa8565b34801561031957600080fd5b5061033d6103283660046121f6565b606654600160ff9092169190911b9081161490565b60405190151581526020016101ed565b34801561035957600080fd5b506066545b6040519081526020016101ed565b34801561037857600080fd5b5061035e610387366004612178565b609b6020526000908152604090205481565b3480156103a557600080fd5b5061021661106f565b3480156103ba57600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ee57600080fd5b5061028c611083565b34801561040357600080fd5b5060655461028c906001600160a01b031681565b34801561042357600080fd5b506033546001600160a01b031661028c565b34801561044157600080fd5b5061028c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61021661046b36600461225b565b61116d565b34801561047c57600080fd5b5061028c61048b366004612178565b6098602052600090815260409020546001600160a01b031681565b3480156104b257600080fd5b5061028c6104c1366004612178565b61125c565b3480156104d257600080fd5b5061035e60995481565b3480156104e857600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561051c57600080fd5b5061021661052b36600461214c565b611330565b34801561053c57600080fd5b5061021661054b36600461214c565b61156f565b34801561055c57600080fd5b5061028c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561059057600080fd5b5061021661059f366004612178565b6119cb565b3480156105b057600080fd5b5061033d6105bf366004612178565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105eb57600080fd5b506102166105fa36600461219c565b611a41565b600080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106535760405162461bcd60e51b815260040161064a906122cf565b60405180910390fd5b6001600160a01b0384166106cf5760405162461bcd60e51b815260206004820152603a60248201527f456967656e506f644d616e616765722e6164645368617265733a20706f644f7760448201527f6e65722063616e6e6f74206265207a65726f2061646472657373000000000000606482015260840161064a565b600083121561073d5760405162461bcd60e51b815260206004820152603460248201527f456967656e506f644d616e616765722e6164645368617265733a207368617265604482015273732063616e6e6f74206265206e6567617469766560601b606482015260840161064a565b61074b633b9aca0084612343565b156107be5760405162461bcd60e51b815260206004820152603d60248201527f456967656e506f644d616e616765722e6164645368617265733a20736861726560448201527f73206d75737420626520612077686f6c65204777656920616d6f756e74000000606482015260840161064a565b6001600160a01b0384166000908152609b6020526040812054906107e2858361236d565b6001600160a01b0387166000818152609b6020526040908190208390555191925090600080516020612f03833981519152906108219088815260200190565b60405180910390a2856001600160a01b03166000805160206125d58339815191528260405161085291815260200190565b60405180910390a26108648282611b9d565b9350600082126108745781610877565b60005b925050505b9250929050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa91906123ae565b6001600160a01b0316336001600160a01b03161461092a5760405162461bcd60e51b815260040161064a906123cb565b61093381611bdf565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561097e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a29190612415565b6109be5760405162461bcd60e51b815260040161064a90612437565b60665481811614610a375760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161064a565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff1615808015610a955750600054600160ff909116105b80610aaf5750303b158015610aaf575060005460ff166001145b610b125760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161064a565b6000805460ff191660011790558015610b35576000805461ff0019166101001790555b610b3e84611cd6565b610b488383611d28565b8015610b8e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bdc5760405162461bcd60e51b815260040161064a906122cf565b6001600160a01b038316610c565760405162461bcd60e51b81526020600482015260476024820152600080516020612f2383398151915260448201527f546f6b656e733a20706f644f776e65722063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40161064a565b6001600160a01b038216610cd35760405162461bcd60e51b815260206004820152604a6024820152600080516020612f2383398151915260448201527f546f6b656e733a2064657374696e6174696f6e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a40161064a565b6000811215610d425760405162461bcd60e51b81526020600482015260416024820152600080516020612f2383398151915260448201527f546f6b656e733a207368617265732063616e6e6f74206265206e6567617469766064820152606560f81b608482015260a40161064a565b610d50633b9aca0082612343565b15610dc45760405162461bcd60e51b815260206004820152604a6024820152600080516020612f2383398151915260448201527f546f6b656e733a20736861726573206d75737420626520612077686f6c6520476064820152691dd95a48185b5bdd5b9d60b21b608482015260a40161064a565b6001600160a01b0383166000908152609b602052604081205490811215610f2d576000610df08261247f565b905080831115610e87576001600160a01b0385166000908152609b6020526040812055610e1d818461249c565b9250846001600160a01b0316600080516020612f0383398151915282604051610e4891815260200190565b60405180910390a2846001600160a01b03166000805160206125d58339815191526000604051610e7a91815260200190565b60405180910390a2610f2b565b6001600160a01b0385166000908152609b6020526040812054610eab90859061236d565b6001600160a01b0387166000818152609b6020526040908190208390555191925090600080516020612f0383398151915290610eea9087815260200190565b60405180910390a2856001600160a01b03166000805160206125d583398151915282604051610f1b91815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610f8a57600080fd5b505af1158015610f9e573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ff0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110149190612415565b6110305760405162461bcd60e51b815260040161064a90612437565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b611077611e12565b6110816000611cd6565b565b6066546000908190600190811614156110da5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161064a565b336000908152609860205260409020546001600160a01b03161561115c5760405162461bcd60e51b815260206004820152603360248201527f456967656e506f644d616e616765722e637265617465506f643a2053656e64656044820152721c88185b1c9958591e481a185cc818481c1bd9606a1b606482015260840161064a565b6000611166611e6c565b9250505090565b606654600090600190811614156111c25760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604482015260640161064a565b336000908152609860205260409020546001600160a01b0316806111eb576111e8611e6c565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490611221908b908b908b908b908b906004016124dc565b6000604051808303818588803b15801561123a57600080fd5b505af115801561124e573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061132a57611327836001600160a01b031660001b60405180610940016040528061090e81526020016125f561090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f198184030181529082905261130c9291602001612551565b60405160208183030381529060405280519060200120611fd1565b90505b92915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113785760405162461bcd60e51b815260040161064a906122cf565b60008112156113ef5760405162461bcd60e51b815260206004820152603760248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f617265732063616e6e6f74206265206e65676174697665000000000000000000606482015260840161064a565b6113fd633b9aca0082612343565b15611472576040805162461bcd60e51b81526020600482015260248101919091527f456967656e506f644d616e616765722e72656d6f76655368617265733a20736860448201527f61726573206d75737420626520612077686f6c65204777656920616d6f756e74606482015260840161064a565b6001600160a01b0382166000908152609b6020526040812054611496908390612566565b905060008112156115275760405162461bcd60e51b815260206004820152604f60248201527f456967656e506f644d616e616765722e72656d6f76655368617265733a20636160448201527f6e6e6f7420726573756c7420696e20706f64206f776e657220686176696e672060648201526e6e656761746976652073686172657360881b608482015260a40161064a565b6001600160a01b0383166000818152609b602052604090819020839055516000805160206125d5833981519152906115629084815260200190565b60405180910390a2505050565b6001600160a01b0380831660009081526098602052604090205483911633146115ea5760405162461bcd60e51b815260206004820152602760248201527f456967656e506f644d616e616765722e6f6e6c79456967656e506f643a206e6f6044820152661d0818481c1bd960ca1b606482015260840161064a565b600260c954141561163d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161064a565b600260c9556001600160a01b0383166116d95760405162461bcd60e51b815260206004820152605260248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a20706f644f776e65722063616e6e6064820152716f74206265207a65726f206164647265737360701b608482015260a40161064a565b6116e7633b9aca00836125a5565b156117805760405162461bcd60e51b815260206004820152605a60248201527f456967656e506f644d616e616765722e7265636f7264426561636f6e4368616960448201527f6e45544842616c616e63655570646174653a2073686172657344656c7461206d60648201527f75737420626520612077686f6c65204777656920616d6f756e74000000000000608482015260a40161064a565b6001600160a01b0383166000908152609b6020526040812054906117a4848361236d565b6001600160a01b0386166000908152609b602052604081208290559091506117cc8383611b9d565b9050801561195c576000811215611897576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061182b8561247f565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561187a57600080fd5b505af115801561188e573d6000803e3d6000fd5b5050505061195c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633c651cf28773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0600087126118ea57866118ed565b60005b6040516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152604482015260648101849052608401600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b505050505b856001600160a01b0316600080516020612f038339815191528660405161198591815260200190565b60405180910390a2856001600160a01b03166000805160206125d5833981519152836040516119b691815260200190565b60405180910390a25050600160c95550505050565b6119d3611e12565b6001600160a01b038116611a385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161064a565b61093381611cd6565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab891906123ae565b6001600160a01b0316336001600160a01b031614611ae85760405162461bcd60e51b815260040161064a906123cb565b606654198119606654191614611b665760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161064a565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610a6a565b6000808313611bbd5760008213611bb65750600061132a565b508061132a565b60008213611bd557611bce8361247f565b905061132a565b611bce8383612566565b6001600160a01b038116611c6d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161064a565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b0316158015611d4957506001600160a01b03821615155b611dcb5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161064a565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611e0e82611bdf565b5050565b6033546001600160a01b031633146110815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161064a565b6000609960008154611e7d906125b9565b9091555060408051610940810190915261090e808252600091611f1c91839133916125f56020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052611f089291602001612551565b60405160208183030381529060405261202d565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b158015611f6057600080fd5b505af1158015611f74573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090611327565b600080844710156120805760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161064a565b82516120ce5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161064a565b8383516020850187f590506001600160a01b03811661212f5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161064a565b949350505050565b6001600160a01b038116811461093357600080fd5b6000806040838503121561215f57600080fd5b823561216a81612137565b946020939093013593505050565b60006020828403121561218a57600080fd5b813561219581612137565b9392505050565b6000602082840312156121ae57600080fd5b5035919050565b6000806000606084860312156121ca57600080fd5b83356121d581612137565b925060208401356121e581612137565b929592945050506040919091013590565b60006020828403121561220857600080fd5b813560ff8116811461219557600080fd5b60008083601f84011261222b57600080fd5b50813567ffffffffffffffff81111561224357600080fd5b60208301915083602082850101111561087c57600080fd5b60008060008060006060868803121561227357600080fd5b853567ffffffffffffffff8082111561228b57600080fd5b61229789838a01612219565b909750955060208801359150808211156122b057600080fd5b506122bd88828901612219565b96999598509660400135949350505050565b602080825260409082018190527f456967656e506f644d616e616765722e6f6e6c7944656c65676174696f6e4d61908201527f6e616765723a206e6f74207468652044656c65676174696f6e4d616e61676572606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826123525761235261232d565b500690565b634e487b7160e01b600052601160045260246000fd5b600080821280156001600160ff1b038490038513161561238f5761238f612357565b600160ff1b83900384128116156123a8576123a8612357565b50500190565b6000602082840312156123c057600080fd5b815161219581612137565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561242757600080fd5b8151801515811461219557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000600160ff1b82141561249557612495612357565b5060000390565b6000828210156124ae576124ae612357565b500390565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006124f06060830187896124b3565b82810360208401526125038186886124b3565b9150508260408301529695505050505050565b6000815160005b81811015612537576020818501810151868301520161251d565b81811115612546576000828601525b509290920192915050565b600061212f6125608386612516565b84612516565b60008083128015600160ff1b85018412161561258457612584612357565b6001600160ff1b038401831381161561259f5761259f612357565b50500390565b6000826125b4576125b461232d565b500790565b60006000198214156125cd576125cd612357565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193456967656e506f644d616e616765722e77697468647261775368617265734173a2646970667358221220589d2421fd1a2806ed6524a3f40bea05ae2be9f1769c5fd5b724f497f6146b6164736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodBeacon\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", + Bin: "0x61012060405234801561001157600080fd5b5060405161296b38038061296b83398101604081905261003091610140565b6001600160a01b0380861660805280851660a05280841660c05280831660e05281166101005261005e610068565b50505050506101b5565b600054610100900460ff16156100d45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610126576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013d57600080fd5b50565b600080600080600060a0868803121561015857600080fd5b855161016381610128565b602087015190955061017481610128565b604087015190945061018581610128565b606087015190935061019681610128565b60808701519092506101a781610128565b809150509295509295909350565b60805160a05160c05160e0516101005161274161022a60003960008181610551015281816105fb01528181610a2d01528181610fda015281816112430152611333015260006104dd015260006102cf01526000818161026301528181610f5901526117c8015260006103af01526127416000f3fe6080604052600436106101b75760003560e01c8063886f1195116100ec578063b13442711161008a578063ea4d3c9b11610064578063ea4d3c9b1461053f578063f2fde38b14610573578063f6848d2414610593578063fabc1cbc146105ce57600080fd5b8063b1344271146104cb578063beffbb89146104ff578063c2c51c401461051f57600080fd5b80639b4e4634116100c65780639b4e46341461044c5780639ba062751461045f578063a38406a314610495578063a6a509be146104b557600080fd5b8063886f1195146103e65780638da5cb5b146104065780639104c3191461042457600080fd5b8063595c6a671161015957806360f4062b1161013357806360f4062b1461035b578063715018a61461038857806374cdd7981461039d57806384d81062146103d157600080fd5b8063595c6a67146102f15780635ac86ab7146103065780635c975abb1461034657600080fd5b80631794bb3c116101955780631794bb3c14610231578063292b7b2b14610251578063387b13001461029d57806339b70e38146102bd57600080fd5b80630e81073c146101bc57806310d67a2f146101ef578063136439dd14610211575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004611a63565b6105ee565b6040519081526020015b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004611a8f565b61075f565b005b34801561021d57600080fd5b5061020f61022c366004611aac565b610813565b34801561023d57600080fd5b5061020f61024c366004611ac5565b6108fe565b34801561025d57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e6565b3480156102a957600080fd5b5061020f6102b8366004611ac5565b610a22565b3480156102c957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156102fd57600080fd5b5061020f610ceb565b34801561031257600080fd5b50610336610321366004611b06565b606654600160ff9092169190911b9081161490565b60405190151581526020016101e6565b34801561035257600080fd5b506066546101dc565b34801561036757600080fd5b506101dc610376366004611a8f565b609b6020526000908152604090205481565b34801561039457600080fd5b5061020f610db3565b3480156103a957600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd57600080fd5b50610285610dc7565b3480156103f257600080fd5b50606554610285906001600160a01b031681565b34801561041257600080fd5b506033546001600160a01b0316610285565b34801561043057600080fd5b5061028573beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61020f61045a366004611b72565b610e3a565b34801561046b57600080fd5b5061028561047a366004611a8f565b6098602052600090815260409020546001600160a01b031681565b3480156104a157600080fd5b506102856104b0366004611a8f565b610efd565b3480156104c157600080fd5b506101dc60995481565b3480156104d757600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061020f61051a366004611a63565b610fcf565b34801561052b57600080fd5b5061020f61053a366004611a63565b6110f6565b34801561054b57600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b5061020f61058e366004611a8f565b6113ff565b34801561059f57600080fd5b506103366105ae366004611a8f565b6001600160a01b0390811660009081526098602052604090205416151590565b3480156105da57600080fd5b5061020f6105e9366004611aac565b611475565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461063957604051635c427cd960e01b815260040160405180910390fd5b6001600160a01b038316610660576040516339b190bb60e11b815260040160405180910390fd5b60008212156106825760405163ef147de160e01b815260040160405180910390fd5b610690633b9aca0083611c01565b156106ae576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b6020526040812054906106d28483611c2b565b6001600160a01b0386166000818152609b60205260409081902083905551919250906000805160206126ec833981519152906107119087815260200190565b60405180910390a2846001600160a01b0316600080516020611dbe8339815191528260405161074291815260200190565b60405180910390a2610754828261157d565b925050505b92915050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d69190611c53565b6001600160a01b0316336001600160a01b0316146108075760405163794821ff60e01b815260040160405180910390fd5b610810816115bf565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561085b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087f9190611c70565b61089c57604051631d77d47760e21b815260040160405180910390fd5b606654818116146108c05760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600054610100900460ff161580801561091e5750600054600160ff909116105b806109385750303b158015610938575060005460ff166001145b6109a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156109c3576000805461ff0019166101001790555b6109cc8461164f565b6109d683836116a1565b8015610a1c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6b57604051635c427cd960e01b815260040160405180910390fd5b6001600160a01b038316610a92576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b038216610ab9576040516339b190bb60e11b815260040160405180910390fd5b6000811215610adb5760405163ef147de160e01b815260040160405180910390fd5b610ae9633b9aca0082611c01565b15610b07576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b602052604081205490811215610c70576000610b3382611c92565b905080831115610bca576001600160a01b0385166000908152609b6020526040812055610b608184611cae565b9250846001600160a01b03166000805160206126ec83398151915282604051610b8b91815260200190565b60405180910390a2846001600160a01b0316600080516020611dbe8339815191526000604051610bbd91815260200190565b60405180910390a2610c6e565b6001600160a01b0385166000908152609b6020526040812054610bee908590611c2b565b6001600160a01b0387166000818152609b60205260409081902083905551919250906000805160206126ec83398151915290610c2d9087815260200190565b60405180910390a2856001600160a01b0316600080516020611dbe83398151915282604051610c5e91815260200190565b60405180910390a2505050505050565b505b6001600160a01b03848116600090815260986020526040908190205490516362483a2160e11b815285831660048201526024810185905291169063c490744290604401600060405180830381600087803b158015610ccd57600080fd5b505af1158015610ce1573d6000803e3d6000fd5b5050505050505050565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190611c70565b610d7457604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610dbb611726565b610dc5600061164f565b565b6066546000908190600190811603610df25760405163840a48d560e01b815260040160405180910390fd5b336000908152609860205260409020546001600160a01b031615610e295760405163031a852160e21b815260040160405180910390fd5b6000610e33611780565b9250505090565b606654600090600190811603610e635760405163840a48d560e01b815260040160405180910390fd5b336000908152609860205260409020546001600160a01b031680610e8c57610e89611780565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610ec2908b908b908b908b908b90600401611cea565b6000604051808303818588803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038082166000908152609860205260408120549091168061075957610fc8836001600160a01b031660001b60405180610940016040528061090e8152602001611dde61090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f1981840301815290829052610fad9291602001611d54565b604051602081830303815290604052805190602001206118e5565b9392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461101857604051635c427cd960e01b815260040160405180910390fd5b600081121561103a5760405163ef147de160e01b815260040160405180910390fd5b611048633b9aca0082611c01565b15611066576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0382166000908152609b602052604081205461108a908390611d69565b905060008112156110ae5760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0383166000818152609b60205260409081902083905551600080516020611dbe833981519152906110e99084815260200190565b60405180910390a2505050565b6001600160a01b03808316600090815260986020526040902054839116331461113257604051635c427cd960e01b815260040160405180910390fd5b600260c954036111845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610997565b600260c9556001600160a01b0383166111b0576040516339b190bb60e11b815260040160405180910390fd5b6111be633b9aca0083611d90565b156111dc576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0383166000908152609b6020526040812054906112008483611c2b565b6001600160a01b0386166000908152609b60205260408120829055909150611228838361157d565b905080156113905760008112156112f3576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663132d49678773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac061128785611c92565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156112d657600080fd5b505af11580156112ea573d6000803e3d6000fd5b50505050611390565b604051631452b9d760e11b81526001600160a01b03878116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b15801561137757600080fd5b505af115801561138b573d6000803e3d6000fd5b505050505b856001600160a01b03166000805160206126ec833981519152866040516113b991815260200190565b60405180910390a2856001600160a01b0316600080516020611dbe833981519152836040516113ea91815260200190565b60405180910390a25050600160c95550505050565b611407611726565b6001600160a01b03811661146c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610997565b6108108161164f565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ec9190611c53565b6001600160a01b0316336001600160a01b03161461151d5760405163794821ff60e01b815260040160405180910390fd5b6066541981196066541916146115465760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016108f3565b600080831361159d576000821361159657506000610759565b5080610759565b600082136115b5576115ae83611c92565b9050610759565b6115ae8383611d69565b6001600160a01b0381166115e6576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6065546001600160a01b03161580156116c257506001600160a01b03821615155b6116df576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2611722826115bf565b5050565b6033546001600160a01b03163314610dc55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610997565b600060996000815461179190611da4565b9091555060408051610940810190915261090e8082526000916118309183913391611dde6020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091526000606082015260800160408051601f198184030181529082905261181c9291602001611d54565b604051602081830303815290604052611941565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b15801561187457600080fd5b505af1158015611888573d6000803e3d6000fd5b50503360008181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b604080516001600160f81b03196020808301919091526bffffffffffffffffffffffff193060601b1660218301526035820185905260558083018590528351808403909101815260759092019092528051910120600090610fc8565b600080844710156119945760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610997565b82516000036119e55760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610997565b8383516020850187f590506001600160a01b038116611a465760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610997565b949350505050565b6001600160a01b038116811461081057600080fd5b60008060408385031215611a7657600080fd5b8235611a8181611a4e565b946020939093013593505050565b600060208284031215611aa157600080fd5b8135610fc881611a4e565b600060208284031215611abe57600080fd5b5035919050565b600080600060608486031215611ada57600080fd5b8335611ae581611a4e565b92506020840135611af581611a4e565b929592945050506040919091013590565b600060208284031215611b1857600080fd5b813560ff81168114610fc857600080fd5b60008083601f840112611b3b57600080fd5b50813567ffffffffffffffff811115611b5357600080fd5b602083019150836020828501011115611b6b57600080fd5b9250929050565b600080600080600060608688031215611b8a57600080fd5b853567ffffffffffffffff811115611ba157600080fd5b611bad88828901611b29565b909650945050602086013567ffffffffffffffff811115611bcd57600080fd5b611bd988828901611b29565b96999598509660400135949350505050565b634e487b7160e01b600052601260045260246000fd5b600082611c1057611c10611beb565b500690565b634e487b7160e01b600052601160045260246000fd5b8082018281126000831280158216821582161715611c4b57611c4b611c15565b505092915050565b600060208284031215611c6557600080fd5b8151610fc881611a4e565b600060208284031215611c8257600080fd5b81518015158114610fc857600080fd5b6000600160ff1b8201611ca757611ca7611c15565b5060000390565b8181038181111561075957610759611c15565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000611cfe606083018789611cc1565b8281036020840152611d11818688611cc1565b9150508260408301529695505050505050565b6000815160005b81811015611d455760208185018101518683015201611d2b565b50600093019283525090919050565b6000611a46611d638386611d24565b84611d24565b8181036000831280158383131683831282161715611d8957611d89611c15565b5092915050565b600082611d9f57611d9f611beb565b500790565b600060018201611db657611db6611c15565b506001019056fed4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193a26469706673582212204aa026c6d1cc5f85ad6c8e68c9fce33f2038878c58b81920b6d2a9a7ec94c18464736f6c634300081b0033", } // EigenPodManagerABI is the input ABI used to generate the binding from. @@ -669,21 +669,21 @@ func (_EigenPodManager *EigenPodManagerCallerSession) StrategyManager() (common. // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) func (_EigenPodManager *EigenPodManagerTransactor) AddShares(opts *bind.TransactOpts, podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManager.contract.Transact(opts, "addShares", podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) func (_EigenPodManager *EigenPodManagerSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManager.Contract.AddShares(&_EigenPodManager.TransactOpts, podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) func (_EigenPodManager *EigenPodManagerTransactorSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManager.Contract.AddShares(&_EigenPodManager.TransactOpts, podOwner, shares) } diff --git a/pkg/bindings/EigenPodManagerStorage/binding.go b/pkg/bindings/EigenPodManagerStorage/binding.go index 5046efda9..6b3ba1371 100644 --- a/pkg/bindings/EigenPodManagerStorage/binding.go +++ b/pkg/bindings/EigenPodManagerStorage/binding.go @@ -31,7 +31,7 @@ var ( // EigenPodManagerStorageMetaData contains all meta data concerning the EigenPodManagerStorage contract. var EigenPodManagerStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"numPods\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ownerToPod\",\"inputs\":[{\"name\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"numPods\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ownerToPod\",\"inputs\":[{\"name\":\"\",\"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\":\"podOwnerShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", } // EigenPodManagerStorageABI is the input ABI used to generate the binding from. @@ -616,21 +616,21 @@ func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) StrategyMana // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) func (_EigenPodManagerStorage *EigenPodManagerStorageTransactor) AddShares(opts *bind.TransactOpts, podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManagerStorage.contract.Transact(opts, "addShares", podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) func (_EigenPodManagerStorage *EigenPodManagerStorageSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManagerStorage.Contract.AddShares(&_EigenPodManagerStorage.TransactOpts, podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) func (_EigenPodManagerStorage *EigenPodManagerStorageTransactorSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _EigenPodManagerStorage.Contract.AddShares(&_EigenPodManagerStorage.TransactOpts, podOwner, shares) } diff --git a/pkg/bindings/EigenPodStorage/binding.go b/pkg/bindings/EigenPodStorage/binding.go index de7c3e95b..4fad640ec 100644 --- a/pkg/bindings/EigenPodStorage/binding.go +++ b/pkg/bindings/EigenPodStorage/binding.go @@ -72,7 +72,7 @@ type IEigenPodValidatorInfo 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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsWithdrawableRestakedExecutionLayerGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountMustBeMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncompletePreviousCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBlockRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoints\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofOlderThanLastCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExiting\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNoPendingActivation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawCredentialsNotForEigenPod\",\"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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountMustBeMultipleOfGwei\",\"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\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"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\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorInactiveOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExitingBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActiveInPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashedOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawCredentialsNotForEigenPod\",\"inputs\":[]}]", } // EigenPodStorageABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenStrategy/binding.go b/pkg/bindings/EigenStrategy/binding.go index 114931469..d3ba64dc8 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\"}],\"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\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_EIGEN\",\"type\":\"address\",\"internalType\":\"contractIEigen\"},{\"name\":\"_bEIGEN\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"WithdrawalAmountExceedsDeposit\",\"inputs\":[]}]", - Bin: "0x60a060405234801561001057600080fd5b5060405161193638038061193683398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b6080516117ca61016c600039600081816101af015281816105240152818161098f0152610a2e01526117ca6000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80637a8b2637116100c3578063ce7c2ac21161007c578063ce7c2ac2146102da578063d9caed12146102ed578063e3dae51c14610300578063f3e7387514610313578063fabc1cbc14610326578063fdc371ce1461033957600080fd5b80637a8b263714610260578063886f1195146102735780638c8710191461028c5780638f6a62401461029f578063ab5921e1146102b2578063c0c53b8b146102c757600080fd5b806347e7ef241161011557806347e7ef24146101e8578063485cc955146101fb578063553ca5f81461020e578063595c6a67146102215780635ac86ab7146102295780635c975abb1461025857600080fd5b806310d67a2f14610152578063136439dd146101675780632495a5991461017a57806339b70e38146101aa5780633a98ef39146101d1575b600080fd5b610165610160366004611449565b61034c565b005b610165610175366004611466565b610400565b60325461018d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61018d7f000000000000000000000000000000000000000000000000000000000000000081565b6101da60335481565b6040519081526020016101a1565b6101da6101f636600461147f565b6104f0565b6101656102093660046114ab565b610641565b6101da61021c366004611449565b610718565b61016561072c565b6102486102373660046114f3565b6001805460ff9092161b9081161490565b60405190151581526020016101a1565b6001546101da565b6101da61026e366004611466565b6107f9565b60005461018d906201000090046001600160a01b031681565b6101da61029a366004611466565b610844565b6101da6102ad366004611449565b61084f565b6102ba61085d565b6040516101a19190611534565b6101656102d5366004611567565b61087d565b6101da6102e8366004611449565b610967565b6101656102fb3660046115b2565b6109fc565b6101da61030e366004611466565b610b1c565b6101da610321366004611466565b610b55565b610165610334366004611466565b610b60565b60645461018d906001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c391906115f3565b6001600160a01b0316336001600160a01b0316146103f45760405163794821ff60e01b815260040160405180910390fd5b6103fd81610c68565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561044d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104719190611610565b61048e57604051631d77d47760e21b815260040160405180910390fd5b600154818116146104b25760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036105195760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610562576040516348da714f60e01b815260040160405180910390fd5b61056c8484610d06565b603354600061057d6103e883611648565b905060006103e861058c610dc5565b6105969190611648565b905060006105a4878361165b565b9050806105b1848961166e565b6105bb9190611685565b9550856000036105de57604051630c392ed360e11b815260040160405180910390fd5b6105e88685611648565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561061d57604051632f14e8a360e11b815260040160405180910390fd5b610636826103e86033546106319190611648565b610e37565b505050505092915050565b600054610100900460ff16158080156106615750600054600160ff909116105b8061067b5750303b15801561067b575060005460ff166001145b6106a05760405162461bcd60e51b8152600401610697906116a7565b60405180910390fd5b6000805460ff1916600117905580156106c3576000805461ff0019166101001790555b6106cd8383610e8b565b8015610713576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061072661026e83610967565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079d9190611610565b6107ba57604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e860335461080c9190611648565b905060006103e861081b610dc5565b6108259190611648565b905081610832858361166e565b61083c9190611685565b949350505050565b600061072682610b1c565b600061072661032183610967565b60606040518060800160405280604d8152602001611748604d9139905090565b600054610100900460ff161580801561089d5750600054600160ff909116105b806108b75750303b1580156108b7575060005460ff166001145b6108d35760405162461bcd60e51b8152600401610697906116a7565b6000805460ff1916600117905580156108f6576000805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03861617905561091b8383610e8b565b8015610961576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072691906116f5565b60018054600290811603610a235760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6c576040516348da714f60e01b815260040160405180910390fd5b610a77848484610fd6565b60335480831115610a9b57604051633a5d3b0160e21b815260040160405180910390fd5b6000610aa96103e883611648565b905060006103e8610ab8610dc5565b610ac29190611648565b9050600082610ad1878461166e565b610adb9190611685565b9050610ae7868561165b565b603355610b07610af7828461165b565b6103e86033546106319190611648565b610b1288888361101c565b5050505050505050565b6000806103e8603354610b2f9190611648565b905060006103e8610b3e610dc5565b610b489190611648565b905080610832838661166e565b6000610726826107f9565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd791906115f3565b6001600160a01b0316336001600160a01b031614610c085760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610c315760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104e5565b6001600160a01b038116610c8f576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b0383811691161480610d2f57506064546001600160a01b038381169116145b610d4c57604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610dc157606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e90602401600060405180830381600087803b158015610da857600080fd5b505af1158015610dbc573d6000803e3d6000fd5b505050505b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3291906116f5565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610e6b84670de0b6b3a764000061166e565b610e759190611685565b6040519081526020015b60405180910390a15050565b600054610100900460ff16610ef65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610697565b603280546001600160a01b0319166001600160a01b038416179055610f1c81600061111d565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb5919061170e565b604080516001600160a01b03909316835260ff909116602083015201610e7f565b6032546001600160a01b0383811691161480610fff57506064546001600160a01b038381169116145b61071357604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b03908116908316036111095760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015611085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a99190611610565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb090602401600060405180830381600087803b1580156110f057600080fd5b505af1158015611104573d6000803e3d6000fd5b505050505b6107136001600160a01b03831684836111a4565b6000546201000090046001600160a01b031615801561114457506001600160a01b03821615155b611161576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610dc182610c68565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610713928692916000916112349185169084906112b1565b80519091501561071357808060200190518101906112529190611610565b6107135760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610697565b60606112c084846000856112ca565b90505b9392505050565b60608247101561132b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610697565b6001600160a01b0385163b6113825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b600080866001600160a01b0316858760405161139e919061172b565b60006040518083038185875af1925050503d80600081146113db576040519150601f19603f3d011682016040523d82523d6000602084013e6113e0565b606091505b50915091506113f08282866113fb565b979650505050505050565b6060831561140a5750816112c3565b82511561141a5782518084602001fd5b8160405162461bcd60e51b81526004016106979190611534565b6001600160a01b03811681146103fd57600080fd5b60006020828403121561145b57600080fd5b81356112c381611434565b60006020828403121561147857600080fd5b5035919050565b6000806040838503121561149257600080fd5b823561149d81611434565b946020939093013593505050565b600080604083850312156114be57600080fd5b82356114c981611434565b915060208301356114d981611434565b809150509250929050565b60ff811681146103fd57600080fd5b60006020828403121561150557600080fd5b81356112c3816114e4565b60005b8381101561152b578181015183820152602001611513565b50506000910152565b6020815260008251806020840152611553816040850160208701611510565b601f01601f19169190910160400192915050565b60008060006060848603121561157c57600080fd5b833561158781611434565b9250602084013561159781611434565b915060408401356115a781611434565b809150509250925092565b6000806000606084860312156115c757600080fd5b83356115d281611434565b925060208401356115e281611434565b929592945050506040919091013590565b60006020828403121561160557600080fd5b81516112c381611434565b60006020828403121561162257600080fd5b815180151581146112c357600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072657610726611632565b8181038181111561072657610726611632565b808202811582820484141761072657610726611632565b6000826116a257634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60006020828403121561170757600080fd5b5051919050565b60006020828403121561172057600080fd5b81516112c3816114e4565b6000825161173d818460208701611510565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220dac3a527174fe3504d7e81657b13de972a5eae57c5eb675c467868166380ef9664736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_EIGEN\",\"type\":\"address\",\"internalType\":\"contractIEigen\"},{\"name\":\"_bEIGEN\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", + Bin: "0x60a060405234801561001057600080fd5b5060405161193638038061193683398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b6080516117ca61016c600039600081816101af015281816105240152818161098f0152610a2e01526117ca6000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80637a8b2637116100c3578063ce7c2ac21161007c578063ce7c2ac2146102da578063d9caed12146102ed578063e3dae51c14610300578063f3e7387514610313578063fabc1cbc14610326578063fdc371ce1461033957600080fd5b80637a8b263714610260578063886f1195146102735780638c8710191461028c5780638f6a62401461029f578063ab5921e1146102b2578063c0c53b8b146102c757600080fd5b806347e7ef241161011557806347e7ef24146101e8578063485cc955146101fb578063553ca5f81461020e578063595c6a67146102215780635ac86ab7146102295780635c975abb1461025857600080fd5b806310d67a2f14610152578063136439dd146101675780632495a5991461017a57806339b70e38146101aa5780633a98ef39146101d1575b600080fd5b610165610160366004611449565b61034c565b005b610165610175366004611466565b610400565b60325461018d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61018d7f000000000000000000000000000000000000000000000000000000000000000081565b6101da60335481565b6040519081526020016101a1565b6101da6101f636600461147f565b6104f0565b6101656102093660046114ab565b610641565b6101da61021c366004611449565b610718565b61016561072c565b6102486102373660046114f3565b6001805460ff9092161b9081161490565b60405190151581526020016101a1565b6001546101da565b6101da61026e366004611466565b6107f9565b60005461018d906201000090046001600160a01b031681565b6101da61029a366004611466565b610844565b6101da6102ad366004611449565b61084f565b6102ba61085d565b6040516101a19190611534565b6101656102d5366004611567565b61087d565b6101da6102e8366004611449565b610967565b6101656102fb3660046115b2565b6109fc565b6101da61030e366004611466565b610b1c565b6101da610321366004611466565b610b55565b610165610334366004611466565b610b60565b60645461018d906001600160a01b031681565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c391906115f3565b6001600160a01b0316336001600160a01b0316146103f45760405163794821ff60e01b815260040160405180910390fd5b6103fd81610c68565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561044d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104719190611610565b61048e57604051631d77d47760e21b815260040160405180910390fd5b600154818116146104b25760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036105195760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461056257604051635c427cd960e01b815260040160405180910390fd5b61056c8484610d06565b603354600061057d6103e883611648565b905060006103e861058c610dc5565b6105969190611648565b905060006105a4878361165b565b9050806105b1848961166e565b6105bb9190611685565b9550856000036105de57604051630c392ed360e11b815260040160405180910390fd5b6105e88685611648565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561061d57604051632f14e8a360e11b815260040160405180910390fd5b610636826103e86033546106319190611648565b610e37565b505050505092915050565b600054610100900460ff16158080156106615750600054600160ff909116105b8061067b5750303b15801561067b575060005460ff166001145b6106a05760405162461bcd60e51b8152600401610697906116a7565b60405180910390fd5b6000805460ff1916600117905580156106c3576000805461ff0019166101001790555b6106cd8383610e8b565b8015610713576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061072661026e83610967565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079d9190611610565b6107ba57604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e860335461080c9190611648565b905060006103e861081b610dc5565b6108259190611648565b905081610832858361166e565b61083c9190611685565b949350505050565b600061072682610b1c565b600061072661032183610967565b60606040518060800160405280604d8152602001611748604d9139905090565b600054610100900460ff161580801561089d5750600054600160ff909116105b806108b75750303b1580156108b7575060005460ff166001145b6108d35760405162461bcd60e51b8152600401610697906116a7565b6000805460ff1916600117905580156108f6576000805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03861617905561091b8383610e8b565b8015610961576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa1580156109d8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072691906116f5565b60018054600290811603610a235760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6c57604051635c427cd960e01b815260040160405180910390fd5b610a77848484610fd6565b60335480831115610a9b57604051630b469df360e41b815260040160405180910390fd5b6000610aa96103e883611648565b905060006103e8610ab8610dc5565b610ac29190611648565b9050600082610ad1878461166e565b610adb9190611685565b9050610ae7868561165b565b603355610b07610af7828461165b565b6103e86033546106319190611648565b610b1288888361101c565b5050505050505050565b6000806103e8603354610b2f9190611648565b905060006103e8610b3e610dc5565b610b489190611648565b905080610832838661166e565b6000610726826107f9565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd791906115f3565b6001600160a01b0316336001600160a01b031614610c085760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610c315760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104e5565b6001600160a01b038116610c8f576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b0383811691161480610d2f57506064546001600160a01b038381169116145b610d4c57604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610dc157606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e90602401600060405180830381600087803b158015610da857600080fd5b505af1158015610dbc573d6000803e3d6000fd5b505050505b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3291906116f5565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610e6b84670de0b6b3a764000061166e565b610e759190611685565b6040519081526020015b60405180910390a15050565b600054610100900460ff16610ef65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610697565b603280546001600160a01b0319166001600160a01b038416179055610f1c81600061111d565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb5919061170e565b604080516001600160a01b03909316835260ff909116602083015201610e7f565b6032546001600160a01b0383811691161480610fff57506064546001600160a01b038381169116145b61071357604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b03908116908316036111095760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015611085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a99190611610565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb090602401600060405180830381600087803b1580156110f057600080fd5b505af1158015611104573d6000803e3d6000fd5b505050505b6107136001600160a01b03831684836111a4565b6000546201000090046001600160a01b031615801561114457506001600160a01b03821615155b611161576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610dc182610c68565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610713928692916000916112349185169084906112b1565b80519091501561071357808060200190518101906112529190611610565b6107135760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610697565b60606112c084846000856112ca565b90505b9392505050565b60608247101561132b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610697565b6001600160a01b0385163b6113825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b600080866001600160a01b0316858760405161139e919061172b565b60006040518083038185875af1925050503d80600081146113db576040519150601f19603f3d011682016040523d82523d6000602084013e6113e0565b606091505b50915091506113f08282866113fb565b979650505050505050565b6060831561140a5750816112c3565b82511561141a5782518084602001fd5b8160405162461bcd60e51b81526004016106979190611534565b6001600160a01b03811681146103fd57600080fd5b60006020828403121561145b57600080fd5b81356112c381611434565b60006020828403121561147857600080fd5b5035919050565b6000806040838503121561149257600080fd5b823561149d81611434565b946020939093013593505050565b600080604083850312156114be57600080fd5b82356114c981611434565b915060208301356114d981611434565b809150509250929050565b60ff811681146103fd57600080fd5b60006020828403121561150557600080fd5b81356112c3816114e4565b60005b8381101561152b578181015183820152602001611513565b50506000910152565b6020815260008251806020840152611553816040850160208701611510565b601f01601f19169190910160400192915050565b60008060006060848603121561157c57600080fd5b833561158781611434565b9250602084013561159781611434565b915060408401356115a781611434565b809150509250925092565b6000806000606084860312156115c757600080fd5b83356115d281611434565b925060208401356115e281611434565b929592945050506040919091013590565b60006020828403121561160557600080fd5b81516112c381611434565b60006020828403121561162257600080fd5b815180151581146112c357600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072657610726611632565b8181038181111561072657610726611632565b808202811582820484141761072657610726611632565b6000826116a257634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60006020828403121561170757600080fd5b5051919050565b60006020828403121561172057600080fd5b81516112c3816114e4565b6000825161173d818460208701611510565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212201c9bcd1118dfa77a854462121c21abc1fd0d551cdad5b0b9cebf3b539d28856464736f6c634300081b0033", } // EigenStrategyABI 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 63f096b72..20c44ca22 100644 --- a/pkg/bindings/IAVSDirectory/binding.go +++ b/pkg/bindings/IAVSDirectory/binding.go @@ -29,20 +29,6 @@ var ( _ = abi.ConvertType ) -// IAVSDirectoryMagnitudeAllocation is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryMagnitudeAllocation struct { - Strategy common.Address - ExpectedTotalMagnitude uint64 - OperatorSets []IAVSDirectoryOperatorSet - Magnitudes []uint64 -} - -// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 -} - // ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct. type ISignatureUtilsSignatureWithSaltAndExpiry struct { Signature []byte @@ -52,7 +38,7 @@ type ISignatureUtilsSignatureWithSaltAndExpiry 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\":\"becomeOperatorSetAVS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateMagnitudeAllocationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"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\":\"calculateOperatorSetForceDeregistrationTypehash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorSetRegistrationDigestHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"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\":\"createOperatorSets\",\"inputs\":[{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceDeregisterFromOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"numToComplete\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentSlashableMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"uint64[][]\",\"internalType\":\"uint64[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getNumOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetsOfOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"uint64[][]\",\"internalType\":\"uint64[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashablePPM\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"linear\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint24[]\",\"internalType\":\"uint24[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudeAtTimestamp\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalMagnitudesAtTimestamp\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"timestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"inTotalOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isMember\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSetAVS\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateOperatorsToOperatorSets\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.MagnitudeAllocation[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"expectedTotalMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structIAVSDirectory.OperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"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\":\"operatorSetMemberAtIndex\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorSetsMemberOfAtIndex\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"registerOperatorToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.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\":\"slashOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateFreeMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToComplete\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"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\":\"AVSMigratedToOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeAllocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToAllocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeDeallocationCompleted\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"freeMagnitudeAdded\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MagnitudeQueueDeallocated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"magnitudeToDeallocate\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"completableTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMigratedToOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"indexed\":false,\"internalType\":\"uint32[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"bipsToSlash\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"OPERATOR_AVS_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\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"structISignatureUtils.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\":\"enumIAVSDirectory.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureSaltSpent\",\"inputs\":[]}]", } // IAVSDirectoryABI is the input ABI used to generate the binding from. @@ -232,68 +218,6 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) OPERATORAVSREGISTRATIONTYPEHAS return _IAVSDirectory.Contract.OPERATORAVSREGISTRATIONTYPEHASH(&_IAVSDirectory.CallOpts) } -// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. -// -// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCaller) OPERATORSETREGISTRATIONTYPEHASH(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "OPERATOR_SET_REGISTRATION_TYPEHASH") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. -// -// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) -func (_IAVSDirectory *IAVSDirectorySession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { - return _IAVSDirectory.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_IAVSDirectory.CallOpts) -} - -// OPERATORSETREGISTRATIONTYPEHASH is a free data retrieval call binding the contract method 0xc825fe68. -// -// Solidity: function OPERATOR_SET_REGISTRATION_TYPEHASH() view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCallerSession) OPERATORSETREGISTRATIONTYPEHASH() ([32]byte, error) { - return _IAVSDirectory.Contract.OPERATORSETREGISTRATIONTYPEHASH(&_IAVSDirectory.CallOpts) -} - -// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. -// -// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCaller) CalculateMagnitudeAllocationDigestHash(opts *bind.CallOpts, operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "calculateMagnitudeAllocationDigestHash", operator, allocations, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. -// -// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectorySession) CalculateMagnitudeAllocationDigestHash(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _IAVSDirectory.Contract.CalculateMagnitudeAllocationDigestHash(&_IAVSDirectory.CallOpts, operator, allocations, salt, expiry) -} - -// CalculateMagnitudeAllocationDigestHash is a free data retrieval call binding the contract method 0x686b686e. -// -// Solidity: function calculateMagnitudeAllocationDigestHash(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateMagnitudeAllocationDigestHash(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _IAVSDirectory.Contract.CalculateMagnitudeAllocationDigestHash(&_IAVSDirectory.CallOpts, operator, allocations, salt, expiry) -} - // CalculateOperatorAVSRegistrationDigestHash is a free data retrieval call binding the contract method 0xa1060c88. // // Solidity: function calculateOperatorAVSRegistrationDigestHash(address operator, address avs, bytes32 salt, uint256 expiry) view returns(bytes32) @@ -325,2089 +249,216 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorAVSRegistrati return _IAVSDirectory.Contract.CalculateOperatorAVSRegistrationDigestHash(&_IAVSDirectory.CallOpts, operator, avs, salt, expiry) } -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCaller) CalculateOperatorSetForceDeregistrationTypehash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { +// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) +func (_IAVSDirectory *IAVSDirectoryCaller) OperatorSaltIsSpent(opts *bind.CallOpts, operator common.Address, salt [32]byte) (bool, error) { var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "calculateOperatorSetForceDeregistrationTypehash", avs, operatorSetIds, salt, expiry) + err := _IAVSDirectory.contract.Call(opts, &out, "operatorSaltIsSpent", operator, salt) if err != nil { - return *new([32]byte), err + return *new(bool), err } - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) return out0, err } -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectorySession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _IAVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) +func (_IAVSDirectory *IAVSDirectorySession) OperatorSaltIsSpent(operator common.Address, salt [32]byte) (bool, error) { + return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) } -// CalculateOperatorSetForceDeregistrationTypehash is a free data retrieval call binding the contract method 0xb2841d48. +// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. // -// Solidity: function calculateOperatorSetForceDeregistrationTypehash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorSetForceDeregistrationTypehash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _IAVSDirectory.Contract.CalculateOperatorSetForceDeregistrationTypehash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) +func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSaltIsSpent(operator common.Address, salt [32]byte) (bool, error) { + return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) } -// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCaller) CalculateOperatorSetRegistrationDigestHash(opts *bind.CallOpts, avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "calculateOperatorSetRegistrationDigestHash", avs, operatorSetIds, salt, expiry) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "deregisterOperatorFromAVS", operator) } -// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectorySession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _IAVSDirectory.Contract.CalculateOperatorSetRegistrationDigestHash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_IAVSDirectory *IAVSDirectorySession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) } -// CalculateOperatorSetRegistrationDigestHash is a free data retrieval call binding the contract method 0x955e6696. +// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. // -// Solidity: function calculateOperatorSetRegistrationDigestHash(address avs, uint32[] operatorSetIds, bytes32 salt, uint256 expiry) view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCallerSession) CalculateOperatorSetRegistrationDigestHash(avs common.Address, operatorSetIds []uint32, salt [32]byte, expiry *big.Int) ([32]byte, error) { - return _IAVSDirectory.Contract.CalculateOperatorSetRegistrationDigestHash(&_IAVSDirectory.CallOpts, avs, operatorSetIds, salt, expiry) +// Solidity: function deregisterOperatorFromAVS(address operator) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { + return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) } -// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function domainSeparator() view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "domainSeparator") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) } -// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function domainSeparator() view returns(bytes32) -func (_IAVSDirectory *IAVSDirectorySession) DomainSeparator() ([32]byte, error) { - return _IAVSDirectory.Contract.DomainSeparator(&_IAVSDirectory.CallOpts) +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) } -// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. // -// Solidity: function domainSeparator() view returns(bytes32) -func (_IAVSDirectory *IAVSDirectoryCallerSession) DomainSeparator() ([32]byte, error) { - return _IAVSDirectory.Contract.DomainSeparator(&_IAVSDirectory.CallOpts) +// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { + return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) } -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) -func (_IAVSDirectory *IAVSDirectoryCaller) GetAllocatableMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getAllocatableMagnitude", operator, strategy, numToComplete) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_IAVSDirectory *IAVSDirectoryTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { + return _IAVSDirectory.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) } -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) -func (_IAVSDirectory *IAVSDirectorySession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { - return _IAVSDirectory.Contract.GetAllocatableMagnitude(&_IAVSDirectory.CallOpts, operator, strategy, numToComplete) +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_IAVSDirectory *IAVSDirectorySession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) } -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x3f78612f. +// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy, uint16 numToComplete) view returns(uint64) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address, numToComplete uint16) (uint64, error) { - return _IAVSDirectory.Contract.GetAllocatableMagnitude(&_IAVSDirectory.CallOpts, operator, strategy, numToComplete) +// Solidity: function updateAVSMetadataURI(string metadataURI) returns() +func (_IAVSDirectory *IAVSDirectoryTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { + return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) } -// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. -// -// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) -func (_IAVSDirectory *IAVSDirectoryCaller) GetCurrentSlashableMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getCurrentSlashableMagnitudes", operator, strategies) - - if err != nil { - return *new([]IAVSDirectoryOperatorSet), *new([][]uint64), err - } - - out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) - out1 := *abi.ConvertType(out[1], new([][]uint64)).(*[][]uint64) - - return out0, out1, err - -} +// IAVSDirectoryAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the IAVSDirectory contract. +type IAVSDirectoryAVSMetadataURIUpdatedIterator struct { + Event *IAVSDirectoryAVSMetadataURIUpdated // Event containing the contract specifics and raw log -// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. -// -// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) -func (_IAVSDirectory *IAVSDirectorySession) GetCurrentSlashableMagnitudes(operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - return _IAVSDirectory.Contract.GetCurrentSlashableMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies) -} + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data -// GetCurrentSlashableMagnitudes is a free data retrieval call binding the contract method 0x1d95b524. -// -// Solidity: function getCurrentSlashableMagnitudes(address operator, address[] strategies) view returns((address,uint32)[], uint64[][]) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetCurrentSlashableMagnitudes(operator common.Address, strategies []common.Address) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - return _IAVSDirectory.Contract.GetCurrentSlashableMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies) + 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 } -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. -// -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_IAVSDirectory *IAVSDirectoryCaller) GetNumOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getNumOperatorsInOperatorSet", operatorSet) - - if err != nil { - return *new(*big.Int), err +// 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 *IAVSDirectoryAVSMetadataURIUpdatedIterator) 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(IAVSDirectoryAVSMetadataURIUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IAVSDirectoryAVSMetadataURIUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. -// -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_IAVSDirectory *IAVSDirectorySession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { - return _IAVSDirectory.Contract.GetNumOperatorsInOperatorSet(&_IAVSDirectory.CallOpts, operatorSet) + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } } -// GetNumOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x1023aa35. -// -// Solidity: function getNumOperatorsInOperatorSet((address,uint32) operatorSet) view returns(uint256) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetNumOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet) (*big.Int, error) { - return _IAVSDirectory.Contract.GetNumOperatorsInOperatorSet(&_IAVSDirectory.CallOpts, operatorSet) +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IAVSDirectoryAVSMetadataURIUpdatedIterator) Error() error { + return it.fail } -// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. -// -// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_IAVSDirectory *IAVSDirectoryCaller) GetOperatorSetsOfOperator(opts *bind.CallOpts, operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getOperatorSetsOfOperator", operator, start, length) - - if err != nil { - return *new([]IAVSDirectoryOperatorSet), err - } - - out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) - - return out0, err - +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAVSDirectoryAVSMetadataURIUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil } -// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. -// -// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_IAVSDirectory *IAVSDirectorySession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { - return _IAVSDirectory.Contract.GetOperatorSetsOfOperator(&_IAVSDirectory.CallOpts, operator, start, length) +// IAVSDirectoryAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the IAVSDirectory contract. +type IAVSDirectoryAVSMetadataURIUpdated struct { + Avs common.Address + MetadataURI string + Raw types.Log // Blockchain specific contextual infos } -// GetOperatorSetsOfOperator is a free data retrieval call binding the contract method 0x16ae76cb. +// FilterAVSMetadataURIUpdated is a free log retrieval operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. // -// Solidity: function getOperatorSetsOfOperator(address operator, uint256 start, uint256 length) view returns((address,uint32)[] operatorSets) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetOperatorSetsOfOperator(operator common.Address, start *big.Int, length *big.Int) ([]IAVSDirectoryOperatorSet, error) { - return _IAVSDirectory.Contract.GetOperatorSetsOfOperator(&_IAVSDirectory.CallOpts, operator, start, length) -} +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*IAVSDirectoryAVSMetadataURIUpdatedIterator, error) { -// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. -// -// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) -func (_IAVSDirectory *IAVSDirectoryCaller) GetOperatorsInOperatorSet(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getOperatorsInOperatorSet", operatorSet, start, length) + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) if err != nil { - return *new([]common.Address), err + return nil, err } - - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - - return out0, err - -} - -// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. -// -// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) -func (_IAVSDirectory *IAVSDirectorySession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { - return _IAVSDirectory.Contract.GetOperatorsInOperatorSet(&_IAVSDirectory.CallOpts, operatorSet, start, length) + return &IAVSDirectoryAVSMetadataURIUpdatedIterator{contract: _IAVSDirectory.contract, event: "AVSMetadataURIUpdated", logs: logs, sub: sub}, nil } -// GetOperatorsInOperatorSet is a free data retrieval call binding the contract method 0x7357723b. +// WatchAVSMetadataURIUpdated is a free log subscription operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. // -// Solidity: function getOperatorsInOperatorSet((address,uint32) operatorSet, uint256 start, uint256 length) view returns(address[] operators) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetOperatorsInOperatorSet(operatorSet IAVSDirectoryOperatorSet, start *big.Int, length *big.Int) ([]common.Address, error) { - return _IAVSDirectory.Contract.GetOperatorsInOperatorSet(&_IAVSDirectory.CallOpts, operatorSet, start, length) -} +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { -// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. -// -// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) -func (_IAVSDirectory *IAVSDirectoryCaller) GetSlashableMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getSlashableMagnitudes", operator, strategies, timestamp) + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "AVSMetadataURIUpdated", avsRule) if err != nil { - return *new([]IAVSDirectoryOperatorSet), *new([][]uint64), err + return nil, err } - - out0 := *abi.ConvertType(out[0], new([]IAVSDirectoryOperatorSet)).(*[]IAVSDirectoryOperatorSet) - out1 := *abi.ConvertType(out[1], new([][]uint64)).(*[][]uint64) - - return out0, out1, err - -} - -// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. -// -// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) -func (_IAVSDirectory *IAVSDirectorySession) GetSlashableMagnitudes(operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - return _IAVSDirectory.Contract.GetSlashableMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies, timestamp) -} - -// GetSlashableMagnitudes is a free data retrieval call binding the contract method 0x43b0592d. -// -// Solidity: function getSlashableMagnitudes(address operator, address[] strategies, uint32 timestamp) view returns((address,uint32)[], uint64[][]) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetSlashableMagnitudes(operator common.Address, strategies []common.Address, timestamp uint32) ([]IAVSDirectoryOperatorSet, [][]uint64, error) { - return _IAVSDirectory.Contract.GetSlashableMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies, timestamp) -} - -// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. -// -// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) -func (_IAVSDirectory *IAVSDirectoryCaller) GetSlashablePPM(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getSlashablePPM", operator, operatorSet, strategies, timestamp, linear) - - if err != nil { - return *new([]*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) - - return out0, err - -} - -// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. -// -// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) -func (_IAVSDirectory *IAVSDirectorySession) GetSlashablePPM(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { - return _IAVSDirectory.Contract.GetSlashablePPM(&_IAVSDirectory.CallOpts, operator, operatorSet, strategies, timestamp, linear) -} - -// GetSlashablePPM is a free data retrieval call binding the contract method 0x1c699d65. -// -// Solidity: function getSlashablePPM(address operator, (address,uint32) operatorSet, address[] strategies, uint32 timestamp, bool linear) view returns(uint24[]) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetSlashablePPM(operator common.Address, operatorSet IAVSDirectoryOperatorSet, strategies []common.Address, timestamp uint32, linear bool) ([]*big.Int, error) { - return _IAVSDirectory.Contract.GetSlashablePPM(&_IAVSDirectory.CallOpts, operator, operatorSet, strategies, timestamp, linear) -} - -// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. -// -// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) -func (_IAVSDirectory *IAVSDirectoryCaller) GetTotalMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getTotalMagnitude", operator, strategy) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. -// -// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) -func (_IAVSDirectory *IAVSDirectorySession) GetTotalMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _IAVSDirectory.Contract.GetTotalMagnitude(&_IAVSDirectory.CallOpts, operator, strategy) -} - -// GetTotalMagnitude is a free data retrieval call binding the contract method 0xb47265e2. -// -// Solidity: function getTotalMagnitude(address operator, address strategy) view returns(uint64) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetTotalMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _IAVSDirectory.Contract.GetTotalMagnitude(&_IAVSDirectory.CallOpts, operator, strategy) -} - -// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. -// -// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) -func (_IAVSDirectory *IAVSDirectoryCaller) GetTotalMagnitudeAtTimestamp(opts *bind.CallOpts, operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getTotalMagnitudeAtTimestamp", operator, strategy, timestamp) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. -// -// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) -func (_IAVSDirectory *IAVSDirectorySession) GetTotalMagnitudeAtTimestamp(operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { - return _IAVSDirectory.Contract.GetTotalMagnitudeAtTimestamp(&_IAVSDirectory.CallOpts, operator, strategy, timestamp) -} - -// GetTotalMagnitudeAtTimestamp is a free data retrieval call binding the contract method 0xdabe97c7. -// -// Solidity: function getTotalMagnitudeAtTimestamp(address operator, address strategy, uint32 timestamp) view returns(uint64) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetTotalMagnitudeAtTimestamp(operator common.Address, strategy common.Address, timestamp uint32) (uint64, error) { - return _IAVSDirectory.Contract.GetTotalMagnitudeAtTimestamp(&_IAVSDirectory.CallOpts, operator, strategy, timestamp) -} - -// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. -// -// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_IAVSDirectory *IAVSDirectoryCaller) GetTotalMagnitudes(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]uint64, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getTotalMagnitudes", operator, strategies) - - if err != nil { - return *new([]uint64), err - } - - out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) - - return out0, err - -} - -// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. -// -// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_IAVSDirectory *IAVSDirectorySession) GetTotalMagnitudes(operator common.Address, strategies []common.Address) ([]uint64, error) { - return _IAVSDirectory.Contract.GetTotalMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies) -} - -// GetTotalMagnitudes is a free data retrieval call binding the contract method 0x39a9a3ed. -// -// Solidity: function getTotalMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetTotalMagnitudes(operator common.Address, strategies []common.Address) ([]uint64, error) { - return _IAVSDirectory.Contract.GetTotalMagnitudes(&_IAVSDirectory.CallOpts, operator, strategies) -} - -// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. -// -// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) -func (_IAVSDirectory *IAVSDirectoryCaller) GetTotalMagnitudesAtTimestamp(opts *bind.CallOpts, operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "getTotalMagnitudesAtTimestamp", operator, strategies, timestamp) - - if err != nil { - return *new([]uint64), err - } - - out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) - - return out0, err - -} - -// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. -// -// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) -func (_IAVSDirectory *IAVSDirectorySession) GetTotalMagnitudesAtTimestamp(operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { - return _IAVSDirectory.Contract.GetTotalMagnitudesAtTimestamp(&_IAVSDirectory.CallOpts, operator, strategies, timestamp) -} - -// GetTotalMagnitudesAtTimestamp is a free data retrieval call binding the contract method 0x858d0b47. -// -// Solidity: function getTotalMagnitudesAtTimestamp(address operator, address[] strategies, uint32 timestamp) view returns(uint64[]) -func (_IAVSDirectory *IAVSDirectoryCallerSession) GetTotalMagnitudesAtTimestamp(operator common.Address, strategies []common.Address, timestamp uint32) ([]uint64, error) { - return _IAVSDirectory.Contract.GetTotalMagnitudesAtTimestamp(&_IAVSDirectory.CallOpts, operator, strategies, timestamp) -} - -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_IAVSDirectory *IAVSDirectoryCaller) InTotalOperatorSets(opts *bind.CallOpts, operator common.Address) (*big.Int, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "inTotalOperatorSets", operator) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_IAVSDirectory *IAVSDirectorySession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _IAVSDirectory.Contract.InTotalOperatorSets(&_IAVSDirectory.CallOpts, operator) -} - -// InTotalOperatorSets is a free data retrieval call binding the contract method 0xcbdf0e42. -// -// Solidity: function inTotalOperatorSets(address operator) view returns(uint256) -func (_IAVSDirectory *IAVSDirectoryCallerSession) InTotalOperatorSets(operator common.Address) (*big.Int, error) { - return _IAVSDirectory.Contract.InTotalOperatorSets(&_IAVSDirectory.CallOpts, operator) -} - -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_IAVSDirectory *IAVSDirectoryCaller) IsMember(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "isMember", operator, operatorSet) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_IAVSDirectory *IAVSDirectorySession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _IAVSDirectory.Contract.IsMember(&_IAVSDirectory.CallOpts, operator, operatorSet) -} - -// IsMember is a free data retrieval call binding the contract method 0xda2ff05d. -// -// Solidity: function isMember(address operator, (address,uint32) operatorSet) view returns(bool) -func (_IAVSDirectory *IAVSDirectoryCallerSession) IsMember(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _IAVSDirectory.Contract.IsMember(&_IAVSDirectory.CallOpts, operator, operatorSet) -} - -// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. -// -// Solidity: function isOperatorSet(address avs, uint32 operatorSetId) view returns(bool) -func (_IAVSDirectory *IAVSDirectoryCaller) IsOperatorSet(opts *bind.CallOpts, avs common.Address, operatorSetId uint32) (bool, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "isOperatorSet", avs, operatorSetId) - - 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 0x84d76f7b. -// -// Solidity: function isOperatorSet(address avs, uint32 operatorSetId) view returns(bool) -func (_IAVSDirectory *IAVSDirectorySession) IsOperatorSet(avs common.Address, operatorSetId uint32) (bool, error) { - return _IAVSDirectory.Contract.IsOperatorSet(&_IAVSDirectory.CallOpts, avs, operatorSetId) -} - -// IsOperatorSet is a free data retrieval call binding the contract method 0x84d76f7b. -// -// Solidity: function isOperatorSet(address avs, uint32 operatorSetId) view returns(bool) -func (_IAVSDirectory *IAVSDirectoryCallerSession) IsOperatorSet(avs common.Address, operatorSetId uint32) (bool, error) { - return _IAVSDirectory.Contract.IsOperatorSet(&_IAVSDirectory.CallOpts, avs, operatorSetId) -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address avs) view returns(bool) -func (_IAVSDirectory *IAVSDirectoryCaller) IsOperatorSetAVS(opts *bind.CallOpts, avs common.Address) (bool, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "isOperatorSetAVS", avs) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address avs) view returns(bool) -func (_IAVSDirectory *IAVSDirectorySession) IsOperatorSetAVS(avs common.Address) (bool, error) { - return _IAVSDirectory.Contract.IsOperatorSetAVS(&_IAVSDirectory.CallOpts, avs) -} - -// IsOperatorSetAVS is a free data retrieval call binding the contract method 0x7673e93a. -// -// Solidity: function isOperatorSetAVS(address avs) view returns(bool) -func (_IAVSDirectory *IAVSDirectoryCallerSession) IsOperatorSetAVS(avs common.Address) (bool, error) { - return _IAVSDirectory.Contract.IsOperatorSetAVS(&_IAVSDirectory.CallOpts, avs) -} - -// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. -// -// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) -func (_IAVSDirectory *IAVSDirectoryCaller) IsOperatorSlashable(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - var out []interface{} - err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectorySession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _IAVSDirectory.Contract.IsOperatorSlashable(&_IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryCallerSession) IsOperatorSlashable(operator common.Address, operatorSet IAVSDirectoryOperatorSet) (bool, error) { - return _IAVSDirectory.Contract.IsOperatorSlashable(&_IAVSDirectory.CallOpts, operator, operatorSet) -} - -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. -// -// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) -func (_IAVSDirectory *IAVSDirectoryCaller) OperatorSaltIsSpent(opts *bind.CallOpts, operator common.Address, salt [32]byte) (bool, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "operatorSaltIsSpent", operator, salt) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. -// -// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) -func (_IAVSDirectory *IAVSDirectorySession) OperatorSaltIsSpent(operator common.Address, salt [32]byte) (bool, error) { - return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) -} - -// OperatorSaltIsSpent is a free data retrieval call binding the contract method 0x374823b5. -// -// Solidity: function operatorSaltIsSpent(address operator, bytes32 salt) view returns(bool) -func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSaltIsSpent(operator common.Address, salt [32]byte) (bool, error) { - return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) -} - -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. -// -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_IAVSDirectory *IAVSDirectoryCaller) OperatorSetMemberAtIndex(opts *bind.CallOpts, operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "operatorSetMemberAtIndex", operatorSet, index) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. -// -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_IAVSDirectory *IAVSDirectorySession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - return _IAVSDirectory.Contract.OperatorSetMemberAtIndex(&_IAVSDirectory.CallOpts, operatorSet, index) -} - -// OperatorSetMemberAtIndex is a free data retrieval call binding the contract method 0x411d415b. -// -// Solidity: function operatorSetMemberAtIndex((address,uint32) operatorSet, uint256 index) view returns(address) -func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSetMemberAtIndex(operatorSet IAVSDirectoryOperatorSet, index *big.Int) (common.Address, error) { - return _IAVSDirectory.Contract.OperatorSetMemberAtIndex(&_IAVSDirectory.CallOpts, operatorSet, index) -} - -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. -// -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_IAVSDirectory *IAVSDirectoryCaller) OperatorSetsMemberOfAtIndex(opts *bind.CallOpts, operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "operatorSetsMemberOfAtIndex", operator, index) - - if err != nil { - return *new(IAVSDirectoryOperatorSet), err - } - - out0 := *abi.ConvertType(out[0], new(IAVSDirectoryOperatorSet)).(*IAVSDirectoryOperatorSet) - - return out0, err - -} - -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. -// -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_IAVSDirectory *IAVSDirectorySession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _IAVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_IAVSDirectory.CallOpts, operator, index) -} - -// OperatorSetsMemberOfAtIndex is a free data retrieval call binding the contract method 0xb5a768ca. -// -// Solidity: function operatorSetsMemberOfAtIndex(address operator, uint256 index) view returns((address,uint32)) -func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSetsMemberOfAtIndex(operator common.Address, index *big.Int) (IAVSDirectoryOperatorSet, error) { - return _IAVSDirectory.Contract.OperatorSetsMemberOfAtIndex(&_IAVSDirectory.CallOpts, operator, index) -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) BecomeOperatorSetAVS(opts *bind.TransactOpts) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "becomeOperatorSetAVS") -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_IAVSDirectory *IAVSDirectorySession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _IAVSDirectory.Contract.BecomeOperatorSetAVS(&_IAVSDirectory.TransactOpts) -} - -// BecomeOperatorSetAVS is a paid mutator transaction binding the contract method 0xaec205c5. -// -// Solidity: function becomeOperatorSetAVS() returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) BecomeOperatorSetAVS() (*types.Transaction, error) { - return _IAVSDirectory.Contract.BecomeOperatorSetAVS(&_IAVSDirectory.TransactOpts) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) CancelSalt(opts *bind.TransactOpts, salt [32]byte) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "cancelSalt", salt) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_IAVSDirectory *IAVSDirectorySession) CancelSalt(salt [32]byte) (*types.Transaction, error) { - return _IAVSDirectory.Contract.CancelSalt(&_IAVSDirectory.TransactOpts, salt) -} - -// CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. -// -// Solidity: function cancelSalt(bytes32 salt) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) CancelSalt(salt [32]byte) (*types.Transaction, error) { - return _IAVSDirectory.Contract.CancelSalt(&_IAVSDirectory.TransactOpts, salt) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) CreateOperatorSets(opts *bind.TransactOpts, operatorSetIds []uint32) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "createOperatorSets", operatorSetIds) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectorySession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.CreateOperatorSets(&_IAVSDirectory.TransactOpts, operatorSetIds) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0xafe02ed5. -// -// Solidity: function createOperatorSets(uint32[] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) CreateOperatorSets(operatorSetIds []uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.CreateOperatorSets(&_IAVSDirectory.TransactOpts, operatorSetIds) -} - -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. -// -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "deregisterOperatorFromAVS", operator) -} - -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. -// -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_IAVSDirectory *IAVSDirectorySession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) -} - -// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da. -// -// Solidity: function deregisterOperatorFromAVS(address operator) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) { - return _IAVSDirectory.Contract.DeregisterOperatorFromAVS(&_IAVSDirectory.TransactOpts, operator) -} - -// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. -// -// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) DeregisterOperatorFromOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "deregisterOperatorFromOperatorSets", operator, operatorSetIds) -} - -// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. -// -// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectorySession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds) -} - -// DeregisterOperatorFromOperatorSets is a paid mutator transaction binding the contract method 0xc1a8e2c5. -// -// Solidity: function deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) DeregisterOperatorFromOperatorSets(operator common.Address, operatorSetIds []uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.DeregisterOperatorFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) ForceDeregisterFromOperatorSets(opts *bind.TransactOpts, operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "forceDeregisterFromOperatorSets", operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectorySession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - -// ForceDeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x3fee332d. -// -// Solidity: function forceDeregisterFromOperatorSets(address operator, address avs, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) ForceDeregisterFromOperatorSets(operator common.Address, avs common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.ForceDeregisterFromOperatorSets(&_IAVSDirectory.TransactOpts, operator, avs, operatorSetIds, operatorSignature) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) MigrateOperatorsToOperatorSets(opts *bind.TransactOpts, operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "migrateOperatorsToOperatorSets", operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectorySession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_IAVSDirectory.TransactOpts, operators, operatorSetIds) -} - -// MigrateOperatorsToOperatorSets is a paid mutator transaction binding the contract method 0xef2dfa8d. -// -// Solidity: function migrateOperatorsToOperatorSets(address[] operators, uint32[][] operatorSetIds) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) MigrateOperatorsToOperatorSets(operators []common.Address, operatorSetIds [][]uint32) (*types.Transaction, error) { - return _IAVSDirectory.Contract.MigrateOperatorsToOperatorSets(&_IAVSDirectory.TransactOpts, operators, operatorSetIds) -} - -// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. -// -// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) ModifyAllocations(opts *bind.TransactOpts, operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "modifyAllocations", operator, allocations, operatorSignature) -} - -// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. -// -// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectorySession) ModifyAllocations(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.ModifyAllocations(&_IAVSDirectory.TransactOpts, operator, allocations, operatorSignature) -} - -// ModifyAllocations is a paid mutator transaction binding the contract method 0xf8e91d16. -// -// Solidity: function modifyAllocations(address operator, (address,uint64,(address,uint32)[],uint64[])[] allocations, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) ModifyAllocations(operator common.Address, allocations []IAVSDirectoryMagnitudeAllocation, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.ModifyAllocations(&_IAVSDirectory.TransactOpts, operator, allocations, operatorSignature) -} - -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. -// -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature) -} - -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. -// -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) -} - -// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d. -// -// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToAVS(&_IAVSDirectory.TransactOpts, operator, operatorSignature) -} - -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. -// -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) RegisterOperatorToOperatorSets(opts *bind.TransactOpts, operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "registerOperatorToOperatorSets", operator, operatorSetIds, operatorSignature) -} - -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. -// -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectorySession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) -} - -// RegisterOperatorToOperatorSets is a paid mutator transaction binding the contract method 0x1e2199e2. -// -// Solidity: function registerOperatorToOperatorSets(address operator, uint32[] operatorSetIds, (bytes,bytes32,uint256) operatorSignature) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) RegisterOperatorToOperatorSets(operator common.Address, operatorSetIds []uint32, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) { - return _IAVSDirectory.Contract.RegisterOperatorToOperatorSets(&_IAVSDirectory.TransactOpts, operator, operatorSetIds, operatorSignature) -} - -// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. -// -// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) SlashOperator(opts *bind.TransactOpts, operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "slashOperator", operator, operatorSetId, strategies, bipsToSlash) -} - -// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. -// -// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() -func (_IAVSDirectory *IAVSDirectorySession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { - return _IAVSDirectory.Contract.SlashOperator(&_IAVSDirectory.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) -} - -// SlashOperator is a paid mutator transaction binding the contract method 0xbd74a06c. -// -// Solidity: function slashOperator(address operator, uint32 operatorSetId, address[] strategies, uint16 bipsToSlash) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) SlashOperator(operator common.Address, operatorSetId uint32, strategies []common.Address, bipsToSlash uint16) (*types.Transaction, error) { - return _IAVSDirectory.Contract.SlashOperator(&_IAVSDirectory.TransactOpts, operator, operatorSetId, strategies, bipsToSlash) -} - -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. -// -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, metadataURI string) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "updateAVSMetadataURI", metadataURI) -} - -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. -// -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_IAVSDirectory *IAVSDirectorySession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) -} - -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355. -// -// Solidity: function updateAVSMetadataURI(string metadataURI) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) UpdateAVSMetadataURI(metadataURI string) (*types.Transaction, error) { - return _IAVSDirectory.Contract.UpdateAVSMetadataURI(&_IAVSDirectory.TransactOpts, metadataURI) -} - -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. -// -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() -func (_IAVSDirectory *IAVSDirectoryTransactor) UpdateFreeMagnitude(opts *bind.TransactOpts, operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { - return _IAVSDirectory.contract.Transact(opts, "updateFreeMagnitude", operator, strategies, numToComplete) -} - -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. -// -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() -func (_IAVSDirectory *IAVSDirectorySession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { - return _IAVSDirectory.Contract.UpdateFreeMagnitude(&_IAVSDirectory.TransactOpts, operator, strategies, numToComplete) -} - -// UpdateFreeMagnitude is a paid mutator transaction binding the contract method 0xce770388. -// -// Solidity: function updateFreeMagnitude(address operator, address[] strategies, uint16[] numToComplete) returns() -func (_IAVSDirectory *IAVSDirectoryTransactorSession) UpdateFreeMagnitude(operator common.Address, strategies []common.Address, numToComplete []uint16) (*types.Transaction, error) { - return _IAVSDirectory.Contract.UpdateFreeMagnitude(&_IAVSDirectory.TransactOpts, operator, strategies, numToComplete) -} - -// IAVSDirectoryAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the IAVSDirectory contract. -type IAVSDirectoryAVSMetadataURIUpdatedIterator struct { - Event *IAVSDirectoryAVSMetadataURIUpdated // 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 *IAVSDirectoryAVSMetadataURIUpdatedIterator) 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(IAVSDirectoryAVSMetadataURIUpdated) - 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(IAVSDirectoryAVSMetadataURIUpdated) - 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 *IAVSDirectoryAVSMetadataURIUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryAVSMetadataURIUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the IAVSDirectory contract. -type IAVSDirectoryAVSMetadataURIUpdated 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 (_IAVSDirectory *IAVSDirectoryFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*IAVSDirectoryAVSMetadataURIUpdatedIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) - if err != nil { - return nil, err - } - return &IAVSDirectoryAVSMetadataURIUpdatedIterator{contract: _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.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(IAVSDirectoryAVSMetadataURIUpdated) - if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*IAVSDirectoryAVSMetadataURIUpdated, error) { - event := new(IAVSDirectoryAVSMetadataURIUpdated) - if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IAVSDirectoryAVSMigratedToOperatorSetsIterator is returned from FilterAVSMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for AVSMigratedToOperatorSets events raised by the IAVSDirectory contract. -type IAVSDirectoryAVSMigratedToOperatorSetsIterator struct { - Event *IAVSDirectoryAVSMigratedToOperatorSets // 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 *IAVSDirectoryAVSMigratedToOperatorSetsIterator) 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(IAVSDirectoryAVSMigratedToOperatorSets) - 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(IAVSDirectoryAVSMigratedToOperatorSets) - 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 *IAVSDirectoryAVSMigratedToOperatorSetsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryAVSMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryAVSMigratedToOperatorSets represents a AVSMigratedToOperatorSets event raised by the IAVSDirectory contract. -type IAVSDirectoryAVSMigratedToOperatorSets struct { - Avs common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAVSMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterAVSMigratedToOperatorSets(opts *bind.FilterOpts, avs []common.Address) (*IAVSDirectoryAVSMigratedToOperatorSetsIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "AVSMigratedToOperatorSets", avsRule) - if err != nil { - return nil, err - } - return &IAVSDirectoryAVSMigratedToOperatorSetsIterator{contract: _IAVSDirectory.contract, event: "AVSMigratedToOperatorSets", logs: logs, sub: sub}, nil -} - -// WatchAVSMigratedToOperatorSets is a free log subscription operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchAVSMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryAVSMigratedToOperatorSets, avs []common.Address) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "AVSMigratedToOperatorSets", 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(IAVSDirectoryAVSMigratedToOperatorSets) - if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", 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 -} - -// ParseAVSMigratedToOperatorSets is a log parse operation binding the contract event 0x702b0c1f6cb1cf511aaa81f72bc05a215bb3497632d72c690c822b044ab494bf. -// -// Solidity: event AVSMigratedToOperatorSets(address indexed avs) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseAVSMigratedToOperatorSets(log types.Log) (*IAVSDirectoryAVSMigratedToOperatorSets, error) { - event := new(IAVSDirectoryAVSMigratedToOperatorSets) - if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMigratedToOperatorSets", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IAVSDirectoryMagnitudeAllocatedIterator is returned from FilterMagnitudeAllocated and is used to iterate over the raw logs and unpacked data for MagnitudeAllocated events raised by the IAVSDirectory contract. -type IAVSDirectoryMagnitudeAllocatedIterator struct { - Event *IAVSDirectoryMagnitudeAllocated // 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 *IAVSDirectoryMagnitudeAllocatedIterator) 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(IAVSDirectoryMagnitudeAllocated) - 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(IAVSDirectoryMagnitudeAllocated) - 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 *IAVSDirectoryMagnitudeAllocatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryMagnitudeAllocatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryMagnitudeAllocated represents a MagnitudeAllocated event raised by the IAVSDirectory contract. -type IAVSDirectoryMagnitudeAllocated struct { - Operator common.Address - Strategy common.Address - OperatorSet IAVSDirectoryOperatorSet - MagnitudeToAllocate uint64 - EffectTimestamp uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMagnitudeAllocated is a free log retrieval operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. -// -// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterMagnitudeAllocated(opts *bind.FilterOpts) (*IAVSDirectoryMagnitudeAllocatedIterator, error) { - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "MagnitudeAllocated") - if err != nil { - return nil, err - } - return &IAVSDirectoryMagnitudeAllocatedIterator{contract: _IAVSDirectory.contract, event: "MagnitudeAllocated", logs: logs, sub: sub}, nil -} - -// WatchMagnitudeAllocated is a free log subscription operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. -// -// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchMagnitudeAllocated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryMagnitudeAllocated) (event.Subscription, error) { - - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "MagnitudeAllocated") - 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(IAVSDirectoryMagnitudeAllocated) - if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeAllocated", 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 -} - -// ParseMagnitudeAllocated is a log parse operation binding the contract event 0x6d7d0079582cb2c5e70d4135b37f36711415ee6c260778b716bd65e026eb4f1a. -// -// Solidity: event MagnitudeAllocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToAllocate, uint32 effectTimestamp) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseMagnitudeAllocated(log types.Log) (*IAVSDirectoryMagnitudeAllocated, error) { - event := new(IAVSDirectoryMagnitudeAllocated) - if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeAllocated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IAVSDirectoryMagnitudeDeallocationCompletedIterator is returned from FilterMagnitudeDeallocationCompleted and is used to iterate over the raw logs and unpacked data for MagnitudeDeallocationCompleted events raised by the IAVSDirectory contract. -type IAVSDirectoryMagnitudeDeallocationCompletedIterator struct { - Event *IAVSDirectoryMagnitudeDeallocationCompleted // 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 *IAVSDirectoryMagnitudeDeallocationCompletedIterator) 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(IAVSDirectoryMagnitudeDeallocationCompleted) - 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(IAVSDirectoryMagnitudeDeallocationCompleted) - 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 *IAVSDirectoryMagnitudeDeallocationCompletedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryMagnitudeDeallocationCompletedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryMagnitudeDeallocationCompleted represents a MagnitudeDeallocationCompleted event raised by the IAVSDirectory contract. -type IAVSDirectoryMagnitudeDeallocationCompleted struct { - Operator common.Address - Strategy common.Address - OperatorSet IAVSDirectoryOperatorSet - FreeMagnitudeAdded uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMagnitudeDeallocationCompleted is a free log retrieval operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. -// -// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterMagnitudeDeallocationCompleted(opts *bind.FilterOpts) (*IAVSDirectoryMagnitudeDeallocationCompletedIterator, error) { - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "MagnitudeDeallocationCompleted") - if err != nil { - return nil, err - } - return &IAVSDirectoryMagnitudeDeallocationCompletedIterator{contract: _IAVSDirectory.contract, event: "MagnitudeDeallocationCompleted", logs: logs, sub: sub}, nil -} - -// WatchMagnitudeDeallocationCompleted is a free log subscription operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. -// -// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchMagnitudeDeallocationCompleted(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryMagnitudeDeallocationCompleted) (event.Subscription, error) { - - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "MagnitudeDeallocationCompleted") - 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(IAVSDirectoryMagnitudeDeallocationCompleted) - if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", 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 -} - -// ParseMagnitudeDeallocationCompleted is a log parse operation binding the contract event 0x1e5c8e13c62c31d6252ac205e592477d643c7e95831d5b46d99a3c60c2fad8db. -// -// Solidity: event MagnitudeDeallocationCompleted(address operator, address strategy, (address,uint32) operatorSet, uint64 freeMagnitudeAdded) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseMagnitudeDeallocationCompleted(log types.Log) (*IAVSDirectoryMagnitudeDeallocationCompleted, error) { - event := new(IAVSDirectoryMagnitudeDeallocationCompleted) - if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeDeallocationCompleted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IAVSDirectoryMagnitudeQueueDeallocatedIterator is returned from FilterMagnitudeQueueDeallocated and is used to iterate over the raw logs and unpacked data for MagnitudeQueueDeallocated events raised by the IAVSDirectory contract. -type IAVSDirectoryMagnitudeQueueDeallocatedIterator struct { - Event *IAVSDirectoryMagnitudeQueueDeallocated // 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 *IAVSDirectoryMagnitudeQueueDeallocatedIterator) 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(IAVSDirectoryMagnitudeQueueDeallocated) - 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(IAVSDirectoryMagnitudeQueueDeallocated) - 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 *IAVSDirectoryMagnitudeQueueDeallocatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryMagnitudeQueueDeallocatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryMagnitudeQueueDeallocated represents a MagnitudeQueueDeallocated event raised by the IAVSDirectory contract. -type IAVSDirectoryMagnitudeQueueDeallocated struct { - Operator common.Address - Strategy common.Address - OperatorSet IAVSDirectoryOperatorSet - MagnitudeToDeallocate uint64 - CompletableTimestamp uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterMagnitudeQueueDeallocated is a free log retrieval operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. -// -// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterMagnitudeQueueDeallocated(opts *bind.FilterOpts) (*IAVSDirectoryMagnitudeQueueDeallocatedIterator, error) { - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "MagnitudeQueueDeallocated") - if err != nil { - return nil, err - } - return &IAVSDirectoryMagnitudeQueueDeallocatedIterator{contract: _IAVSDirectory.contract, event: "MagnitudeQueueDeallocated", logs: logs, sub: sub}, nil -} - -// WatchMagnitudeQueueDeallocated is a free log subscription operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. -// -// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchMagnitudeQueueDeallocated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryMagnitudeQueueDeallocated) (event.Subscription, error) { - - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "MagnitudeQueueDeallocated") - 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(IAVSDirectoryMagnitudeQueueDeallocated) - if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeQueueDeallocated", 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 -} - -// ParseMagnitudeQueueDeallocated is a log parse operation binding the contract event 0x2e68db1fe51107d7e451ae268d1631796989ab9d7925054e9b247854cb5be950. -// -// Solidity: event MagnitudeQueueDeallocated(address operator, address strategy, (address,uint32) operatorSet, uint64 magnitudeToDeallocate, uint32 completableTimestamp) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseMagnitudeQueueDeallocated(log types.Log) (*IAVSDirectoryMagnitudeQueueDeallocated, error) { - event := new(IAVSDirectoryMagnitudeQueueDeallocated) - if err := _IAVSDirectory.contract.UnpackLog(event, "MagnitudeQueueDeallocated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { - Event *IAVSDirectoryOperatorAVSRegistrationStatusUpdated // 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 *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) 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(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) - 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(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) - 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 *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorAVSRegistrationStatusUpdated struct { - Operator common.Address - Avs common.Address - Status uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. -// -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) - if err != nil { - return nil, err - } - return &IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _IAVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil -} - -// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. -// -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, 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(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", 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 -} - -// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. -// -// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { - event := new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IAVSDirectoryOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorAddedToOperatorSetIterator struct { - Event *IAVSDirectoryOperatorAddedToOperatorSet // 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 *IAVSDirectoryOperatorAddedToOperatorSetIterator) 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(IAVSDirectoryOperatorAddedToOperatorSet) - 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(IAVSDirectoryOperatorAddedToOperatorSet) - 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 *IAVSDirectoryOperatorAddedToOperatorSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryOperatorAddedToOperatorSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorAddedToOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - 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 (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*IAVSDirectoryOperatorAddedToOperatorSetIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) - if err != nil { - return nil, err - } - return &IAVSDirectoryOperatorAddedToOperatorSetIterator{contract: _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - - logs, sub, err := _IAVSDirectory.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(IAVSDirectoryOperatorAddedToOperatorSet) - if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*IAVSDirectoryOperatorAddedToOperatorSet, error) { - event := new(IAVSDirectoryOperatorAddedToOperatorSet) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IAVSDirectoryOperatorMigratedToOperatorSetsIterator is returned from FilterOperatorMigratedToOperatorSets and is used to iterate over the raw logs and unpacked data for OperatorMigratedToOperatorSets events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorMigratedToOperatorSetsIterator struct { - Event *IAVSDirectoryOperatorMigratedToOperatorSets // 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 *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) 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(IAVSDirectoryOperatorMigratedToOperatorSets) - 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(IAVSDirectoryOperatorMigratedToOperatorSets) - 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 *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryOperatorMigratedToOperatorSetsIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryOperatorMigratedToOperatorSets represents a OperatorMigratedToOperatorSets event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorMigratedToOperatorSets struct { - Operator common.Address - Avs common.Address - OperatorSetIds []uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorMigratedToOperatorSets is a free log retrieval operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorMigratedToOperatorSets(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*IAVSDirectoryOperatorMigratedToOperatorSetsIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, avsRule) - if err != nil { - return nil, err - } - return &IAVSDirectoryOperatorMigratedToOperatorSetsIterator{contract: _IAVSDirectory.contract, event: "OperatorMigratedToOperatorSets", logs: logs, sub: sub}, nil -} - -// WatchOperatorMigratedToOperatorSets is a free log subscription operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. -// -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorMigratedToOperatorSets(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorMigratedToOperatorSets, operator []common.Address, avs []common.Address) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorMigratedToOperatorSets", operatorRule, 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(IAVSDirectoryOperatorMigratedToOperatorSets) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { - return err - } - event.Raw = log + 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(IAVSDirectoryAVSMetadataURIUpdated) + if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { + return err + } + event.Raw = log select { case sink <- event: @@ -2425,21 +476,21 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorMigratedToOperatorSets }), nil } -// ParseOperatorMigratedToOperatorSets is a log parse operation binding the contract event 0x54f33cfdd1ca703d795986b986fd47d742eab1904ecd2a5fdb8d6595e5904a01. +// ParseAVSMetadataURIUpdated is a log parse operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. // -// Solidity: event OperatorMigratedToOperatorSets(address indexed operator, address indexed avs, uint32[] operatorSetIds) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorMigratedToOperatorSets(log types.Log) (*IAVSDirectoryOperatorMigratedToOperatorSets, error) { - event := new(IAVSDirectoryOperatorMigratedToOperatorSets) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorMigratedToOperatorSets", log); err != nil { +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*IAVSDirectoryAVSMetadataURIUpdated, error) { + event := new(IAVSDirectoryAVSMetadataURIUpdated) + if err := _IAVSDirectory.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IAVSDirectoryOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorRemovedFromOperatorSetIterator struct { - Event *IAVSDirectoryOperatorRemovedFromOperatorSet // Event containing the contract specifics and raw log +// IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator is returned from FilterOperatorAVSRegistrationStatusUpdated and is used to iterate over the raw logs and unpacked data for OperatorAVSRegistrationStatusUpdated events raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator struct { + Event *IAVSDirectoryOperatorAVSRegistrationStatusUpdated // 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 @@ -2453,7 +504,7 @@ type IAVSDirectoryOperatorRemovedFromOperatorSetIterator 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 *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { +func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2462,7 +513,7 @@ func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IAVSDirectoryOperatorRemovedFromOperatorSet) + it.Event = new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2477,7 +528,7 @@ func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IAVSDirectoryOperatorRemovedFromOperatorSet) + it.Event = new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2493,323 +544,61 @@ func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Error() error { +func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IAVSDirectoryOperatorRemovedFromOperatorSetIterator) Close() error { +func (it *IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// IAVSDirectoryOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorRemovedFromOperatorSet struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - Raw types.Log // Blockchain specific contextual infos +// IAVSDirectoryOperatorAVSRegistrationStatusUpdated represents a OperatorAVSRegistrationStatusUpdated event raised by the IAVSDirectory contract. +type IAVSDirectoryOperatorAVSRegistrationStatusUpdated struct { + Operator common.Address + Avs common.Address + Status uint8 + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// FilterOperatorAVSRegistrationStatusUpdated is a free log retrieval operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*IAVSDirectoryOperatorRemovedFromOperatorSetIterator, error) { +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorAVSRegistrationStatusUpdated(opts *bind.FilterOpts, operator []common.Address, avs []common.Address) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator, error) { var operatorRule []interface{} for _, operatorItem := range operator { operatorRule = append(operatorRule, operatorItem) } + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) if err != nil { return nil, err } - return &IAVSDirectoryOperatorRemovedFromOperatorSetIterator{contract: _IAVSDirectory.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil + return &IAVSDirectoryOperatorAVSRegistrationStatusUpdatedIterator{contract: _IAVSDirectory.contract, event: "OperatorAVSRegistrationStatusUpdated", logs: logs, sub: sub}, nil } -// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// WatchOperatorAVSRegistrationStatusUpdated is a free log subscription operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. // -// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorAVSRegistrationStatusUpdated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorAVSRegistrationStatusUpdated, operator []common.Address, avs []common.Address) (event.Subscription, error) { var operatorRule []interface{} for _, operatorItem := range operator { operatorRule = append(operatorRule, operatorItem) } - - logs, sub, err := _IAVSDirectory.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(IAVSDirectoryOperatorRemovedFromOperatorSet) - if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*IAVSDirectoryOperatorRemovedFromOperatorSet, error) { - event := new(IAVSDirectoryOperatorRemovedFromOperatorSet) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IAVSDirectoryOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorSetCreatedIterator struct { - Event *IAVSDirectoryOperatorSetCreated // 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 *IAVSDirectoryOperatorSetCreatedIterator) 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(IAVSDirectoryOperatorSetCreated) - 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(IAVSDirectoryOperatorSetCreated) - 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 *IAVSDirectoryOperatorSetCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryOperatorSetCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryOperatorSetCreated represents a OperatorSetCreated event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorSetCreated struct { - OperatorSet IAVSDirectoryOperatorSet - 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 (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*IAVSDirectoryOperatorSetCreatedIterator, error) { - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorSetCreated") - if err != nil { - return nil, err - } - return &IAVSDirectoryOperatorSetCreatedIterator{contract: _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorSetCreated) (event.Subscription, error) { - - logs, sub, err := _IAVSDirectory.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(IAVSDirectoryOperatorSetCreated) - if err := _IAVSDirectory.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 (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorSetCreated(log types.Log) (*IAVSDirectoryOperatorSetCreated, error) { - event := new(IAVSDirectoryOperatorSetCreated) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IAVSDirectoryOperatorSlashedIterator is returned from FilterOperatorSlashed and is used to iterate over the raw logs and unpacked data for OperatorSlashed events raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorSlashedIterator struct { - Event *IAVSDirectoryOperatorSlashed // 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 *IAVSDirectoryOperatorSlashedIterator) 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(IAVSDirectoryOperatorSlashed) - 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(IAVSDirectoryOperatorSlashed) - 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 *IAVSDirectoryOperatorSlashedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IAVSDirectoryOperatorSlashedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IAVSDirectoryOperatorSlashed represents a OperatorSlashed event raised by the IAVSDirectory contract. -type IAVSDirectoryOperatorSlashed struct { - Operator common.Address - OperatorSetId uint32 - Strategy common.Address - BipsToSlash uint16 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorSlashed is a free log retrieval operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. -// -// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) -func (_IAVSDirectory *IAVSDirectoryFilterer) FilterOperatorSlashed(opts *bind.FilterOpts) (*IAVSDirectoryOperatorSlashedIterator, error) { - - logs, sub, err := _IAVSDirectory.contract.FilterLogs(opts, "OperatorSlashed") - if err != nil { - return nil, err + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) } - return &IAVSDirectoryOperatorSlashedIterator{contract: _IAVSDirectory.contract, event: "OperatorSlashed", logs: logs, sub: sub}, nil -} - -// WatchOperatorSlashed is a free log subscription operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. -// -// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) -func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorSlashed(opts *bind.WatchOpts, sink chan<- *IAVSDirectoryOperatorSlashed) (event.Subscription, error) { - logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorSlashed") + logs, sub, err := _IAVSDirectory.contract.WatchLogs(opts, "OperatorAVSRegistrationStatusUpdated", operatorRule, avsRule) if err != nil { return nil, err } @@ -2819,8 +608,8 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorSlashed(opts *bind.Wat select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IAVSDirectoryOperatorSlashed) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorSlashed", log); err != nil { + event := new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { return err } event.Raw = log @@ -2841,12 +630,12 @@ func (_IAVSDirectory *IAVSDirectoryFilterer) WatchOperatorSlashed(opts *bind.Wat }), nil } -// ParseOperatorSlashed is a log parse operation binding the contract event 0xe672839d3c371691acdb52de9fefc94b3dbf407dc0920ef566c7c059ad575b1c. +// ParseOperatorAVSRegistrationStatusUpdated is a log parse operation binding the contract event 0xf0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41. // -// Solidity: event OperatorSlashed(address operator, uint32 operatorSetId, address strategy, uint16 bipsToSlash) -func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorSlashed(log types.Log) (*IAVSDirectoryOperatorSlashed, error) { - event := new(IAVSDirectoryOperatorSlashed) - if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorSlashed", log); err != nil { +// Solidity: event OperatorAVSRegistrationStatusUpdated(address indexed operator, address indexed avs, uint8 status) +func (_IAVSDirectory *IAVSDirectoryFilterer) ParseOperatorAVSRegistrationStatusUpdated(log types.Log) (*IAVSDirectoryOperatorAVSRegistrationStatusUpdated, error) { + event := new(IAVSDirectoryOperatorAVSRegistrationStatusUpdated) + if err := _IAVSDirectory.contract.UnpackLog(event, "OperatorAVSRegistrationStatusUpdated", log); err != nil { return nil, err } event.Raw = log diff --git a/pkg/bindings/IDelegationFaucet/binding.go b/pkg/bindings/IDelegationFaucet/binding.go index c66653df5..9486264d0 100644 --- a/pkg/bindings/IDelegationFaucet/binding.go +++ b/pkg/bindings/IDelegationFaucet/binding.go @@ -38,13 +38,13 @@ type IDelegationManagerQueuedWithdrawalParams struct { // IDelegationManagerWithdrawal is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerWithdrawal struct { - Staker common.Address - DelegatedTo common.Address - Withdrawer common.Address - Nonce *big.Int - StartTimestamp uint32 - Strategies []common.Address - ScaledShares []*big.Int + Staker common.Address + DelegatedTo common.Address + Withdrawer common.Address + Nonce *big.Int + StartBlock uint32 + Strategies []common.Address + Shares []*big.Int } // ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. @@ -55,7 +55,7 @@ type ISignatureUtilsSignatureWithExpiry struct { // IDelegationFaucetMetaData contains all meta data concerning the IDelegationFaucet contract. var IDelegationFaucetMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"callAddress\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"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\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getStaker\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"mintDepositAndDelegate\",\"inputs\":[{\"name\":\"_operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_depositAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queueWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"callAddress\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"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\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getStaker\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"mintDepositAndDelegate\",\"inputs\":[{\"name\":\"_operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_depositAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queueWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"}]", } // IDelegationFaucetABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IDelegationManager/binding.go b/pkg/bindings/IDelegationManager/binding.go index 44d76dc0d..2f5320df7 100644 --- a/pkg/bindings/IDelegationManager/binding.go +++ b/pkg/bindings/IDelegationManager/binding.go @@ -29,12 +29,6 @@ var ( _ = abi.ConvertType ) -// IDelegationManagerAllocationDelayDetails is an auto generated low-level Go binding around an user-defined struct. -type IDelegationManagerAllocationDelayDetails struct { - IsSet bool - AllocationDelay uint32 -} - // IDelegationManagerOperatorDetails is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerOperatorDetails struct { DeprecatedEarningsReceiver common.Address @@ -51,13 +45,13 @@ type IDelegationManagerQueuedWithdrawalParams struct { // IDelegationManagerWithdrawal is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerWithdrawal struct { - Staker common.Address - DelegatedTo common.Address - Withdrawer common.Address - Nonce *big.Int - StartTimestamp uint32 - Strategies []common.Address - ScaledShares []*big.Int + Staker common.Address + DelegatedTo common.Address + Withdrawer common.Address + Nonce *big.Int + StartBlock uint32 + Strategies []common.Address + Shares []*big.Int } // ISignatureUtilsSignatureWithExpiry is an auto generated low-level Go binding around an user-defined struct. @@ -620,6 +614,37 @@ func (_IDelegationManager *IDelegationManagerCallerSession) DomainSeparator() ([ return _IDelegationManager.Contract.DomainSeparator(&_IDelegationManager.CallOpts) } +// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. +// +// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) +func (_IDelegationManager *IDelegationManagerCaller) GetOperatorShares(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]*big.Int, error) { + var out []interface{} + err := _IDelegationManager.contract.Call(opts, &out, "getOperatorShares", operator, strategies) + + if err != nil { + return *new([]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int) + + return out0, err + +} + +// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. +// +// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) +func (_IDelegationManager *IDelegationManagerSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { + return _IDelegationManager.Contract.GetOperatorShares(&_IDelegationManager.CallOpts, operator, strategies) +} + +// GetOperatorShares is a free data retrieval call binding the contract method 0x90041347. +// +// Solidity: function getOperatorShares(address operator, address[] strategies) view returns(uint256[]) +func (_IDelegationManager *IDelegationManagerCallerSession) GetOperatorShares(operator common.Address, strategies []common.Address) ([]*big.Int, error) { + return _IDelegationManager.Contract.GetOperatorShares(&_IDelegationManager.CallOpts, operator, strategies) +} + // GetWithdrawalDelay is a free data retrieval call binding the contract method 0x0449ca39. // // Solidity: function getWithdrawalDelay(address[] strategies) view returns(uint256) @@ -744,37 +769,6 @@ func (_IDelegationManager *IDelegationManagerCallerSession) MinWithdrawalDelayBl return _IDelegationManager.Contract.MinWithdrawalDelayBlocks(&_IDelegationManager.CallOpts) } -// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. -// -// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) -func (_IDelegationManager *IDelegationManagerCaller) OperatorAllocationDelay(opts *bind.CallOpts, operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { - var out []interface{} - err := _IDelegationManager.contract.Call(opts, &out, "operatorAllocationDelay", operator) - - if err != nil { - return *new(IDelegationManagerAllocationDelayDetails), err - } - - out0 := *abi.ConvertType(out[0], new(IDelegationManagerAllocationDelayDetails)).(*IDelegationManagerAllocationDelayDetails) - - return out0, err - -} - -// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. -// -// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) -func (_IDelegationManager *IDelegationManagerSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { - return _IDelegationManager.Contract.OperatorAllocationDelay(&_IDelegationManager.CallOpts, operator) -} - -// OperatorAllocationDelay is a free data retrieval call binding the contract method 0x89829397. -// -// Solidity: function operatorAllocationDelay(address operator) view returns((bool,uint32)) -func (_IDelegationManager *IDelegationManagerCallerSession) OperatorAllocationDelay(operator common.Address) (IDelegationManagerAllocationDelayDetails, error) { - return _IDelegationManager.Contract.OperatorAllocationDelay(&_IDelegationManager.CallOpts, operator) -} - // OperatorDetails is a free data retrieval call binding the contract method 0xc5e480db. // // Solidity: function operatorDetails(address operator) view returns((address,address,uint32)) @@ -806,12 +800,12 @@ func (_IDelegationManager *IDelegationManagerCallerSession) OperatorDetails(oper return _IDelegationManager.Contract.OperatorDetails(&_IDelegationManager.CallOpts, operator) } -// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorScaledShares(address operator, address strategy) view returns(uint256) -func (_IDelegationManager *IDelegationManagerCaller) OperatorScaledShares(opts *bind.CallOpts, operator common.Address, strategy common.Address) (*big.Int, error) { +// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCaller) OperatorShares(opts *bind.CallOpts, operator common.Address, strategy common.Address) (*big.Int, error) { var out []interface{} - err := _IDelegationManager.contract.Call(opts, &out, "operatorScaledShares", operator, strategy) + err := _IDelegationManager.contract.Call(opts, &out, "operatorShares", operator, strategy) if err != nil { return *new(*big.Int), err @@ -823,18 +817,18 @@ func (_IDelegationManager *IDelegationManagerCaller) OperatorScaledShares(opts * } -// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorScaledShares(address operator, address strategy) view returns(uint256) -func (_IDelegationManager *IDelegationManagerSession) OperatorScaledShares(operator common.Address, strategy common.Address) (*big.Int, error) { - return _IDelegationManager.Contract.OperatorScaledShares(&_IDelegationManager.CallOpts, operator, strategy) +// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) +func (_IDelegationManager *IDelegationManagerSession) OperatorShares(operator common.Address, strategy common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.OperatorShares(&_IDelegationManager.CallOpts, operator, strategy) } -// OperatorScaledShares is a free data retrieval call binding the contract method 0x9fb4ee32. +// OperatorShares is a free data retrieval call binding the contract method 0x778e55f3. // -// Solidity: function operatorScaledShares(address operator, address strategy) view returns(uint256) -func (_IDelegationManager *IDelegationManagerCallerSession) OperatorScaledShares(operator common.Address, strategy common.Address) (*big.Int, error) { - return _IDelegationManager.Contract.OperatorScaledShares(&_IDelegationManager.CallOpts, operator, strategy) +// Solidity: function operatorShares(address operator, address strategy) view returns(uint256) +func (_IDelegationManager *IDelegationManagerCallerSession) OperatorShares(operator common.Address, strategy common.Address) (*big.Int, error) { + return _IDelegationManager.Contract.OperatorShares(&_IDelegationManager.CallOpts, operator, strategy) } // StakerNonce is a free data retrieval call binding the contract method 0x29c77d4f. @@ -930,67 +924,67 @@ func (_IDelegationManager *IDelegationManagerCallerSession) StrategyWithdrawalDe return _IDelegationManager.Contract.StrategyWithdrawalDelayBlocks(&_IDelegationManager.CallOpts, strategy) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { - return _IDelegationManager.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerTransactor) CompleteQueuedWithdrawal(opts *bind.TransactOpts, withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "completeQueuedWithdrawal", withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { - return _IDelegationManager.Contract.CompleteQueuedWithdrawal(&_IDelegationManager.TransactOpts, withdrawal, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _IDelegationManager.Contract.CompleteQueuedWithdrawal(&_IDelegationManager.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) } -// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. +// CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0x60d7faed. // -// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, receiveAsTokens bool) (*types.Transaction, error) { - return _IDelegationManager.Contract.CompleteQueuedWithdrawal(&_IDelegationManager.TransactOpts, withdrawal, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, uint256 middlewareTimesIndex, bool receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) CompleteQueuedWithdrawal(withdrawal IDelegationManagerWithdrawal, tokens []common.Address, middlewareTimesIndex *big.Int, receiveAsTokens bool) (*types.Transaction, error) { + return _IDelegationManager.Contract.CompleteQueuedWithdrawal(&_IDelegationManager.TransactOpts, withdrawal, tokens, middlewareTimesIndex, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { - return _IDelegationManager.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerTransactor) CompleteQueuedWithdrawals(opts *bind.TransactOpts, withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "completeQueuedWithdrawals", withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { - return _IDelegationManager.Contract.CompleteQueuedWithdrawals(&_IDelegationManager.TransactOpts, withdrawals, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _IDelegationManager.Contract.CompleteQueuedWithdrawals(&_IDelegationManager.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) } -// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x9435bb43. +// CompleteQueuedWithdrawals is a paid mutator transaction binding the contract method 0x33404396. // -// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, bool[] receiveAsTokens) returns() -func (_IDelegationManager *IDelegationManagerTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, receiveAsTokens []bool) (*types.Transaction, error) { - return _IDelegationManager.Contract.CompleteQueuedWithdrawals(&_IDelegationManager.TransactOpts, withdrawals, tokens, receiveAsTokens) +// Solidity: function completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) CompleteQueuedWithdrawals(withdrawals []IDelegationManagerWithdrawal, tokens [][]common.Address, middlewareTimesIndexes []*big.Int, receiveAsTokens []bool) (*types.Transaction, error) { + return _IDelegationManager.Contract.CompleteQueuedWithdrawals(&_IDelegationManager.TransactOpts, withdrawals, tokens, middlewareTimesIndexes, receiveAsTokens) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() -func (_IDelegationManager *IDelegationManagerTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, removedShares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_IDelegationManager *IDelegationManagerTransactor) DecreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "decreaseDelegatedShares", staker, strategy, shares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() -func (_IDelegationManager *IDelegationManagerSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.Contract.DecreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, removedShares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_IDelegationManager *IDelegationManagerSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.Contract.DecreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, shares) } // DecreaseDelegatedShares is a paid mutator transaction binding the contract method 0x132d4967. // -// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 removedShares) returns() -func (_IDelegationManager *IDelegationManagerTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, removedShares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.Contract.DecreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, removedShares) +// Solidity: function decreaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) DecreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.Contract.DecreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, shares) } // DelegateTo is a paid mutator transaction binding the contract method 0xeea9064b. @@ -1035,46 +1029,25 @@ func (_IDelegationManager *IDelegationManagerTransactorSession) DelegateToBySign return _IDelegationManager.Contract.DelegateToBySignature(&_IDelegationManager.TransactOpts, staker, operator, stakerSignatureAndExpiry, approverSignatureAndExpiry, approverSalt) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. -// -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() -func (_IDelegationManager *IDelegationManagerTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, existingShares, addedShares) -} - -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() -func (_IDelegationManager *IDelegationManagerSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.Contract.IncreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, existingShares, addedShares) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_IDelegationManager *IDelegationManagerTransactor) IncreaseDelegatedShares(opts *bind.TransactOpts, staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "increaseDelegatedShares", staker, strategy, shares) } -// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x3c651cf2. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. // -// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 existingShares, uint256 addedShares) returns() -func (_IDelegationManager *IDelegationManagerTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, existingShares *big.Int, addedShares *big.Int) (*types.Transaction, error) { - return _IDelegationManager.Contract.IncreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, existingShares, addedShares) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_IDelegationManager *IDelegationManagerSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.Contract.IncreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, shares) } -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. +// IncreaseDelegatedShares is a paid mutator transaction binding the contract method 0x28a573ae. // -// Solidity: function initializeAllocationDelay(uint32 delay) returns() -func (_IDelegationManager *IDelegationManagerTransactor) InitializeAllocationDelay(opts *bind.TransactOpts, delay uint32) (*types.Transaction, error) { - return _IDelegationManager.contract.Transact(opts, "initializeAllocationDelay", delay) -} - -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. -// -// Solidity: function initializeAllocationDelay(uint32 delay) returns() -func (_IDelegationManager *IDelegationManagerSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { - return _IDelegationManager.Contract.InitializeAllocationDelay(&_IDelegationManager.TransactOpts, delay) -} - -// InitializeAllocationDelay is a paid mutator transaction binding the contract method 0x0de5495d. -// -// Solidity: function initializeAllocationDelay(uint32 delay) returns() -func (_IDelegationManager *IDelegationManagerTransactorSession) InitializeAllocationDelay(delay uint32) (*types.Transaction, error) { - return _IDelegationManager.Contract.InitializeAllocationDelay(&_IDelegationManager.TransactOpts, delay) +// Solidity: function increaseDelegatedShares(address staker, address strategy, uint256 shares) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) IncreaseDelegatedShares(staker common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { + return _IDelegationManager.Contract.IncreaseDelegatedShares(&_IDelegationManager.TransactOpts, staker, strategy, shares) } // ModifyOperatorDetails is a paid mutator transaction binding the contract method 0xf16172b0. @@ -1119,25 +1092,25 @@ func (_IDelegationManager *IDelegationManagerTransactorSession) QueueWithdrawals return _IDelegationManager.Contract.QueueWithdrawals(&_IDelegationManager.TransactOpts, queuedWithdrawalParams) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() -func (_IDelegationManager *IDelegationManagerTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { - return _IDelegationManager.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, allocationDelay, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_IDelegationManager *IDelegationManagerTransactor) RegisterAsOperator(opts *bind.TransactOpts, registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _IDelegationManager.contract.Transact(opts, "registerAsOperator", registeringOperatorDetails, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() -func (_IDelegationManager *IDelegationManagerSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { - return _IDelegationManager.Contract.RegisterAsOperator(&_IDelegationManager.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_IDelegationManager *IDelegationManagerSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _IDelegationManager.Contract.RegisterAsOperator(&_IDelegationManager.TransactOpts, registeringOperatorDetails, metadataURI) } -// RegisterAsOperator is a paid mutator transaction binding the contract method 0x49730060. +// RegisterAsOperator is a paid mutator transaction binding the contract method 0x0f589e59. // -// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, uint32 allocationDelay, string metadataURI) returns() -func (_IDelegationManager *IDelegationManagerTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, allocationDelay uint32, metadataURI string) (*types.Transaction, error) { - return _IDelegationManager.Contract.RegisterAsOperator(&_IDelegationManager.TransactOpts, registeringOperatorDetails, allocationDelay, metadataURI) +// Solidity: function registerAsOperator((address,address,uint32) registeringOperatorDetails, string metadataURI) returns() +func (_IDelegationManager *IDelegationManagerTransactorSession) RegisterAsOperator(registeringOperatorDetails IDelegationManagerOperatorDetails, metadataURI string) (*types.Transaction, error) { + return _IDelegationManager.Contract.RegisterAsOperator(&_IDelegationManager.TransactOpts, registeringOperatorDetails, metadataURI) } // Undelegate is a paid mutator transaction binding the contract method 0xda8be864. @@ -2641,142 +2614,6 @@ func (_IDelegationManager *IDelegationManagerFilterer) ParseStrategyWithdrawalDe return event, nil } -// IDelegationManagerStrategyWithdrawalDelaySetIterator is returned from FilterStrategyWithdrawalDelaySet and is used to iterate over the raw logs and unpacked data for StrategyWithdrawalDelaySet events raised by the IDelegationManager contract. -type IDelegationManagerStrategyWithdrawalDelaySetIterator struct { - Event *IDelegationManagerStrategyWithdrawalDelaySet // 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 *IDelegationManagerStrategyWithdrawalDelaySetIterator) 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(IDelegationManagerStrategyWithdrawalDelaySet) - 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(IDelegationManagerStrategyWithdrawalDelaySet) - 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 *IDelegationManagerStrategyWithdrawalDelaySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IDelegationManagerStrategyWithdrawalDelaySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IDelegationManagerStrategyWithdrawalDelaySet represents a StrategyWithdrawalDelaySet event raised by the IDelegationManager contract. -type IDelegationManagerStrategyWithdrawalDelaySet struct { - Strategy common.Address - PreviousValue *big.Int - NewValue *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStrategyWithdrawalDelaySet is a free log retrieval operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. -// -// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) -func (_IDelegationManager *IDelegationManagerFilterer) FilterStrategyWithdrawalDelaySet(opts *bind.FilterOpts) (*IDelegationManagerStrategyWithdrawalDelaySetIterator, error) { - - logs, sub, err := _IDelegationManager.contract.FilterLogs(opts, "StrategyWithdrawalDelaySet") - if err != nil { - return nil, err - } - return &IDelegationManagerStrategyWithdrawalDelaySetIterator{contract: _IDelegationManager.contract, event: "StrategyWithdrawalDelaySet", logs: logs, sub: sub}, nil -} - -// WatchStrategyWithdrawalDelaySet is a free log subscription operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. -// -// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) -func (_IDelegationManager *IDelegationManagerFilterer) WatchStrategyWithdrawalDelaySet(opts *bind.WatchOpts, sink chan<- *IDelegationManagerStrategyWithdrawalDelaySet) (event.Subscription, error) { - - logs, sub, err := _IDelegationManager.contract.WatchLogs(opts, "StrategyWithdrawalDelaySet") - 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(IDelegationManagerStrategyWithdrawalDelaySet) - if err := _IDelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", 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 -} - -// ParseStrategyWithdrawalDelaySet is a log parse operation binding the contract event 0x4be295c8d739bae6e60f607ccde1aa068970dc43209682f7290d10726efc02e5. -// -// Solidity: event StrategyWithdrawalDelaySet(address strategy, uint256 previousValue, uint256 newValue) -func (_IDelegationManager *IDelegationManagerFilterer) ParseStrategyWithdrawalDelaySet(log types.Log) (*IDelegationManagerStrategyWithdrawalDelaySet, error) { - event := new(IDelegationManagerStrategyWithdrawalDelaySet) - if err := _IDelegationManager.contract.UnpackLog(event, "StrategyWithdrawalDelaySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // IDelegationManagerWithdrawalCompletedIterator is returned from FilterWithdrawalCompleted and is used to iterate over the raw logs and unpacked data for WithdrawalCompleted events raised by the IDelegationManager contract. type IDelegationManagerWithdrawalCompletedIterator struct { Event *IDelegationManagerWithdrawalCompleted // Event containing the contract specifics and raw log diff --git a/pkg/bindings/IEigenPod/binding.go b/pkg/bindings/IEigenPod/binding.go index ba98de21c..67461da0d 100644 --- a/pkg/bindings/IEigenPod/binding.go +++ b/pkg/bindings/IEigenPod/binding.go @@ -72,7 +72,7 @@ type IEigenPodValidatorInfo 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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsWithdrawableRestakedExecutionLayerGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountMustBeMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncompletePreviousCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBlockRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoints\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofOlderThanLastCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExiting\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNoPendingActivation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawCredentialsNotForEigenPod\",\"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\":\"structIEigenPod.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int128\",\"internalType\":\"int128\"}]}],\"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\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"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\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPod.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\":\"enumIEigenPod.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPod.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\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"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\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"},{\"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\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":false,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorIndex\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountMustBeMultipleOfGwei\",\"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\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"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\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorInactiveOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExitingBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActiveInPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashedOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawCredentialsNotForEigenPod\",\"inputs\":[]}]", } // IEigenPodABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IEigenPodManager/binding.go b/pkg/bindings/IEigenPodManager/binding.go index 8884cba01..b4094e029 100644 --- a/pkg/bindings/IEigenPodManager/binding.go +++ b/pkg/bindings/IEigenPodManager/binding.go @@ -31,7 +31,7 @@ var ( // IEigenPodManagerMetaData contains all meta data concerning the IEigenPodManager contract. var IEigenPodManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"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\":\"podOwnerShares\",\"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\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"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\":\"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\":\"podOwnerShares\",\"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\":\"sharesDelta\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"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\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"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\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", } // IEigenPodManagerABI is the input ABI used to generate the binding from. @@ -585,21 +585,21 @@ func (_IEigenPodManager *IEigenPodManagerCallerSession) StrategyManager() (commo // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) func (_IEigenPodManager *IEigenPodManagerTransactor) AddShares(opts *bind.TransactOpts, podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _IEigenPodManager.contract.Transact(opts, "addShares", podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) func (_IEigenPodManager *IEigenPodManagerSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _IEigenPodManager.Contract.AddShares(&_IEigenPodManager.TransactOpts, podOwner, shares) } // AddShares is a paid mutator transaction binding the contract method 0x0e81073c. // -// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256 increaseInDelegateableShares, uint256 existingPodShares) +// Solidity: function addShares(address podOwner, uint256 shares) returns(uint256) func (_IEigenPodManager *IEigenPodManagerTransactorSession) AddShares(podOwner common.Address, shares *big.Int) (*types.Transaction, error) { return _IEigenPodManager.Contract.AddShares(&_IEigenPodManager.TransactOpts, podOwner, shares) } diff --git a/pkg/bindings/IRewardsCoordinator/binding.go b/pkg/bindings/IRewardsCoordinator/binding.go index f19f93005..5314b039e 100644 --- a/pkg/bindings/IRewardsCoordinator/binding.go +++ b/pkg/bindings/IRewardsCoordinator/binding.go @@ -29,12 +29,6 @@ var ( _ = abi.ConvertType ) -// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 -} - // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorDistributionRoot struct { Root [32]byte @@ -49,17 +43,6 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } -// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. -type IRewardsCoordinatorOperatorSetRewardsSubmission struct { - RewardType uint8 - OperatorSetId uint32 - StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier - Token common.Address - Amount *big.Int - StartTimestamp uint32 - Duration uint32 -} - // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -94,7 +77,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", + 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDurationRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"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\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootAlreadyActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", } // IRewardsCoordinatorABI is the input ABI used to generate the binding from. @@ -739,68 +722,6 @@ func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) GetDistributionRoo return _IRewardsCoordinator.Contract.GetDistributionRootsLength(&_IRewardsCoordinator.CallOpts) } -// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. -// -// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) -func (_IRewardsCoordinator *IRewardsCoordinatorCaller) GetOperatorCommissionBips(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { - var out []interface{} - err := _IRewardsCoordinator.contract.Call(opts, &out, "getOperatorCommissionBips", operator, operatorSet, rewardType) - - if err != nil { - return *new(uint16), err - } - - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - - return out0, err - -} - -// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. -// -// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) -func (_IRewardsCoordinator *IRewardsCoordinatorSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { - return _IRewardsCoordinator.Contract.GetOperatorCommissionBips(&_IRewardsCoordinator.CallOpts, operator, operatorSet, rewardType) -} - -// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. -// -// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) -func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { - return _IRewardsCoordinator.Contract.GetOperatorCommissionBips(&_IRewardsCoordinator.CallOpts, operator, operatorSet, rewardType) -} - -// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. -// -// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) -func (_IRewardsCoordinator *IRewardsCoordinatorCaller) GetOperatorCommissionUpdateHistoryLength(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { - var out []interface{} - err := _IRewardsCoordinator.contract.Call(opts, &out, "getOperatorCommissionUpdateHistoryLength", operator, operatorSet, rewardType) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. -// -// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) -func (_IRewardsCoordinator *IRewardsCoordinatorSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { - return _IRewardsCoordinator.Contract.GetOperatorCommissionUpdateHistoryLength(&_IRewardsCoordinator.CallOpts, operator, operatorSet, rewardType) -} - -// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. -// -// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) -func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { - return _IRewardsCoordinator.Contract.GetOperatorCommissionUpdateHistoryLength(&_IRewardsCoordinator.CallOpts, operator, operatorSet, rewardType) -} - // GetRootIndexFromHash is a free data retrieval call binding the contract method 0xe810ce21. // // Solidity: function getRootIndexFromHash(bytes32 rootHash) view returns(uint32) @@ -863,6 +784,37 @@ func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) GlobalOperatorComm return _IRewardsCoordinator.Contract.GlobalOperatorCommissionBips(&_IRewardsCoordinator.CallOpts) } +// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. +// +// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) +func (_IRewardsCoordinator *IRewardsCoordinatorCaller) OperatorCommissionBips(opts *bind.CallOpts, operator common.Address, avs common.Address) (uint16, error) { + var out []interface{} + err := _IRewardsCoordinator.contract.Call(opts, &out, "operatorCommissionBips", operator, avs) + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. +// +// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) +func (_IRewardsCoordinator *IRewardsCoordinatorSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { + return _IRewardsCoordinator.Contract.OperatorCommissionBips(&_IRewardsCoordinator.CallOpts, operator, avs) +} + +// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. +// +// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) +func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { + return _IRewardsCoordinator.Contract.OperatorCommissionBips(&_IRewardsCoordinator.CallOpts, operator, avs) +} + // RewardsUpdater is a free data retrieval call binding the contract method 0xfbf1e2c1. // // Solidity: function rewardsUpdater() view returns(address) @@ -915,6 +867,27 @@ func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) CreateAVSRewar return _IRewardsCoordinator.Contract.CreateAVSRewardsSubmission(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) } +// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. +// +// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_IRewardsCoordinator *IRewardsCoordinatorTransactor) CreateRewardsForAllEarners(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { + return _IRewardsCoordinator.contract.Transact(opts, "createRewardsForAllEarners", rewardsSubmissions) +} + +// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. +// +// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_IRewardsCoordinator *IRewardsCoordinatorSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { + return _IRewardsCoordinator.Contract.CreateRewardsForAllEarners(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) +} + +// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. +// +// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { + return _IRewardsCoordinator.Contract.CreateRewardsForAllEarners(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) +} + // CreateRewardsForAllSubmission is a paid mutator transaction binding the contract method 0x36af41fa. // // Solidity: function createRewardsForAllSubmission(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmission) returns() @@ -978,27 +951,6 @@ func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) ProcessClaim(c return _IRewardsCoordinator.Contract.ProcessClaim(&_IRewardsCoordinator.TransactOpts, claim, recipient) } -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_IRewardsCoordinator *IRewardsCoordinatorTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _IRewardsCoordinator.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_IRewardsCoordinator *IRewardsCoordinatorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _IRewardsCoordinator.Contract.RewardOperatorSetForRange(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _IRewardsCoordinator.Contract.RewardOperatorSetForRange(&_IRewardsCoordinator.TransactOpts, rewardsSubmissions) -} - // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -1062,27 +1014,6 @@ func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) SetGlobalOpera return _IRewardsCoordinator.Contract.SetGlobalOperatorCommission(&_IRewardsCoordinator.TransactOpts, _globalCommissionBips) } -// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. -// -// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) -func (_IRewardsCoordinator *IRewardsCoordinatorTransactor) SetOperatorCommissionBips(opts *bind.TransactOpts, operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { - return _IRewardsCoordinator.contract.Transact(opts, "setOperatorCommissionBips", operatorSet, rewardType, commissionBips) -} - -// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. -// -// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) -func (_IRewardsCoordinator *IRewardsCoordinatorSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { - return _IRewardsCoordinator.Contract.SetOperatorCommissionBips(&_IRewardsCoordinator.TransactOpts, operatorSet, rewardType, commissionBips) -} - -// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. -// -// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) -func (_IRewardsCoordinator *IRewardsCoordinatorTransactorSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { - return _IRewardsCoordinator.Contract.SetOperatorCommissionBips(&_IRewardsCoordinator.TransactOpts, operatorSet, rewardType, commissionBips) -} - // SetRewardsForAllSubmitter is a paid mutator transaction binding the contract method 0x0eb38345. // // Solidity: function setRewardsForAllSubmitter(address _submitter, bool _newValue) returns() @@ -2048,325 +1979,6 @@ func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseGlobalCommissionBi return event, nil } -// IRewardsCoordinatorOperatorCommissionUpdatedIterator is returned from FilterOperatorCommissionUpdated and is used to iterate over the raw logs and unpacked data for OperatorCommissionUpdated events raised by the IRewardsCoordinator contract. -type IRewardsCoordinatorOperatorCommissionUpdatedIterator struct { - Event *IRewardsCoordinatorOperatorCommissionUpdated // 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 *IRewardsCoordinatorOperatorCommissionUpdatedIterator) 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(IRewardsCoordinatorOperatorCommissionUpdated) - 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(IRewardsCoordinatorOperatorCommissionUpdated) - 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 *IRewardsCoordinatorOperatorCommissionUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IRewardsCoordinatorOperatorCommissionUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IRewardsCoordinatorOperatorCommissionUpdated represents a OperatorCommissionUpdated event raised by the IRewardsCoordinator contract. -type IRewardsCoordinatorOperatorCommissionUpdated struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - RewardType uint8 - NewCommissionBips uint16 - EffectTimestamp uint32 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorCommissionUpdated is a free log retrieval operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. -// -// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) FilterOperatorCommissionUpdated(opts *bind.FilterOpts, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (*IRewardsCoordinatorOperatorCommissionUpdatedIterator, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var operatorSetRule []interface{} - for _, operatorSetItem := range operatorSet { - operatorSetRule = append(operatorSetRule, operatorSetItem) - } - - logs, sub, err := _IRewardsCoordinator.contract.FilterLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) - if err != nil { - return nil, err - } - return &IRewardsCoordinatorOperatorCommissionUpdatedIterator{contract: _IRewardsCoordinator.contract, event: "OperatorCommissionUpdated", logs: logs, sub: sub}, nil -} - -// WatchOperatorCommissionUpdated is a free log subscription operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. -// -// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) WatchOperatorCommissionUpdated(opts *bind.WatchOpts, sink chan<- *IRewardsCoordinatorOperatorCommissionUpdated, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (event.Subscription, error) { - - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) - } - var operatorSetRule []interface{} - for _, operatorSetItem := range operatorSet { - operatorSetRule = append(operatorSetRule, operatorSetItem) - } - - logs, sub, err := _IRewardsCoordinator.contract.WatchLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) - 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(IRewardsCoordinatorOperatorCommissionUpdated) - if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorCommissionUpdated", 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 -} - -// ParseOperatorCommissionUpdated is a log parse operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. -// -// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseOperatorCommissionUpdated(log types.Log) (*IRewardsCoordinatorOperatorCommissionUpdated, error) { - event := new(IRewardsCoordinatorOperatorCommissionUpdated) - if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorCommissionUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// IRewardsCoordinatorOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the IRewardsCoordinator contract. -type IRewardsCoordinatorOperatorSetRewardCreatedIterator struct { - Event *IRewardsCoordinatorOperatorSetRewardCreated // 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 *IRewardsCoordinatorOperatorSetRewardCreatedIterator) 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(IRewardsCoordinatorOperatorSetRewardCreated) - 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(IRewardsCoordinatorOperatorSetRewardCreated) - 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 *IRewardsCoordinatorOperatorSetRewardCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *IRewardsCoordinatorOperatorSetRewardCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// IRewardsCoordinatorOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the IRewardsCoordinator contract. -type IRewardsCoordinatorOperatorSetRewardCreated struct { - Avs common.Address - SubmissionNonce *big.Int - RewardsSubmissionHash [32]byte - RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*IRewardsCoordinatorOperatorSetRewardCreatedIterator, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _IRewardsCoordinator.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) - if err != nil { - return nil, err - } - return &IRewardsCoordinatorOperatorSetRewardCreatedIterator{contract: _IRewardsCoordinator.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil -} - -// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *IRewardsCoordinatorOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { - - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _IRewardsCoordinator.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) - 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(IRewardsCoordinatorOperatorSetRewardCreated) - if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", 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 -} - -// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseOperatorSetRewardCreated(log types.Log) (*IRewardsCoordinatorOperatorSetRewardCreated, error) { - event := new(IRewardsCoordinatorOperatorSetRewardCreated) - if err := _IRewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // IRewardsCoordinatorRewardsClaimedIterator is returned from FilterRewardsClaimed and is used to iterate over the raw logs and unpacked data for RewardsClaimed events raised by the IRewardsCoordinator contract. type IRewardsCoordinatorRewardsClaimedIterator struct { Event *IRewardsCoordinatorRewardsClaimed // Event containing the contract specifics and raw log @@ -2857,6 +2469,169 @@ func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseRewardsSubmissionF return event, nil } +// IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator is returned from FilterRewardsSubmissionForAllEarnersCreated and is used to iterate over the raw logs and unpacked data for RewardsSubmissionForAllEarnersCreated events raised by the IRewardsCoordinator contract. +type IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator struct { + Event *IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated // 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 *IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) 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(IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated) + 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(IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated) + 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 *IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated represents a RewardsSubmissionForAllEarnersCreated event raised by the IRewardsCoordinator contract. +type IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated struct { + TokenHopper common.Address + SubmissionNonce *big.Int + RewardsSubmissionHash [32]byte + RewardsSubmission IRewardsCoordinatorRewardsSubmission + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRewardsSubmissionForAllEarnersCreated is a free log retrieval operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. +// +// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) FilterRewardsSubmissionForAllEarnersCreated(opts *bind.FilterOpts, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator, error) { + + var tokenHopperRule []interface{} + for _, tokenHopperItem := range tokenHopper { + tokenHopperRule = append(tokenHopperRule, tokenHopperItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _IRewardsCoordinator.contract.FilterLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) + if err != nil { + return nil, err + } + return &IRewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator{contract: _IRewardsCoordinator.contract, event: "RewardsSubmissionForAllEarnersCreated", logs: logs, sub: sub}, nil +} + +// WatchRewardsSubmissionForAllEarnersCreated is a free log subscription operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. +// +// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) WatchRewardsSubmissionForAllEarnersCreated(opts *bind.WatchOpts, sink chan<- *IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { + + var tokenHopperRule []interface{} + for _, tokenHopperItem := range tokenHopper { + tokenHopperRule = append(tokenHopperRule, tokenHopperItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _IRewardsCoordinator.contract.WatchLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) + 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(IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated) + if err := _IRewardsCoordinator.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", 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 +} + +// ParseRewardsSubmissionForAllEarnersCreated is a log parse operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. +// +// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_IRewardsCoordinator *IRewardsCoordinatorFilterer) ParseRewardsSubmissionForAllEarnersCreated(log types.Log) (*IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated, error) { + event := new(IRewardsCoordinatorRewardsSubmissionForAllEarnersCreated) + if err := _IRewardsCoordinator.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // IRewardsCoordinatorRewardsUpdaterSetIterator is returned from FilterRewardsUpdaterSet and is used to iterate over the raw logs and unpacked data for RewardsUpdaterSet events raised by the IRewardsCoordinator contract. type IRewardsCoordinatorRewardsUpdaterSetIterator struct { Event *IRewardsCoordinatorRewardsUpdaterSet // Event containing the contract specifics and raw log diff --git a/pkg/bindings/IStrategy/binding.go b/pkg/bindings/IStrategy/binding.go index 9bf63dffa..c08a0da6e 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\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"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\":\"WithdrawalAmountExceedsDeposit\",\"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\":[],\"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\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", } // IStrategyABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IStrategyFactory/binding.go b/pkg/bindings/IStrategyFactory/binding.go index 7f8a4dbe0..29cda340c 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\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotBlacklistDeployedStrategy\",\"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\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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. diff --git a/pkg/bindings/IStrategyManager/binding.go b/pkg/bindings/IStrategyManager/binding.go index 590460b37..0a989a611 100644 --- a/pkg/bindings/IStrategyManager/binding.go +++ b/pkg/bindings/IStrategyManager/binding.go @@ -31,7 +31,7 @@ var ( // 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\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"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\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyListLength\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyShares\",\"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\":\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"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\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThirdPartyTransfersDisabled\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"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\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyListLength\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyShares\",\"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\":\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientShares\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxStrategiesExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThirdPartyTransfersDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", } // IStrategyManagerABI is the input ABI used to generate the binding from. @@ -462,21 +462,21 @@ func (_IStrategyManager *IStrategyManagerCallerSession) ThirdPartyTransfersForbi // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() func (_IStrategyManager *IStrategyManagerTransactor) AddShares(opts *bind.TransactOpts, staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _IStrategyManager.contract.Transact(opts, "addShares", staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() func (_IStrategyManager *IStrategyManagerSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _IStrategyManager.Contract.AddShares(&_IStrategyManager.TransactOpts, staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() func (_IStrategyManager *IStrategyManagerTransactorSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _IStrategyManager.Contract.AddShares(&_IStrategyManager.TransactOpts, staker, token, strategy, shares) } diff --git a/pkg/bindings/IWhitelister/binding.go b/pkg/bindings/IWhitelister/binding.go index 487579bb7..e4afb3731 100644 --- a/pkg/bindings/IWhitelister/binding.go +++ b/pkg/bindings/IWhitelister/binding.go @@ -38,18 +38,18 @@ type IDelegationManagerQueuedWithdrawalParams struct { // IDelegationManagerWithdrawal is an auto generated low-level Go binding around an user-defined struct. type IDelegationManagerWithdrawal struct { - Staker common.Address - DelegatedTo common.Address - Withdrawer common.Address - Nonce *big.Int - StartTimestamp uint32 - Strategies []common.Address - ScaledShares []*big.Int + Staker common.Address + DelegatedTo common.Address + Withdrawer common.Address + Nonce *big.Int + StartBlock uint32 + Strategies []common.Address + Shares []*big.Int } // IWhitelisterMetaData contains all meta data concerning the IWhitelister contract. var IWhitelisterMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"callAddress\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"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\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getStaker\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queueWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"callAddress\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManager.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\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"middlewareTimesIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"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\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getStaker\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queueWithdrawal\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"queuedWithdrawalParams\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManager.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", } // IWhitelisterABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/Merkle/binding.go b/pkg/bindings/Merkle/binding.go index 7580f2e51..30dbb707b 100644 --- a/pkg/bindings/Merkle/binding.go +++ b/pkg/bindings/Merkle/binding.go @@ -31,8 +31,8 @@ var ( // MerkleMetaData contains all meta data concerning the Merkle contract. var MerkleMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"error\",\"name\":\"ProofLengthNotMultipleOf32\",\"inputs\":[]}]", - Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205b4a33f7e57be7d9deb179404ebd959b24779b922c2fc85b033f6246e990860464736f6c634300081b0033", + ABI: "[{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]}]", + Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204da395636110a7cf46074c013ff3ff17f6581b7227bb418adfc924152a6396af64736f6c634300081b0033", } // MerkleABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/RewardsCoordinator/binding.go b/pkg/bindings/RewardsCoordinator/binding.go index 4c3aab35e..a00e3817f 100644 --- a/pkg/bindings/RewardsCoordinator/binding.go +++ b/pkg/bindings/RewardsCoordinator/binding.go @@ -29,12 +29,6 @@ var ( _ = abi.ConvertType ) -// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 -} - // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorDistributionRoot struct { Root [32]byte @@ -49,17 +43,6 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } -// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. -type IRewardsCoordinatorOperatorSetRewardsSubmission struct { - RewardType uint8 - OperatorSetId uint32 - StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier - Token common.Address - Amount *big.Int - StartTimestamp uint32 - Duration uint32 -} - // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -94,8 +77,8 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf struct { // RewardsCoordinatorMetaData contains all meta data concerning the RewardsCoordinator contract. var RewardsCoordinatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"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\":\"_OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", - Bin: "0x6101e06040523480156200001257600080fd5b506040516200511f3803806200511f8339810160408190526200003591620003c0565b898989898989898989896200004b878462000497565b63ffffffff1615620000f05760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b620000ff620151808862000497565b63ffffffff1615620001a05760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a401620000e7565b620001ac878362000497565b63ffffffff1615620002635760405162461bcd60e51b815260206004820152606d60248201527f52657761726473436f6f7264696e61746f723a204f50455241544f525f53455460448201527f5f47454e455349535f524557415244535f54494d455354414d50206d7573742060648201527f62652061206d756c7469706c65206f662043414c43554c4154494f4e5f494e5460848201526c455256414c5f5345434f4e445360981b60a482015260c401620000e7565b6001600160a01b03998a166101605297891661018052959097166101a05263ffffffff93841660805291831660a052821661010052811660c05292831660e0528216610120521661014052620002b8620002ce565b5050466101c05250620004c99650505050505050565b600054610100900460ff1615620003385760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401620000e7565b60005460ff90811610156200038b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620003a357600080fd5b50565b805163ffffffff81168114620003bb57600080fd5b919050565b6000806000806000806000806000806101408b8d031215620003e157600080fd5b8a51620003ee816200038d565b60208c0151909a5062000401816200038d565b60408c015190995062000414816200038d565b97506200042460608c01620003a6565b96506200043460808c01620003a6565b95506200044460a08c01620003a6565b94506200045460c08c01620003a6565b93506200046460e08c01620003a6565b9250620004756101008c01620003a6565b9150620004866101208c01620003a6565b90509295989b9194979a5092959850565b600063ffffffff80841680620004bd57634e487b7160e01b600052601260045260246000fd5b92169190910692915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614b896200059660003960006124e80152600081816106970152610e1c01526000818161059d01526130d9015260006108e801526000818161053c0152610f930152600081816108750152610fb4015260008181610576015261124701526000818161048d01526112680152600081816103b90152612fd601526000818161080d0152612cda0152600081816107b301528181612d8a0152612e540152614b896000f3fe608060405234801561001057600080fd5b50600436106103775760003560e01c8063715018a6116101d3578063c46db60611610104578063f2fde38b116100a2578063f96abf2e1161007c578063f96abf2e14610938578063fabc1cbc1461094b578063fbf1e2c11461095e578063fce36c7d1461097157600080fd5b8063f2fde38b1461090a578063f698da251461091d578063f8cd84481461092557600080fd5b8063de02e503116100de578063de02e503146108aa578063e221b245146108bd578063e810ce21146108d0578063ea4d3c9b146108e357600080fd5b8063c46db60614610842578063d11e9ae514610870578063d4540a551461089757600080fd5b80639104c31911610171578063a0169ddd1161014b578063a0169ddd146107d5578063bb7e451f146107e8578063bf21a8aa14610808578063c336f19d1461082f57600080fd5b80639104c3191461078b5780639be3d4e4146107a65780639d45c281146107ae57600080fd5b8063863cb9a9116101ad578063863cb9a914610729578063865c69531461073c578063886f1195146107675780638da5cb5b1461077a57600080fd5b8063715018a6146106e75780637adace91146106ef5780637b8f8b051461072157600080fd5b806339b70e38116102ad57806358baaa3e1161024b5780635c975abb116102255780635c975abb146106775780635e9d83481461067f5780636b3aa72e146106925780636d21117e146106b957600080fd5b806358baaa3e14610639578063595c6a671461064c5780635ac86ab71461065457600080fd5b80633ccc861d116102875780633ccc861d146105e95780633efe1db6146105fc5780634d18cc351461060f5780634d7a80d41461062657600080fd5b806339b70e38146105985780633a8c0786146105bf5780633c8fcf7c146105d657600080fd5b8063136439dd1161031a5780632c9c60cf116102f45780632c9c60cf146105245780633486e32e1461053757806336af41fa1461055e57806337838ed01461057157600080fd5b8063136439dd146104af578063149bc872146104c25780632b9f64a4146104e357600080fd5b80630e9a53cf116103565780630e9a53cf146104185780630eb383451461046057806310d67a2f14610475578063131433b41461048857600080fd5b806218572c1461037c57806304a0c502146103b4578063092db007146103f0575b600080fd5b61039f61038a366004613f70565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103ab565b60cb5461040590600160e01b900461ffff1681565b60405161ffff90911681526020016103ab565b610420610984565b604080518251815260208084015163ffffffff908116918301919091528383015116918101919091526060918201511515918101919091526080016103ab565b61047361046e366004613f9b565b610a63565b005b610473610483366004613f70565b610ae5565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736104bd366004613fd4565b610ba1565b6104d56104d0366004614005565b610ce0565b6040519081526020016103ab565b61050c6104f1366004613f70565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103ab565b61047361053236600461406d565b610d56565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61047361056c36600461406d565b61109e565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b60cb546103db90600160a01b900463ffffffff1681565b6103db6105e43660046140d5565b611336565b6104736105f736600461412c565b6115c4565b61047361060a366004614187565b611986565b60cb546103db90600160c01b900463ffffffff1681565b6104056106343660046141b3565b611c57565b6104736106473660046141f0565b611e06565b610473611e17565b61039f61066236600461420b565b606654600160ff9092169190911b9081161490565b6066546104d5565b61039f61068d36600461422e565b611ede565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b61039f6106c7366004614263565b60cf60209081526000928352604080842090915290825290205460ff1681565b610473611f6b565b6107026106fd36600461428f565b611f7f565b6040805161ffff909316835263ffffffff9091166020830152016103ab565b60ca546104d5565b610473610737366004613f70565b611fe7565b6104d561074a3660046142ef565b60cd60209081526000928352604080842090915290825290205481565b60655461050c906001600160a01b031681565b6033546001600160a01b031661050c565b61050c73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610420611ff8565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736107e3366004613f70565b612096565b6104d56107f6366004613f70565b60ce6020526000908152604090205481565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104d561083d3660046141b3565b6120f5565b61039f610850366004614263565b60d060209081526000928352604080842090915290825290205460ff1681565b6103db7f000000000000000000000000000000000000000000000000000000000000000081565b6104736108a536600461431d565b6121a8565b6104206108b8366004613fd4565b6122f0565b6104736108cb366004614390565b612382565b6103db6108de366004613fd4565b612393565b61050c7f000000000000000000000000000000000000000000000000000000000000000081565b610473610918366004613f70565b61246e565b6104d56124e4565b6104d5610933366004614005565b612522565b6104736109463660046141f0565b612533565b610473610959366004613fd4565b612769565b60cb5461050c906001600160a01b031681565b61047361097f36600461406d565b6128c5565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b8015610a5f57600060ca6109c16001846143c1565b815481106109d1576109d16143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610a415750806040015163ffffffff164210155b15610a4c5792915050565b5080610a57816143ee565b9150506109ac565b5090565b610a6b612a42565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5c9190614405565b6001600160a01b0316336001600160a01b031614610b955760405162461bcd60e51b8152600401610b8c90614422565b60405180910390fd5b610b9e81612a9c565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d919061446c565b610c295760405162461bcd60e51b8152600401610b8c90614489565b60665481811614610ca25760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610cf06020840184613f70565b8360200135604051602001610d399392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60665460049060109081161415610d7f5760405162461bcd60e51b8152600401610b8c906144d1565b60026097541415610da25760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110610dc557610dc56143d8565b9050602002810190610dd7919061453f565b33600081815260ce60209081526040808320549051949550939192610e0292909185918791016146fc565b6040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166384d76f7b33856020016020810190610e5d91906141f0565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff166024820152604401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed0919061446c565b610f4c5760405162461bcd60e51b815260206004820152604160248201527f52657761726473436f6f7264696e61746f722e7265776172644f70657261746f60448201527f72536574466f7252616e67653a20696e76616c6964206f70657261746f7253656064820152601d60fa1b608482015260a401610b8c565b610fd8610f5c604085018561472c565b610f6c6080870160608801613f70565b6080870135610f8160c0890160a08a016141f0565b610f9160e08a0160c08b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260cf602090815260408083208484529091529020805460ff1916600190811790915561100b908390614776565b33600081815260ce602052604090819020929092559051829184917f29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b29061105390889061478e565b60405180910390a46110853330608086018035906110749060608901613f70565b6001600160a01b03169291906132ab565b836001019350505050610daa565b505060016097555050565b606654600190600290811614156110c75760405162461bcd60e51b8152600401610b8c906144d1565b33600090815260d1602052604090205460ff166111665760405162461bcd60e51b815260206004820152605160248201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f60448201527f7420612076616c69642063726561746552657761726473466f72416c6c53756260648201527036b4b9b9b4b7b71039bab136b4ba3a32b960791b608482015260a401610b8c565b600260975414156111895760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b8281101561109357368484838181106111ac576111ac6143d8565b90506020028101906111be91906147a1565b33600081815260ce602090815260408083205490519495509391926111e99290918591879101614836565b60408051601f198184030181529190528051602090910120905061128c611210848061472c565b6112206040870160208801613f70565b60408701356112356080890160608a016141f0565b61124560a08a0160808b016141f0565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612b93565b33600090815260d0602090815260408083208484529091529020805460ff191660019081179091556112bf908390614776565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf2704829061130790889061485d565b60405180910390a46113283330604086018035906110749060208901613f70565b836001019350505050611191565b600061271061ffff831611156113c25760405162461bcd60e51b815260206004820152604560248201527f52657761726473436f6f7264696e61746f722e7365744f70657261746f72436f60448201527f6d6d697373696f6e426970733a20636f6d6d697373696f6e4269707320746f6f606482015264040d0d2ced60db1b608482015260a401610b8c565b6113cf62093a8042614776565b33600090815260d360209081526040822092935090919082906113f490880188613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600086602001602081019061142991906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008560008111156114575761145761455f565b80156114655761146561455f565b8152602081019190915260400160002080549091508015806114c0575063ffffffff8316826114956001846143c1565b815481106114a5576114a56143d8565b60009182526020909120015462010000900463ffffffff1614155b15611523576040805180820190915261ffff808616825263ffffffff808616602080850191825286546001810188556000888152919091209451940180549151909216620100000265ffffffffffff199091169390921692909217179055611560565b83826115306001846143c1565b81548110611540576115406143d8565b6000918252602090912001805461ffff191661ffff929092169190911790555b8560405161156e9190614870565b6040518091039020336001600160a01b03167f811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba8787876040516115b3939291906148a8565b60405180910390a350509392505050565b606654600290600490811614156115ed5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156116105760405162461bcd60e51b8152600401610b8c90614508565b6002609755600060ca61162660208601866141f0565b63ffffffff168154811061163c5761163c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152905061169d848261331c565b60006116af6080860160608701613f70565b6001600160a01b03808216600090815260cc602052604090205491925016806116d55750805b336001600160a01b038216146117535760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063616c6c6572206973206e6f742076616c696420636c61696d6572000000006064820152608401610b8c565b60005b61176360a08801886148d4565b9050811015611978573661177a60e089018961472c565b8381811061178a5761178a6143d8565b6001600160a01b038716600090815260cd6020908152604080832093029490940194509290915082906117bf90850185613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050808260200135116118795760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e70726f63657373436c61696d3a60448201527f2063756d756c61746976654561726e696e6773206d75737420626520677420746064820152741a185b8818dd5b5d5b185d1a5d9950db185a5b5959605a1b608482015260a401610b8c565b60006118898260208501356143c1565b6001600160a01b038716600090815260cd602090815260408220929350850180359291906118b79087613f70565b6001600160a01b03168152602080820192909252604001600020919091556118f9908a9083906118e990870187613f70565b6001600160a01b031691906135ed565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce319061193d6020890189613f70565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050806119719061491e565b9050611756565b505060016097555050505050565b606654600390600890811614156119af5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146119d95760405162461bcd60e51b8152600401610b8c90614939565b60cb5463ffffffff600160c01b909104811690831611611a755760405162461bcd60e51b815260206004820152604b60248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a206e60448201527f657720726f6f74206d75737420626520666f72206e657765722063616c63756c60648201526a185d1959081c195c9a5bd960aa1b608482015260a401610b8c565b428263ffffffff1610611b0e5760405162461bcd60e51b815260206004820152605560248201527f52657761726473436f6f7264696e61746f722e7375626d6974526f6f743a207260448201527f65776172647343616c63756c6174696f6e456e6454696d657374616d702063616064820152746e6e6f7420626520696e207468652066757475726560581b608482015260a401610b8c565b60ca5460cb54600090611b2e90600160a01b900463ffffffff164261498d565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60cb546001600160a01b038416600090815260d36020908152604082209192600160e01b900461ffff169183918290611c9290880188613f70565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866020016020810190611cc791906141f0565b63ffffffff1663ffffffff1681526020019081526020016000206000856000811115611cf557611cf561455f565b8015611d0357611d0361455f565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611d77576000848152602090819020604080518082019091529084015461ffff8116825262010000900463ffffffff1681830152825260019092019101611d31565b5050825192935050505b8015611df95763ffffffff421682611d9a6001846143c1565b81518110611daa57611daa6143d8565b60200260200101516020015163ffffffff1611611df05781611dcd6001836143c1565b81518110611ddd57611ddd6143d8565b6020026020010151600001519250611df9565b60001901611d81565b50909150505b9392505050565b611e0e612a42565b610b9e8161361d565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e83919061446c565b611e9f5760405162461bcd60e51b8152600401610b8c90614489565b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000611f638260ca611ef360208301836141f0565b63ffffffff1681548110611f0957611f096143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015261331c565b506001919050565b611f73612a42565b611f7d600061368e565b565b60d36020528460005260406000206020528360005260406000206020528260005260406000206020528160005260406000208181548110611fbf57600080fd5b60009182526020909120015461ffff8116955062010000900463ffffffff1693508592505050565b611fef612a42565b610b9e816136e0565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461202c906001906143c1565b8154811061203c5761203c6143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b6001600160a01b038316600090815260d360209081526040822090829061211e90860186613f70565b6001600160a01b03166001600160a01b03168152602001908152602001600020600084602001602081019061215391906141f0565b63ffffffff1663ffffffff16815260200190815260200160002060008360008111156121815761218161455f565b801561218f5761218f61455f565b8152602081019190915260400160002054949350505050565b600054610100900460ff16158080156121c85750600054600160ff909116105b806121e25750303b1580156121e2575060005460ff166001145b6122455760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b8c565b6000805460ff191660011790558015612268576000805461ff0019166101001790555b61227061373c565b60c95561227d86866137d3565b6122868761368e565b61228f846136e0565b6122988361361d565b6122a1826138bd565b80156122e7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca8281548110612327576123276143d8565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b61238a612a42565b610b9e816138bd565b60ca546000905b63ffffffff8116156123ff578260ca6123b46001846149b5565b63ffffffff16815481106123ca576123ca6143d8565b90600052602060002090600202016000015414156123ed57611dff6001826149b5565b806123f7816149da565b91505061239a565b5060405162461bcd60e51b815260206004820152603760248201527f52657761726473436f6f7264696e61746f722e676574526f6f74496e6465784660448201527f726f6d486173683a20726f6f74206e6f7420666f756e640000000000000000006064820152608401610b8c565b612476612a42565b6001600160a01b0381166124db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8c565b610b9e8161368e565b60007f0000000000000000000000000000000000000000000000000000000000000000461415612515575060c95490565b61251d61373c565b905090565b60006001610cf06020840184613f70565b6066546003906008908116141561255c5760405162461bcd60e51b8152600401610b8c906144d1565b60cb546001600160a01b031633146125865760405162461bcd60e51b8152600401610b8c90614939565b60ca5463ffffffff8316106125f75760405162461bcd60e51b815260206004820152603160248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152700d2dcecc2d8d2c840e4dedee892dcc8caf607b1b6064820152608401610b8c565b600060ca8363ffffffff1681548110612612576126126143d8565b906000526020600020906002020190508060010160089054906101000a900460ff161561269f5760405162461bcd60e51b815260206004820152603560248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152741c9bdbdd08185b1c9958591e48191a5cd8589b1959605a1b6064820152608401610b8c565b6001810154600160201b900463ffffffff16421061271e5760405162461bcd60e51b815260206004820152603660248201527f52657761726473436f6f7264696e61746f722e64697361626c65526f6f743a206044820152751c9bdbdd08185b1c9958591e481858dd1a5d985d195960521b6064820152608401610b8c565b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190614405565b6001600160a01b0316336001600160a01b0316146128105760405162461bcd60e51b8152600401610b8c90614422565b60665419811960665419161461288e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c69747900000000000000006064820152608401610b8c565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610cd5565b606654600090600190811614156128ee5760405162461bcd60e51b8152600401610b8c906144d1565b600260975414156129115760405162461bcd60e51b8152600401610b8c90614508565b600260975560005b828110156110935736848483818110612934576129346143d8565b905060200281019061294691906147a1565b33600081815260ce602090815260408083205490519495509391926129719290918591879101614836565b60408051601f1981840301815291905280516020909101209050612998611210848061472c565b33600090815260cf602090815260408083208484529091529020805460ff191660019081179091556129cb908390614776565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190612a1390889061485d565b60405180910390a4612a343330604086018035906110749060208901613f70565b836001019350505050612919565b6033546001600160a01b03163314611f7d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b8c565b6001600160a01b038116612b2a5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610b8c565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b86612bf6576040805162461bcd60e51b8152602060048201526024810191909152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206e6f2073747261746567696573207365746064820152608401610b8c565b60008511612c645760405162461bcd60e51b81526020600482015260416024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e742063616e6e6f74206265206064820152600360fc1b608482015260a401610b8c565b6f4b3b4ca85a86c47a098a223fffffffff851115612cd85760405162461bcd60e51b815260206004820152603f6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20616d6f756e7420746f6f206c61726765006064820152608401610b8c565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168363ffffffff161115612d855760405162461bcd60e51b81526020600482015260546024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e20657863656564732060648201527326a0ac2fa922aba0a92229afa22aa920aa24a7a760611b608482015260a401610b8c565b612daf7f000000000000000000000000000000000000000000000000000000000000000084614a10565b63ffffffff1615612e4f5760405162461bcd60e51b815260206004820152606a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a206475726174696f6e206d7573742062652060648201527f61206d756c7469706c65206f662043414c43554c4154494f4e5f494e54455256608482015269414c5f5345434f4e445360b01b60a482015260c401610b8c565b612e797f000000000000000000000000000000000000000000000000000000000000000085614a10565b63ffffffff1615612f1f5760405162461bcd60e51b81526020600482015260706024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d70206d7560648201527f73742062652061206d756c7469706c65206f662043414c43554c4154494f4e5f60848201526f494e54455256414c5f5345434f4e445360801b60a482015260c401610b8c565b8363ffffffff168263ffffffff1642612f3891906143c1565b11158015612f5257508363ffffffff168163ffffffff1611155b612fcc5760405162461bcd60e51b81526020600482015260516024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152701bc819985c881a5b881d1a19481c185cdd607a1b608482015260a401610b8c565b612ffc63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001642614776565b8463ffffffff1611156130815760405162461bcd60e51b81526020600482015260536024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20737461727454696d657374616d7020746f6064820152726f2066617220696e207468652066757475726560681b608482015260a401610b8c565b6000805b8881101561329f5760008a8a838181106130a1576130a16143d8565b6130b79260206040909202019081019150613f70565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015613122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613146919061446c565b8061316d57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b6131e05760405162461bcd60e51b815260206004820152604a6024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a20696e76616c69642073747261746567792060648201526918dbdb9cda59195c995960b21b608482015260a401610b8c565b806001600160a01b0316836001600160a01b03161061328d5760405162461bcd60e51b81526020600482015260696024820152600080516020614b3483398151915260448201527f7264735375626d697373696f6e3a2073747261746567696573206d757374206260648201527f6520696e20617363656e64696e67206f7264657220746f2068616e646c65206460848201526875706c69636174657360b81b60a482015260c401610b8c565b91506132988161491e565b9050613085565b50505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526133169085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613928565b50505050565b8060600151156133755760405162461bcd60e51b81526020600482015260306024820152600080516020614b1483398151915260448201526f1c9bdbdd081a5cc8191a5cd8589b195960821b6064820152608401610b8c565b806040015163ffffffff164210156133dc5760405162461bcd60e51b81526020600482015260366024820152600080516020614b148339815191526044820152751c9bdbdd081b9bdd081858dd1a5d985d1959081e595d60521b6064820152608401610b8c565b6133e960c08301836148d4565b90506133f860a08401846148d4565b9050146134705760405162461bcd60e51b815260206004820152604c6024820152600080516020614b1483398151915260448201527f746f6b656e496e646963657320616e6420746f6b656e50726f6f6673206c656e60648201526b0cee8d040dad2e6dac2e8c6d60a31b608482015260a401610b8c565b61347d60e083018361472c565b905061348c60c08401846148d4565b9050146135025760405162461bcd60e51b815260206004820152604a6024820152600080516020614b1483398151915260448201527f746f6b656e5472656550726f6f667320616e64206c6561766573206c656e67746064820152690d040dad2e6dac2e8c6d60b31b608482015260a401610b8c565b805161352e9061351860408501602086016141f0565b6135256040860186614a33565b866060016139fa565b60005b61353e60a08401846148d4565b90508110156135e8576135d8608084013561355c60a08601866148d4565b8481811061356c5761356c6143d8565b905060200201602081019061358191906141f0565b61358e60c08701876148d4565b8581811061359e5761359e6143d8565b90506020028101906135b09190614a33565b6135bd60e089018961472c565b878181106135cd576135cd6143d8565b905060400201613b6e565b6135e18161491e565b9050613531565b505050565b6040516001600160a01b0383166024820152604481018290526135e890849063a9059cbb60e01b906064016132df565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156137f457506001600160a01b03821615155b6138765760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610b8c565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a26138b982612a9c565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061397d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613cbf9092919063ffffffff16565b8051909150156135e8578080602001905181019061399b919061446c565b6135e85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b8c565b613a05602083614a7a565b6001901b8463ffffffff1610613a8f5760405162461bcd60e51b815260206004820152604360248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e65724c656166496e6064820152620c8caf60eb1b608482015260a401610b8c565b6000613a9a82610ce0565b9050613ae584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152604660248201527f52657761726473436f6f7264696e61746f722e5f7665726966794561726e657260448201527f436c61696d50726f6f663a20696e76616c6964206561726e657220636c61696d60648201526510383937b7b360d11b608482015260a401610b8c565b505050505050565b613b79602083614a7a565b6001901b8463ffffffff1610613bf75760405162461bcd60e51b815260206004820152603c60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e4c656166496e646578000000006064820152608401610b8c565b6000613c0282612522565b9050613c4d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff8916613cd6565b613b665760405162461bcd60e51b815260206004820152603f60248201527f52657761726473436f6f7264696e61746f722e5f766572696679546f6b656e4360448201527f6c61696d3a20696e76616c696420746f6b656e20636c61696d2070726f6f66006064820152608401610b8c565b6060613cce8484600085613cee565b949350505050565b600083613ce4868585613e1f565b1495945050505050565b606082471015613d4f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b8c565b6001600160a01b0385163b613da65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b8c565b600080866001600160a01b03168587604051613dc29190614aba565b60006040518083038185875af1925050503d8060008114613dff576040519150601f19603f3d011682016040523d82523d6000602084013e613e04565b606091505b5091509150613e14828286613f22565b979650505050505050565b600060208451613e2f9190614acc565b15613eb65760405162461bcd60e51b815260206004820152604b60248201527f4d65726b6c652e70726f63657373496e636c7573696f6e50726f6f664b65636360448201527f616b3a2070726f6f66206c656e6774682073686f756c642062652061206d756c60648201526a3a34b836329037b310199960a91b608482015260a401610b8c565b8260205b85518111613f1957613ecd600285614acc565b613eee57816000528086015160205260406000209150600284049350613f07565b8086015160005281602052604060002091506002840493505b613f12602082614776565b9050613eba565b50949350505050565b60608315613f31575081611dff565b825115613f415782518084602001fd5b8160405162461bcd60e51b8152600401610b8c9190614ae0565b6001600160a01b0381168114610b9e57600080fd5b600060208284031215613f8257600080fd5b8135611dff81613f5b565b8015158114610b9e57600080fd5b60008060408385031215613fae57600080fd5b8235613fb981613f5b565b91506020830135613fc981613f8d565b809150509250929050565b600060208284031215613fe657600080fd5b5035919050565b600060408284031215613fff57600080fd5b50919050565b60006040828403121561401757600080fd5b611dff8383613fed565b60008083601f84011261403357600080fd5b50813567ffffffffffffffff81111561404b57600080fd5b6020830191508360208260051b850101111561406657600080fd5b9250929050565b6000806020838503121561408057600080fd5b823567ffffffffffffffff81111561409757600080fd5b6140a385828601614021565b90969095509350505050565b8035600181106140be57600080fd5b919050565b803561ffff811681146140be57600080fd5b6000806000608084860312156140ea57600080fd5b6140f48585613fed565b9250614102604085016140af565b9150614110606085016140c3565b90509250925092565b60006101008284031215613fff57600080fd5b6000806040838503121561413f57600080fd5b823567ffffffffffffffff81111561415657600080fd5b61416285828601614119565b9250506020830135613fc981613f5b565b803563ffffffff811681146140be57600080fd5b6000806040838503121561419a57600080fd5b823591506141aa60208401614173565b90509250929050565b6000806000608084860312156141c857600080fd5b83356141d381613f5b565b92506141e28560208601613fed565b9150614110606085016140af565b60006020828403121561420257600080fd5b611dff82614173565b60006020828403121561421d57600080fd5b813560ff81168114611dff57600080fd5b60006020828403121561424057600080fd5b813567ffffffffffffffff81111561425757600080fd5b613cce84828501614119565b6000806040838503121561427657600080fd5b823561428181613f5b565b946020939093013593505050565b600080600080600060a086880312156142a757600080fd5b85356142b281613f5b565b945060208601356142c281613f5b565b93506142d060408701614173565b92506142de606087016140af565b949793965091946080013592915050565b6000806040838503121561430257600080fd5b823561430d81613f5b565b91506020830135613fc981613f5b565b60008060008060008060c0878903121561433657600080fd5b863561434181613f5b565b9550602087013561435181613f5b565b945060408701359350606087013561436881613f5b565b925061437660808801614173565b915061438460a088016140c3565b90509295509295509295565b6000602082840312156143a257600080fd5b611dff826140c3565b634e487b7160e01b600052601160045260246000fd5b6000828210156143d3576143d36143ab565b500390565b634e487b7160e01b600052603260045260246000fd5b6000816143fd576143fd6143ab565b506000190190565b60006020828403121561441757600080fd5b8151611dff81613f5b565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561447e57600080fd5b8151611dff81613f8d565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b60208082526019908201527f5061757361626c653a20696e6465782069732070617573656400000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000823560de1983360301811261455557600080fd5b9190910192915050565b634e487b7160e01b600052602160045260246000fd5b6001811061459357634e487b7160e01b600052602160045260246000fd5b9052565b6000808335601e198436030181126145ae57600080fd5b830160208101925035905067ffffffffffffffff8111156145ce57600080fd5b8060061b360383131561406657600080fd5b818352600060208085019450826000805b8681101561464557823561460481613f5b565b6001600160a01b03168852828401356bffffffffffffffffffffffff811680821461462d578384fd5b898601525060409788019792909201916001016145f1565b50959695505050505050565b6146638261465e836140af565b614575565b600061467160208301614173565b63ffffffff808216602086015261468b6040850185614597565b925060e060408701526146a260e0870184836145e0565b92505060608401356146b381613f5b565b6001600160a01b0316606086015260808481013590860152806146d860a08601614173565b1660a0860152806146eb60c08601614173565b1660c0860152508091505092915050565b60018060a01b03841681528260208201526060604082015260006147236060830184614651565b95945050505050565b6000808335601e1984360301811261474357600080fd5b83018035915067ffffffffffffffff82111561475e57600080fd5b6020019150600681901b360382131561406657600080fd5b60008219821115614789576147896143ab565b500190565b602081526000611dff6020830184614651565b60008235609e1983360301811261455557600080fd5b60006147c38283614597565b60a085526147d560a0860182846145e0565b91505060208301356147e681613f5b565b6001600160a01b031660208501526040838101359085015261480a60608401614173565b63ffffffff80821660608701528061482460808701614173565b16608087015250508091505092915050565b60018060a01b038416815282602082015260606040820152600061472360608301846147b7565b602081526000611dff60208301846147b7565b6000823561487d81613f5b565b6001600160a01b0316825263ffffffff61489960208501614173565b16602083015250604001919050565b606081016148b68286614575565b61ffff8416602083015263ffffffff83166040830152949350505050565b6000808335601e198436030181126148eb57600080fd5b83018035915067ffffffffffffffff82111561490657600080fd5b6020019150600581901b360382131561406657600080fd5b6000600019821415614932576149326143ab565b5060010190565b60208082526034908201527f52657761726473436f6f7264696e61746f723a2063616c6c6572206973206e6f6040820152733a103a3432903932bbb0b93239aab83230ba32b960611b606082015260800190565b600063ffffffff8083168185168083038211156149ac576149ac6143ab565b01949350505050565b600063ffffffff838116908316818110156149d2576149d26143ab565b039392505050565b600063ffffffff8216806149f0576149f06143ab565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680614a2757614a276149fa565b92169190910692915050565b6000808335601e19843603018112614a4a57600080fd5b83018035915067ffffffffffffffff821115614a6557600080fd5b60200191503681900382131561406657600080fd5b600082614a8957614a896149fa565b500490565b60005b83811015614aa9578181015183820152602001614a91565b838111156133165750506000910152565b60008251614555818460208701614a8e565b600082614adb57614adb6149fa565b500690565b6020815260008251806020840152614aff816040850160208701614a8e565b601f01601f1916919091016040019291505056fe52657761726473436f6f7264696e61746f722e5f636865636b436c61696d3a2052657761726473436f6f7264696e61746f722e5f76616c696461746552657761a26469706673582212209fbf169b47bf96bbb3405672cc24dbc2e1d0fa3a971f3ebcf4a73b67b9764b2664736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"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\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"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\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDurationRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"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\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootAlreadyActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", + Bin: "0x61018060405234801561001157600080fd5b506040516137c73803806137c7833981016040819052610030916102d0565b86868686868686610041858261035b565b63ffffffff16156100e55760405162461bcd60e51b815260206004820152606060248201527f52657761726473436f6f7264696e61746f723a2047454e455349535f5245574160448201527f5244535f54494d455354414d50206d7573742062652061206d756c7469706c6560648201527f206f662043414c43554c4154494f4e5f494e54455256414c5f5345434f4e4453608482015260a4015b60405180910390fd5b6100f2620151808661035b565b63ffffffff16156101915760405162461bcd60e51b815260206004820152605760248201527f52657761726473436f6f7264696e61746f723a2043414c43554c4154494f4e5f60448201527f494e54455256414c5f5345434f4e4453206d7573742062652061206d756c746960648201527f706c65206f6620534e415053484f545f434144454e4345000000000000000000608482015260a4016100dc565b6001600160a01b0396871661012052949095166101405263ffffffff92831660805290821660a052811660c05291821660e05216610100526101d16101e3565b50504661016052506103919350505050565b600054610100900460ff161561024b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100dc565b60005460ff908116101561029d576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146102b457600080fd5b50565b805163ffffffff811681146102cb57600080fd5b919050565b600080600080600080600060e0888a0312156102eb57600080fd5b87516102f68161029f565b60208901519097506103078161029f565b9550610315604089016102b7565b9450610323606089016102b7565b9350610331608089016102b7565b925061033f60a089016102b7565b915061034d60c089016102b7565b905092959891949750929550565b600063ffffffff83168061037f57634e487b7160e01b600052601260045260246000fd5b8063ffffffff84160691505092915050565b60805160a05160c05160e051610100516101205161014051610160516133a061042760003960006118160152600081816104f501526121d9015260006107b501526000818161040c01526120c401526000818161033201526121130152600081816104ce01526120730152600081816107140152611f4801526000818161068c01528181611f9f0152611ffe01526133a06000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c80637b8f8b051161019d578063d4540a55116100e9578063f698da25116100a2578063fabc1cbc1161007c578063fabc1cbc14610818578063fbf1e2c11461082b578063fce36c7d1461083e578063ff9f6cce1461085157600080fd5b8063f698da25146107ea578063f8cd8448146107f2578063f96abf2e1461080557600080fd5b8063d4540a5514610764578063de02e50314610777578063e221b2451461078a578063e810ce211461079d578063ea4d3c9b146107b0578063f2fde38b146107d757600080fd5b80639be3d4e411610156578063aebd8bae11610130578063aebd8bae146106c1578063bb7e451f146106ef578063bf21a8aa1461070f578063c46db6061461073657600080fd5b80639be3d4e41461067f5780639d45c28114610687578063a0169ddd146106ae57600080fd5b80637b8f8b05146105fa578063863cb9a914610602578063865c695314610615578063886f1195146106405780638da5cb5b146106535780639104c3191461066457600080fd5b806337838ed01161025c57806358baaa3e116102155780635c975abb116101ef5780635c975abb146105a95780635e9d8348146105b15780636d21117e146105c4578063715018a6146105f257600080fd5b806358baaa3e1461056b578063595c6a671461057e5780635ac86ab71461058657600080fd5b806337838ed0146104c957806339b70e38146104f05780633a8c0786146105175780633ccc861d1461052e5780633efe1db6146105415780634d18cc351461055457600080fd5b8063131433b4116102ae578063131433b414610407578063136439dd1461042e578063149bc8721461044157806322f19a64146104625780632b9f64a41461047557806336af41fa146104b657600080fd5b806218572c146102f557806304a0c5021461032d578063092db007146103695780630e9a53cf146103915780630eb38345146103df57806310d67a2f146103f4575b600080fd5b610318610303366004612bc0565b60d16020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103547f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610324565b60cb5461037e90600160e01b900461ffff1681565b60405161ffff9091168152602001610324565b610399610864565b604051610324919060006080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b6103f26103ed366004612beb565b610943565b005b6103f2610402366004612bc0565b6109c5565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103f261043c366004612c24565b610a79565b61045461044f366004612c55565b610b64565b604051908152602001610324565b61037e610470366004612c71565b610bda565b61049e610483366004612bc0565b60cc602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610324565b6103f26104c4366004612c9f565b610bef565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b61049e7f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461035490600160a01b900463ffffffff1681565b6103f261053c366004612d29565b610db7565b6103f261054f366004612d89565b6110a7565b60cb5461035490600160c01b900463ffffffff1681565b6103f2610579366004612db5565b61129d565b6103f26112ae565b610318610594366004612dd0565b606654600160ff9092169190911b9081161490565b606654610454565b6103186105bf366004612df3565b611376565b6103186105d2366004612e28565b60cf60209081526000928352604080842090915290825290205460ff1681565b6103f2611403565b60ca54610454565b6103f2610610366004612bc0565b611417565b610454610623366004612c71565b60cd60209081526000928352604080842090915290825290205481565b60655461049e906001600160a01b031681565b6033546001600160a01b031661049e565b61049e73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610399611428565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103f26106bc366004612bc0565b6114c6565b6103186106cf366004612e28565b60d260209081526000928352604080842090915290825290205460ff1681565b6104546106fd366004612bc0565b60ce6020526000908152604090205481565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b610318610744366004612e28565b60d060209081526000928352604080842090915290825290205460ff1681565b6103f2610772366004612e71565b611525565b610399610785366004612c24565b61166d565b6103f2610798366004612ee4565b6116ff565b6103546107ab366004612c24565b611710565b61049e7f000000000000000000000000000000000000000000000000000000000000000081565b6103f26107e5366004612bc0565b61179c565b610454611812565b610454610800366004612c55565b61184f565b6103f2610813366004612db5565b611860565b6103f2610826366004612c24565b6119b3565b60cb5461049e906001600160a01b031681565b6103f261084c366004612c9f565b611abb565b6103f261085f366004612c9f565b611c2e565b60408051608081018252600080825260208201819052918101829052606081019190915260ca545b801561093f57600060ca6108a1600184612f15565b815481106108b1576108b1612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615801560608301819052919250906109215750806040015163ffffffff164210155b1561092c5792915050565b508061093781612f3e565b91505061088c565b5090565b61094b611dd1565b6001600160a01b038216600081815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b0391909116600090815260d160205260409020805460ff1916911515919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3c9190612f55565b6001600160a01b0316336001600160a01b031614610a6d5760405163794821ff60e01b815260040160405180910390fd5b610a7681611e2b565b50565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae59190612f72565b610b0257604051631d77d47760e21b815260040160405180910390fd5b60665481811614610b265760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b600080610b746020840184612bc0565b8360200135604051602001610bbd9392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b60cb54600160e01b900461ffff165b92915050565b606654600190600290811603610c185760405163840a48d560e01b815260040160405180910390fd5b33600090815260d1602052604090205460ff16610c4857604051635c427cd960e01b815260040160405180910390fd5b600260975403610c735760405162461bcd60e51b8152600401610c6a90612f8f565b60405180910390fd5b600260975560005b82811015610dac5736848483818110610c9657610c96612f28565b9050602002810190610ca89190612fc6565b33600081815260ce60209081526040808320549051949550939192610cd3929091859187910161310b565b604051602081830303815290604052805190602001209050610cf483611ebb565b33600090815260d0602090815260408083208484529091529020805460ff19166001908117909155610d2790839061313b565b33600081815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290610d6f90889061314e565b60405180910390a4610da1333060408601803590610d909060208901612bc0565b6001600160a01b03169291906122cb565b505050600101610c7b565b505060016097555050565b606654600290600490811603610de05760405163840a48d560e01b815260040160405180910390fd5b600260975403610e025760405162461bcd60e51b8152600401610c6a90612f8f565b6002609755600060ca610e186020860186612db5565b63ffffffff1681548110610e2e57610e2e612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050610e8f848261233c565b6000610ea16080860160608701612bc0565b6001600160a01b03808216600090815260cc60205260409020549192501680610ec75750805b336001600160a01b03821614610ef057604051635c427cd960e01b815260040160405180910390fd5b60005b610f0060a0880188613161565b90508110156110995736610f1760e08901896131b2565b83818110610f2757610f27612f28565b6001600160a01b038716600090815260cd602090815260408083209302949094019450929091508290610f5c90850185612bc0565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080826020013511610fa35760405163aa385e8160e01b815260040160405180910390fd5b6000610fb3826020850135612f15565b6001600160a01b038716600090815260cd60209081526040822092935085018035929190610fe19087612bc0565b6001600160a01b0316815260208082019290925260400160002091909155611023908a90839061101390870187612bc0565b6001600160a01b031691906124e0565b86516001600160a01b03808b1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31906110676020890189612bc0565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101610ef3565b505060016097555050505050565b6066546003906008908116036110d05760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b031633146110fb57604051635c427cd960e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161112e57604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff1610611154576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb5460009061117490600160a01b900463ffffffff16426131fc565b6040805160808101825287815263ffffffff878116602080840182815286841685870181815260006060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b6112a5611dd1565b610a7681612510565b60655460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa1580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a9190612f72565b61133757604051631d77d47760e21b815260040160405180910390fd5b600019606681905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60006113fb8260ca61138b6020830183612db5565b63ffffffff16815481106113a1576113a1612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015261233c565b506001919050565b61140b611dd1565b6114156000612581565b565b61141f611dd1565b610a76816125d3565b60408051608081018252600080825260208201819052918101829052606081019190915260ca805461145c90600190612f15565b8154811061146c5761146c612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b33600081815260cc602052604080822080546001600160a01b031981166001600160a01b038781169182179093559251911692839185917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca31291a4505050565b600054610100900460ff16158080156115455750600054600160ff909116105b8061155f5750303b15801561155f575060005460ff166001145b6115c25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c6a565b6000805460ff1916600117905580156115e5576000805461ff0019166101001790555b6115ed61262f565b60c9556115fa86866126c6565b61160387612581565b61160c846125d3565b61161583612510565b61161e8261274b565b8015611664576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260ca82815481106116a4576116a4612f28565b600091825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b611707611dd1565b610a768161274b565b60ca546000905b63ffffffff811615611782578260ca611731600184613218565b63ffffffff168154811061174757611747612f28565b9060005260206000209060020201600001540361177057611769600182613218565b9392505050565b8061177a81613234565b915050611717565b5060405163504570e360e01b815260040160405180910390fd5b6117a4611dd1565b6001600160a01b0381166118095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c6a565b610a7681612581565b60007f00000000000000000000000000000000000000000000000000000000000000004603611842575060c95490565b61184a61262f565b905090565b60006001610b746020840184612bc0565b6066546003906008908116036118895760405163840a48d560e01b815260040160405180910390fd5b60cb546001600160a01b031633146118b457604051635c427cd960e01b815260040160405180910390fd5b60ca5463ffffffff8316106118dc576040516394a8d38960e01b815260040160405180910390fd5b600060ca8363ffffffff16815481106118f7576118f7612f28565b906000526020600020906002020190508060010160089054906101000a900460ff161561193757604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061196857604051630c36f66560e21b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e90600090a2505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a9190612f55565b6001600160a01b0316336001600160a01b031614611a5b5760405163794821ff60e01b815260040160405180910390fd5b606654198119606654191614611a845760405163c61dca5d60e01b815260040160405180910390fd5b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610b59565b606654600090600190811603611ae45760405163840a48d560e01b815260040160405180910390fd5b600260975403611b065760405162461bcd60e51b8152600401610c6a90612f8f565b600260975560005b82811015610dac5736848483818110611b2957611b29612f28565b9050602002810190611b3b9190612fc6565b33600081815260ce60209081526040808320549051949550939192611b66929091859187910161310b565b604051602081830303815290604052805190602001209050611b8783611ebb565b33600090815260cf602090815260408083208484529091529020805460ff19166001908117909155611bba90839061313b565b33600081815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e628190611c0290889061314e565b60405180910390a4611c23333060408601803590610d909060208901612bc0565b505050600101611b0e565b606654600490601090811603611c575760405163840a48d560e01b815260040160405180910390fd5b33600090815260d1602052604090205460ff16611c8757604051635c427cd960e01b815260040160405180910390fd5b600260975403611ca95760405162461bcd60e51b8152600401610c6a90612f8f565b600260975560005b82811015610dac5736848483818110611ccc57611ccc612f28565b9050602002810190611cde9190612fc6565b33600081815260ce60209081526040808320549051949550939192611d09929091859187910161310b565b604051602081830303815290604052805190602001209050611d2a83611ebb565b33600090815260d2602090815260408083208484529091529020805460ff19166001908117909155611d5d90839061313b565b33600081815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b90611da590889061314e565b60405180910390a4611dc6333060408601803590610d909060208901612bc0565b505050600101611cb1565b6033546001600160a01b031633146114155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c6a565b6001600160a01b038116611e52576040516339b190bb60e11b815260040160405180910390fd5b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611ec782806131b2565b905011611ee75760405163796cc52560e01b815260040160405180910390fd5b6000816040013511611f0c576040516310eb483f60e21b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff81604001351115611f415760405163070b5a6f60e21b815260040160405180910390fd5b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611f7860a0830160808401612db5565b63ffffffff161115611f9d57604051630dd0b9f560e21b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000611fce60a0830160808401612db5565b611fd8919061326a565b63ffffffff1615611ffc5760405163ee66470560e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061202d6080830160608401612db5565b612037919061326a565b63ffffffff161561205b57604051633c1a94f160e21b815260040160405180910390fd5b61206b6080820160608301612db5565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16426120a39190612f15565b111580156120ec57506120bc6080820160608301612db5565b63ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b6121095760405163041aa75760e11b815260040160405180910390fd5b61213963ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164261313b565b6121496080830160608401612db5565b63ffffffff16111561216e57604051637ee2b44360e01b815260040160405180910390fd5b6000805b61217c83806131b2565b90508110156122c657600061219184806131b2565b838181106121a1576121a1612f28565b6121b79260206040909202019081019150612bc0565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa158015612222573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122469190612f72565b8061226d57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61228a57604051632efd965160e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b0316106122bc5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101612172565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526123369085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526127b6565b50505050565b80606001511561235f57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff1642101561238a57604051631437a2bb60e31b815260040160405180910390fd5b61239760c0830183613161565b90506123a660a0840184613161565b9050146123c6576040516343714afd60e01b815260040160405180910390fd5b6123d360e08301836131b2565b90506123e260c0840184613161565b905014612402576040516343714afd60e01b815260040160405180910390fd5b805161242e906124186040850160208601612db5565b6124256040860186613292565b86606001612888565b60005b61243e60a0840184613161565b90508110156122c6576124d8608084013561245c60a0860186613161565b8481811061246c5761246c612f28565b90506020020160208101906124819190612db5565b61248e60c0870187613161565b8581811061249e5761249e612f28565b90506020028101906124b09190613292565b6124bd60e08901896131b2565b878181106124cd576124cd612f28565b905060400201612936565b600101612431565b6040516001600160a01b0383166024820152604481018290526122c690849063a9059cbb60e01b906064016122ff565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb90600090a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6065546001600160a01b03161580156126e757506001600160a01b03821615155b612704576040516339b190bb60e11b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261274782611e2b565b5050565b60cb546040805161ffff600160e01b9093048316815291831660208301527f8cdc428b0431b82d1619763f443a48197db344ba96905f3949643acd1c863a06910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b600061280b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129759092919063ffffffff16565b8051909150156122c657808060200190518101906128299190612f72565b6122c65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c6a565b6128936020836132d9565b6001901b8463ffffffff16106128bb5760405162c6c39d60e71b815260040160405180910390fd5b60006128c682610b64565b905061291184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92508591505063ffffffff891661298c565b61292e576040516369ca16c960e01b815260040160405180910390fd5b505050505050565b6129416020836132d9565b6001901b8463ffffffff161061296a5760405163054ff4df60e51b815260040160405180910390fd5b60006128c68261184f565b606061298484846000856129a4565b949350505050565b60008361299a868585612ad5565b1495945050505050565b606082471015612a055760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c6a565b6001600160a01b0385163b612a5c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c6a565b600080866001600160a01b03168587604051612a789190613311565b60006040518083038185875af1925050503d8060008114612ab5576040519150601f19603f3d011682016040523d82523d6000602084013e612aba565b606091505b5091509150612aca828286612b72565b979650505050505050565b600060208451612ae59190613323565b15612b03576040516313717da960e21b815260040160405180910390fd5b8260205b85518111612b6957612b1a600285613323565b600003612b3e57816000528086015160205260406000209150600284049350612b57565b8086015160005281602052604060002091506002840493505b612b6260208261313b565b9050612b07565b50949350505050565b60608315612b81575081611769565b825115612b915782518084602001fd5b8160405162461bcd60e51b8152600401610c6a9190613337565b6001600160a01b0381168114610a7657600080fd5b600060208284031215612bd257600080fd5b813561176981612bab565b8015158114610a7657600080fd5b60008060408385031215612bfe57600080fd5b8235612c0981612bab565b91506020830135612c1981612bdd565b809150509250929050565b600060208284031215612c3657600080fd5b5035919050565b600060408284031215612c4f57600080fd5b50919050565b600060408284031215612c6757600080fd5b6117698383612c3d565b60008060408385031215612c8457600080fd5b8235612c8f81612bab565b91506020830135612c1981612bab565b60008060208385031215612cb257600080fd5b823567ffffffffffffffff811115612cc957600080fd5b8301601f81018513612cda57600080fd5b803567ffffffffffffffff811115612cf157600080fd5b8560208260051b8401011115612d0657600080fd5b6020919091019590945092505050565b60006101008284031215612c4f57600080fd5b60008060408385031215612d3c57600080fd5b823567ffffffffffffffff811115612d5357600080fd5b612d5f85828601612d16565b9250506020830135612c1981612bab565b803563ffffffff81168114612d8457600080fd5b919050565b60008060408385031215612d9c57600080fd5b82359150612dac60208401612d70565b90509250929050565b600060208284031215612dc757600080fd5b61176982612d70565b600060208284031215612de257600080fd5b813560ff8116811461176957600080fd5b600060208284031215612e0557600080fd5b813567ffffffffffffffff811115612e1c57600080fd5b61298484828501612d16565b60008060408385031215612e3b57600080fd5b8235612e4681612bab565b946020939093013593505050565b8035612d8481612bab565b803561ffff81168114612d8457600080fd5b60008060008060008060c08789031215612e8a57600080fd5b8635612e9581612bab565b95506020870135612ea581612bab565b9450604087013593506060870135612ebc81612bab565b9250612eca60808801612d70565b9150612ed860a08801612e5f565b90509295509295509295565b600060208284031215612ef657600080fd5b61176982612e5f565b634e487b7160e01b600052601160045260246000fd5b81810381811115610be957610be9612eff565b634e487b7160e01b600052603260045260246000fd5b600081612f4d57612f4d612eff565b506000190190565b600060208284031215612f6757600080fd5b815161176981612bab565b600060208284031215612f8457600080fd5b815161176981612bdd565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008235609e19833603018112612fdc57600080fd5b9190910192915050565b81835260208301925060008160005b8481101561304c57813561300881612bab565b6001600160a01b0316865260208201356bffffffffffffffffffffffff811680821461303357600080fd5b6020880152506040958601959190910190600101612ff5565b5093949350505050565b60008135601e1983360301811261306c57600080fd5b820160208101903567ffffffffffffffff81111561308957600080fd5b8060061b360382131561309b57600080fd5b60a085526130ad60a086018284612fe6565b9150506130bc60208401612e54565b6001600160a01b03166020850152604083810135908501526130e060608401612d70565b63ffffffff1660608501526130f760808401612d70565b63ffffffff81166080860152509392505050565b60018060a01b03841681528260208201526060604082015260006131326060830184613056565b95945050505050565b80820180821115610be957610be9612eff565b6020815260006117696020830184613056565b6000808335601e1984360301811261317857600080fd5b83018035915067ffffffffffffffff82111561319357600080fd5b6020019150600581901b36038213156131ab57600080fd5b9250929050565b6000808335601e198436030181126131c957600080fd5b83018035915067ffffffffffffffff8211156131e457600080fd5b6020019150600681901b36038213156131ab57600080fd5b63ffffffff8181168382160190811115610be957610be9612eff565b63ffffffff8281168282160390811115610be957610be9612eff565b600063ffffffff82168061324a5761324a612eff565b6000190192915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff83168061328057613280613254565b8063ffffffff84160691505092915050565b6000808335601e198436030181126132a957600080fd5b83018035915067ffffffffffffffff8211156132c457600080fd5b6020019150368190038213156131ab57600080fd5b6000826132e8576132e8613254565b500490565b60005b838110156133085781810151838201526020016132f0565b50506000910152565b60008251612fdc8184602087016132ed565b60008261333257613332613254565b500690565b60208152600082518060208401526133568160408501602087016132ed565b601f01601f1916919091016040019291505056fea26469706673582212203a95cc2ce8ce7de62ba4fd4c2060745edc0ad10c8b0260ded17eae31a6e975ce64736f6c634300081b0033", } // RewardsCoordinatorABI is the input ABI used to generate the binding from. @@ -107,7 +90,7 @@ var RewardsCoordinatorABI = RewardsCoordinatorMetaData.ABI var RewardsCoordinatorBin = RewardsCoordinatorMetaData.Bin // DeployRewardsCoordinator deploys a new Ethereum contract, binding an instance of RewardsCoordinator to it. -func DeployRewardsCoordinator(auth *bind.TransactOpts, backend bind.ContractBackend, _delegationManager common.Address, _strategyManager common.Address, _avsDirectory common.Address, _CALCULATION_INTERVAL_SECONDS uint32, _MAX_REWARDS_DURATION uint32, _MAX_RETROACTIVE_LENGTH uint32, _MAX_FUTURE_LENGTH uint32, _GENESIS_REWARDS_TIMESTAMP uint32, _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP uint32, _OPERATOR_SET_MAX_RETROACTIVE_LENGTH uint32) (common.Address, *types.Transaction, *RewardsCoordinator, error) { +func DeployRewardsCoordinator(auth *bind.TransactOpts, backend bind.ContractBackend, _delegationManager common.Address, _strategyManager common.Address, _CALCULATION_INTERVAL_SECONDS uint32, _MAX_REWARDS_DURATION uint32, _MAX_RETROACTIVE_LENGTH uint32, _MAX_FUTURE_LENGTH uint32, __GENESIS_REWARDS_TIMESTAMP uint32) (common.Address, *types.Transaction, *RewardsCoordinator, error) { parsed, err := RewardsCoordinatorMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -116,7 +99,7 @@ func DeployRewardsCoordinator(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(RewardsCoordinatorBin), backend, _delegationManager, _strategyManager, _avsDirectory, _CALCULATION_INTERVAL_SECONDS, _MAX_REWARDS_DURATION, _MAX_RETROACTIVE_LENGTH, _MAX_FUTURE_LENGTH, _GENESIS_REWARDS_TIMESTAMP, _OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP, _OPERATOR_SET_MAX_RETROACTIVE_LENGTH) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RewardsCoordinatorBin), backend, _delegationManager, _strategyManager, _CALCULATION_INTERVAL_SECONDS, _MAX_REWARDS_DURATION, _MAX_RETROACTIVE_LENGTH, _MAX_FUTURE_LENGTH, __GENESIS_REWARDS_TIMESTAMP) if err != nil { return common.Address{}, nil, nil, err } @@ -420,68 +403,6 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) MAXREWARDSDURATION() return _RewardsCoordinator.Contract.MAXREWARDSDURATION(&_RewardsCoordinator.CallOpts) } -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorCaller) OPERATORSETGENESISREWARDSTIMESTAMP(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { - return _RewardsCoordinator.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinator.CallOpts) -} - -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { - return _RewardsCoordinator.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinator.CallOpts) -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorCaller) OPERATORSETMAXRETROACTIVELENGTH(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "OPERATOR_SET_MAX_RETROACTIVE_LENGTH") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { - return _RewardsCoordinator.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinator.CallOpts) -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { - return _RewardsCoordinator.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinator.CallOpts) -} - // ActivationDelay is a free data retrieval call binding the contract method 0x3a8c0786. // // Solidity: function activationDelay() view returns(uint32) @@ -513,37 +434,6 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) ActivationDelay() (u return _RewardsCoordinator.Contract.ActivationDelay(&_RewardsCoordinator.CallOpts) } -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinator *RewardsCoordinatorCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "avsDirectory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinator *RewardsCoordinatorSession) AvsDirectory() (common.Address, error) { - return _RewardsCoordinator.Contract.AvsDirectory(&_RewardsCoordinator.CallOpts) -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) AvsDirectory() (common.Address, error) { - return _RewardsCoordinator.Contract.AvsDirectory(&_RewardsCoordinator.CallOpts) -} - // BeaconChainETHStrategy is a free data retrieval call binding the contract method 0x9104c319. // // Solidity: function beaconChainETHStrategy() view returns(address) @@ -947,68 +837,6 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) GetDistributionRoots return _RewardsCoordinator.Contract.GetDistributionRootsLength(&_RewardsCoordinator.CallOpts) } -// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. -// -// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) -func (_RewardsCoordinator *RewardsCoordinatorCaller) GetOperatorCommissionBips(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { - var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "getOperatorCommissionBips", operator, operatorSet, rewardType) - - if err != nil { - return *new(uint16), err - } - - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - - return out0, err - -} - -// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. -// -// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) -func (_RewardsCoordinator *RewardsCoordinatorSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { - return _RewardsCoordinator.Contract.GetOperatorCommissionBips(&_RewardsCoordinator.CallOpts, operator, operatorSet, rewardType) -} - -// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. -// -// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { - return _RewardsCoordinator.Contract.GetOperatorCommissionBips(&_RewardsCoordinator.CallOpts, operator, operatorSet, rewardType) -} - -// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. -// -// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) -func (_RewardsCoordinator *RewardsCoordinatorCaller) GetOperatorCommissionUpdateHistoryLength(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { - var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "getOperatorCommissionUpdateHistoryLength", operator, operatorSet, rewardType) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. -// -// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) -func (_RewardsCoordinator *RewardsCoordinatorSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { - return _RewardsCoordinator.Contract.GetOperatorCommissionUpdateHistoryLength(&_RewardsCoordinator.CallOpts, operator, operatorSet, rewardType) -} - -// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. -// -// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { - return _RewardsCoordinator.Contract.GetOperatorCommissionUpdateHistoryLength(&_RewardsCoordinator.CallOpts, operator, operatorSet, rewardType) -} - // GetRootIndexFromHash is a free data retrieval call binding the contract method 0xe810ce21. // // Solidity: function getRootIndexFromHash(bytes32 rootHash) view returns(uint32) @@ -1133,6 +961,37 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) IsRewardsForAllSubmi return _RewardsCoordinator.Contract.IsRewardsForAllSubmitter(&_RewardsCoordinator.CallOpts, arg0) } +// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. +// +// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) +func (_RewardsCoordinator *RewardsCoordinatorCaller) IsRewardsSubmissionForAllEarnersHash(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { + var out []interface{} + err := _RewardsCoordinator.contract.Call(opts, &out, "isRewardsSubmissionForAllEarnersHash", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. +// +// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) +func (_RewardsCoordinator *RewardsCoordinatorSession) IsRewardsSubmissionForAllEarnersHash(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _RewardsCoordinator.Contract.IsRewardsSubmissionForAllEarnersHash(&_RewardsCoordinator.CallOpts, arg0, arg1) +} + +// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. +// +// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) +func (_RewardsCoordinator *RewardsCoordinatorCallerSession) IsRewardsSubmissionForAllEarnersHash(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _RewardsCoordinator.Contract.IsRewardsSubmissionForAllEarnersHash(&_RewardsCoordinator.CallOpts, arg0, arg1) +} + // IsRewardsSubmissionForAllHash is a free data retrieval call binding the contract method 0xc46db606. // // Solidity: function isRewardsSubmissionForAllHash(address , bytes32 ) view returns(bool) @@ -1164,49 +1023,35 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) IsRewardsSubmissionF return _RewardsCoordinator.Contract.IsRewardsSubmissionForAllHash(&_RewardsCoordinator.CallOpts, arg0, arg1) } -// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. +// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. // -// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) -func (_RewardsCoordinator *RewardsCoordinatorCaller) OperatorCommissionUpdates(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { - CommissionBips uint16 - EffectTimestamp uint32 -}, error) { +// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) +func (_RewardsCoordinator *RewardsCoordinatorCaller) OperatorCommissionBips(opts *bind.CallOpts, operator common.Address, avs common.Address) (uint16, error) { var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "operatorCommissionUpdates", arg0, arg1, arg2, arg3, arg4) + err := _RewardsCoordinator.contract.Call(opts, &out, "operatorCommissionBips", operator, avs) - outstruct := new(struct { - CommissionBips uint16 - EffectTimestamp uint32 - }) if err != nil { - return *outstruct, err + return *new(uint16), err } - outstruct.CommissionBips = *abi.ConvertType(out[0], new(uint16)).(*uint16) - outstruct.EffectTimestamp = *abi.ConvertType(out[1], new(uint32)).(*uint32) + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - return *outstruct, err + return out0, err } -// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. +// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. // -// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) -func (_RewardsCoordinator *RewardsCoordinatorSession) OperatorCommissionUpdates(arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { - CommissionBips uint16 - EffectTimestamp uint32 -}, error) { - return _RewardsCoordinator.Contract.OperatorCommissionUpdates(&_RewardsCoordinator.CallOpts, arg0, arg1, arg2, arg3, arg4) +// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) +func (_RewardsCoordinator *RewardsCoordinatorSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { + return _RewardsCoordinator.Contract.OperatorCommissionBips(&_RewardsCoordinator.CallOpts, operator, avs) } -// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. +// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. // -// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OperatorCommissionUpdates(arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { - CommissionBips uint16 - EffectTimestamp uint32 -}, error) { - return _RewardsCoordinator.Contract.OperatorCommissionUpdates(&_RewardsCoordinator.CallOpts, arg0, arg1, arg2, arg3, arg4) +// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) +func (_RewardsCoordinator *RewardsCoordinatorCallerSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { + return _RewardsCoordinator.Contract.OperatorCommissionBips(&_RewardsCoordinator.CallOpts, operator, avs) } // Owner is a free data retrieval call binding the contract method 0x8da5cb5b. @@ -1447,6 +1292,27 @@ func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) CreateAVSRewards return _RewardsCoordinator.Contract.CreateAVSRewardsSubmission(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) } +// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. +// +// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinator *RewardsCoordinatorTransactor) CreateRewardsForAllEarners(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinator.contract.Transact(opts, "createRewardsForAllEarners", rewardsSubmissions) +} + +// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. +// +// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinator *RewardsCoordinatorSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinator.Contract.CreateRewardsForAllEarners(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) +} + +// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. +// +// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinator.Contract.CreateRewardsForAllEarners(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) +} + // CreateRewardsForAllSubmission is a paid mutator transaction binding the contract method 0x36af41fa. // // Solidity: function createRewardsForAllSubmission(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() @@ -1594,27 +1460,6 @@ func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) RenounceOwnershi return _RewardsCoordinator.Contract.RenounceOwnership(&_RewardsCoordinator.TransactOpts) } -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinator *RewardsCoordinatorTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinator.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinator *RewardsCoordinatorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinator.Contract.RewardOperatorSetForRange(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinator.Contract.RewardOperatorSetForRange(&_RewardsCoordinator.TransactOpts, rewardsSubmissions) -} - // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -1678,27 +1523,6 @@ func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) SetGlobalOperato return _RewardsCoordinator.Contract.SetGlobalOperatorCommission(&_RewardsCoordinator.TransactOpts, _globalCommissionBips) } -// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. -// -// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32 effectTimestamp) -func (_RewardsCoordinator *RewardsCoordinatorTransactor) SetOperatorCommissionBips(opts *bind.TransactOpts, operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { - return _RewardsCoordinator.contract.Transact(opts, "setOperatorCommissionBips", operatorSet, rewardType, commissionBips) -} - -// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. -// -// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32 effectTimestamp) -func (_RewardsCoordinator *RewardsCoordinatorSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { - return _RewardsCoordinator.Contract.SetOperatorCommissionBips(&_RewardsCoordinator.TransactOpts, operatorSet, rewardType, commissionBips) -} - -// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. -// -// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32 effectTimestamp) -func (_RewardsCoordinator *RewardsCoordinatorTransactorSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { - return _RewardsCoordinator.Contract.SetOperatorCommissionBips(&_RewardsCoordinator.TransactOpts, operatorSet, rewardType, commissionBips) -} - // SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. // // Solidity: function setPauserRegistry(address newPauserRegistry) returns() @@ -2861,9 +2685,9 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseInitialized(log type return event, nil } -// RewardsCoordinatorOperatorCommissionUpdatedIterator is returned from FilterOperatorCommissionUpdated and is used to iterate over the raw logs and unpacked data for OperatorCommissionUpdated events raised by the RewardsCoordinator contract. -type RewardsCoordinatorOperatorCommissionUpdatedIterator struct { - Event *RewardsCoordinatorOperatorCommissionUpdated // Event containing the contract specifics and raw log +// RewardsCoordinatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the RewardsCoordinator contract. +type RewardsCoordinatorOwnershipTransferredIterator struct { + Event *RewardsCoordinatorOwnershipTransferred // 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 @@ -2877,7 +2701,7 @@ type RewardsCoordinatorOperatorCommissionUpdatedIterator 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 *RewardsCoordinatorOperatorCommissionUpdatedIterator) Next() bool { +func (it *RewardsCoordinatorOwnershipTransferredIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2886,7 +2710,7 @@ func (it *RewardsCoordinatorOperatorCommissionUpdatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorOperatorCommissionUpdated) + it.Event = new(RewardsCoordinatorOwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2901,7 +2725,7 @@ func (it *RewardsCoordinatorOperatorCommissionUpdatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorOperatorCommissionUpdated) + it.Event = new(RewardsCoordinatorOwnershipTransferred) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2917,63 +2741,60 @@ func (it *RewardsCoordinatorOperatorCommissionUpdatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorOperatorCommissionUpdatedIterator) Error() error { +func (it *RewardsCoordinatorOwnershipTransferredIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorOperatorCommissionUpdatedIterator) Close() error { +func (it *RewardsCoordinatorOwnershipTransferredIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorOperatorCommissionUpdated represents a OperatorCommissionUpdated event raised by the RewardsCoordinator contract. -type RewardsCoordinatorOperatorCommissionUpdated struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - RewardType uint8 - NewCommissionBips uint16 - EffectTimestamp uint32 - Raw types.Log // Blockchain specific contextual infos +// RewardsCoordinatorOwnershipTransferred represents a OwnershipTransferred event raised by the RewardsCoordinator contract. +type RewardsCoordinatorOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorCommissionUpdated is a free log retrieval operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterOperatorCommissionUpdated(opts *bind.FilterOpts, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (*RewardsCoordinatorOperatorCommissionUpdatedIterator, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*RewardsCoordinatorOwnershipTransferredIterator, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) } - var operatorSetRule []interface{} - for _, operatorSetItem := range operatorSet { - operatorSetRule = append(operatorSetRule, operatorSetItem) + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) + logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } - return &RewardsCoordinatorOperatorCommissionUpdatedIterator{contract: _RewardsCoordinator.contract, event: "OperatorCommissionUpdated", logs: logs, sub: sub}, nil + return &RewardsCoordinatorOwnershipTransferredIterator{contract: _RewardsCoordinator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil } -// WatchOperatorCommissionUpdated is a free log subscription operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOperatorCommissionUpdated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorOperatorCommissionUpdated, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (event.Subscription, error) { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) } - var operatorSetRule []interface{} - for _, operatorSetItem := range operatorSet { - operatorSetRule = append(operatorSetRule, operatorSetItem) + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) } - logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) + logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) if err != nil { return nil, err } @@ -2983,8 +2804,8 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOperatorCommissionUp select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorOperatorCommissionUpdated) - if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorCommissionUpdated", log); err != nil { + event := new(RewardsCoordinatorOwnershipTransferred) + if err := _RewardsCoordinator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return err } event.Raw = log @@ -3005,21 +2826,21 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOperatorCommissionUp }), nil } -// ParseOperatorCommissionUpdated is a log parse operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. // -// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOperatorCommissionUpdated(log types.Log) (*RewardsCoordinatorOperatorCommissionUpdated, error) { - event := new(RewardsCoordinatorOperatorCommissionUpdated) - if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorCommissionUpdated", log); err != nil { +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOwnershipTransferred(log types.Log) (*RewardsCoordinatorOwnershipTransferred, error) { + event := new(RewardsCoordinatorOwnershipTransferred) + if err := _RewardsCoordinator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { return nil, err } event.Raw = log return event, nil } -// RewardsCoordinatorOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the RewardsCoordinator contract. -type RewardsCoordinatorOperatorSetRewardCreatedIterator struct { - Event *RewardsCoordinatorOperatorSetRewardCreated // Event containing the contract specifics and raw log +// RewardsCoordinatorPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the RewardsCoordinator contract. +type RewardsCoordinatorPausedIterator struct { + Event *RewardsCoordinatorPaused // 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 @@ -3033,7 +2854,7 @@ type RewardsCoordinatorOperatorSetRewardCreatedIterator 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 *RewardsCoordinatorOperatorSetRewardCreatedIterator) Next() bool { +func (it *RewardsCoordinatorPausedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3042,7 +2863,7 @@ func (it *RewardsCoordinatorOperatorSetRewardCreatedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorOperatorSetRewardCreated) + it.Event = new(RewardsCoordinatorPaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3057,7 +2878,7 @@ func (it *RewardsCoordinatorOperatorSetRewardCreatedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorOperatorSetRewardCreated) + it.Event = new(RewardsCoordinatorPaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3073,70 +2894,52 @@ func (it *RewardsCoordinatorOperatorSetRewardCreatedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorOperatorSetRewardCreatedIterator) Error() error { +func (it *RewardsCoordinatorPausedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorOperatorSetRewardCreatedIterator) Close() error { +func (it *RewardsCoordinatorPausedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the RewardsCoordinator contract. -type RewardsCoordinatorOperatorSetRewardCreated struct { - Avs common.Address - SubmissionNonce *big.Int - RewardsSubmissionHash [32]byte - RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission - Raw types.Log // Blockchain specific contextual infos +// RewardsCoordinatorPaused represents a Paused event raised by the RewardsCoordinator contract. +type RewardsCoordinatorPaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. // -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorOperatorSetRewardCreatedIterator, error) { +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*RewardsCoordinatorPausedIterator, error) { - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) } - logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) + logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "Paused", accountRule) if err != nil { return nil, err } - return &RewardsCoordinatorOperatorSetRewardCreatedIterator{contract: _RewardsCoordinator.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil + return &RewardsCoordinatorPausedIterator{contract: _RewardsCoordinator.contract, event: "Paused", logs: logs, sub: sub}, nil } -// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. // -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorPaused, account []common.Address) (event.Subscription, error) { - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) } - logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) + logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "Paused", accountRule) if err != nil { return nil, err } @@ -3146,8 +2949,8 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOperatorSetRewardCre select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorOperatorSetRewardCreated) - if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { + event := new(RewardsCoordinatorPaused) + if err := _RewardsCoordinator.contract.UnpackLog(event, "Paused", log); err != nil { return err } event.Raw = log @@ -3168,310 +2971,12 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOperatorSetRewardCre }), nil } -// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. // -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOperatorSetRewardCreated(log types.Log) (*RewardsCoordinatorOperatorSetRewardCreated, error) { - event := new(RewardsCoordinatorOperatorSetRewardCreated) - if err := _RewardsCoordinator.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RewardsCoordinatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the RewardsCoordinator contract. -type RewardsCoordinatorOwnershipTransferredIterator struct { - Event *RewardsCoordinatorOwnershipTransferred // 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 *RewardsCoordinatorOwnershipTransferredIterator) 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(RewardsCoordinatorOwnershipTransferred) - 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(RewardsCoordinatorOwnershipTransferred) - 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 *RewardsCoordinatorOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RewardsCoordinatorOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RewardsCoordinatorOwnershipTransferred represents a OwnershipTransferred event raised by the RewardsCoordinator contract. -type RewardsCoordinatorOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*RewardsCoordinatorOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &RewardsCoordinatorOwnershipTransferredIterator{contract: _RewardsCoordinator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - 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(RewardsCoordinatorOwnershipTransferred) - if err := _RewardsCoordinator.contract.UnpackLog(event, "OwnershipTransferred", 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 -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseOwnershipTransferred(log types.Log) (*RewardsCoordinatorOwnershipTransferred, error) { - event := new(RewardsCoordinatorOwnershipTransferred) - if err := _RewardsCoordinator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RewardsCoordinatorPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the RewardsCoordinator contract. -type RewardsCoordinatorPausedIterator struct { - Event *RewardsCoordinatorPaused // 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 *RewardsCoordinatorPausedIterator) 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(RewardsCoordinatorPaused) - 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(RewardsCoordinatorPaused) - 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 *RewardsCoordinatorPausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RewardsCoordinatorPausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RewardsCoordinatorPaused represents a Paused event raised by the RewardsCoordinator contract. -type RewardsCoordinatorPaused struct { - Account common.Address - NewPausedStatus *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. -// -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*RewardsCoordinatorPausedIterator, error) { - - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - - logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "Paused", accountRule) - if err != nil { - return nil, err - } - return &RewardsCoordinatorPausedIterator{contract: _RewardsCoordinator.contract, event: "Paused", logs: logs, sub: sub}, nil -} - -// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. -// -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorPaused, account []common.Address) (event.Subscription, error) { - - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - - logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "Paused", 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(RewardsCoordinatorPaused) - if err := _RewardsCoordinator.contract.UnpackLog(event, "Paused", 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 -} - -// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. -// -// Solidity: event Paused(address indexed account, uint256 newPausedStatus) -func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParsePaused(log types.Log) (*RewardsCoordinatorPaused, error) { - event := new(RewardsCoordinatorPaused) - if err := _RewardsCoordinator.contract.UnpackLog(event, "Paused", log); err != nil { +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParsePaused(log types.Log) (*RewardsCoordinatorPaused, error) { + event := new(RewardsCoordinatorPaused) + if err := _RewardsCoordinator.contract.UnpackLog(event, "Paused", log); err != nil { return nil, err } event.Raw = log @@ -4103,6 +3608,169 @@ func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseRewardsSubmissionFor return event, nil } +// RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator is returned from FilterRewardsSubmissionForAllEarnersCreated and is used to iterate over the raw logs and unpacked data for RewardsSubmissionForAllEarnersCreated events raised by the RewardsCoordinator contract. +type RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator struct { + Event *RewardsCoordinatorRewardsSubmissionForAllEarnersCreated // 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 *RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) 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(RewardsCoordinatorRewardsSubmissionForAllEarnersCreated) + 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(RewardsCoordinatorRewardsSubmissionForAllEarnersCreated) + 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 *RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RewardsCoordinatorRewardsSubmissionForAllEarnersCreated represents a RewardsSubmissionForAllEarnersCreated event raised by the RewardsCoordinator contract. +type RewardsCoordinatorRewardsSubmissionForAllEarnersCreated struct { + TokenHopper common.Address + SubmissionNonce *big.Int + RewardsSubmissionHash [32]byte + RewardsSubmission IRewardsCoordinatorRewardsSubmission + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRewardsSubmissionForAllEarnersCreated is a free log retrieval operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. +// +// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) FilterRewardsSubmissionForAllEarnersCreated(opts *bind.FilterOpts, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator, error) { + + var tokenHopperRule []interface{} + for _, tokenHopperItem := range tokenHopper { + tokenHopperRule = append(tokenHopperRule, tokenHopperItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _RewardsCoordinator.contract.FilterLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) + if err != nil { + return nil, err + } + return &RewardsCoordinatorRewardsSubmissionForAllEarnersCreatedIterator{contract: _RewardsCoordinator.contract, event: "RewardsSubmissionForAllEarnersCreated", logs: logs, sub: sub}, nil +} + +// WatchRewardsSubmissionForAllEarnersCreated is a free log subscription operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. +// +// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) WatchRewardsSubmissionForAllEarnersCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorRewardsSubmissionForAllEarnersCreated, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { + + var tokenHopperRule []interface{} + for _, tokenHopperItem := range tokenHopper { + tokenHopperRule = append(tokenHopperRule, tokenHopperItem) + } + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + } + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + } + + logs, sub, err := _RewardsCoordinator.contract.WatchLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) + 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(RewardsCoordinatorRewardsSubmissionForAllEarnersCreated) + if err := _RewardsCoordinator.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", 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 +} + +// ParseRewardsSubmissionForAllEarnersCreated is a log parse operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. +// +// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinator *RewardsCoordinatorFilterer) ParseRewardsSubmissionForAllEarnersCreated(log types.Log) (*RewardsCoordinatorRewardsSubmissionForAllEarnersCreated, error) { + event := new(RewardsCoordinatorRewardsSubmissionForAllEarnersCreated) + if err := _RewardsCoordinator.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // RewardsCoordinatorRewardsUpdaterSetIterator is returned from FilterRewardsUpdaterSet and is used to iterate over the raw logs and unpacked data for RewardsUpdaterSet events raised by the RewardsCoordinator contract. type RewardsCoordinatorRewardsUpdaterSetIterator struct { Event *RewardsCoordinatorRewardsUpdaterSet // Event containing the contract specifics and raw log diff --git a/pkg/bindings/RewardsCoordinatorStorage/binding.go b/pkg/bindings/RewardsCoordinatorStorage/binding.go index 8df917060..fe83adebc 100644 --- a/pkg/bindings/RewardsCoordinatorStorage/binding.go +++ b/pkg/bindings/RewardsCoordinatorStorage/binding.go @@ -29,12 +29,6 @@ var ( _ = abi.ConvertType ) -// IAVSDirectoryOperatorSet is an auto generated low-level Go binding around an user-defined struct. -type IAVSDirectoryOperatorSet struct { - Avs common.Address - OperatorSetId uint32 -} - // IRewardsCoordinatorDistributionRoot is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorDistributionRoot struct { Root [32]byte @@ -49,17 +43,6 @@ type IRewardsCoordinatorEarnerTreeMerkleLeaf struct { EarnerTokenRoot [32]byte } -// IRewardsCoordinatorOperatorSetRewardsSubmission is an auto generated low-level Go binding around an user-defined struct. -type IRewardsCoordinatorOperatorSetRewardsSubmission struct { - RewardType uint8 - OperatorSetId uint32 - StrategiesAndMultipliers []IRewardsCoordinatorStrategyAndMultiplier - Token common.Address - Amount *big.Int - StartTimestamp uint32 - Duration uint32 -} - // IRewardsCoordinatorRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. type IRewardsCoordinatorRewardsMerkleClaim struct { RootIndex uint32 @@ -94,7 +77,7 @@ type IRewardsCoordinatorTokenTreeMerkleLeaf 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\":\"OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_MAX_RETROACTIVE_LENGTH\",\"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\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getOperatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCommissionUpdateHistoryLength\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionUpdates\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"rewardOperatorSetForRange\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission[]\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorCommissionBips\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"commissionBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorCommissionUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structIAVSDirectory.OperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"rewardType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"newCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"effectTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetRewardCreated\",\"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\":\"structIRewardsCoordinator.OperatorSetRewardsSubmission\",\"components\":[{\"name\":\"rewardType\",\"type\":\"uint8\",\"internalType\":\"enumIRewardsCoordinator.RewardType\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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}]", + 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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"rewardsSubmission\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"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\":\"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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalOperatorCommissionBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorCommissionBips\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.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\":\"setGlobalOperatorCommission\",\"inputs\":[{\"name\":\"_globalCommissionBips\",\"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\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"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\":\"GlobalCommissionBipsSet\",\"inputs\":[{\"name\":\"oldGlobalCommissionBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newGlobalCommissionBips\",\"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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"structIRewardsCoordinator.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinator.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\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDurationRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"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\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootAlreadyActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", } // RewardsCoordinatorStorageABI is the input ABI used to generate the binding from. @@ -398,68 +381,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) MAXREW return _RewardsCoordinatorStorage.Contract.MAXREWARDSDURATION(&_RewardsCoordinatorStorage.CallOpts) } -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OPERATORSETGENESISREWARDSTIMESTAMP(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { - return _RewardsCoordinatorStorage.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinatorStorage.CallOpts) -} - -// OPERATORSETGENESISREWARDSTIMESTAMP is a free data retrieval call binding the contract method 0xd11e9ae5. -// -// Solidity: function OPERATOR_SET_GENESIS_REWARDS_TIMESTAMP() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OPERATORSETGENESISREWARDSTIMESTAMP() (uint32, error) { - return _RewardsCoordinatorStorage.Contract.OPERATORSETGENESISREWARDSTIMESTAMP(&_RewardsCoordinatorStorage.CallOpts) -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OPERATORSETMAXRETROACTIVELENGTH(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "OPERATOR_SET_MAX_RETROACTIVE_LENGTH") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { - return _RewardsCoordinatorStorage.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinatorStorage.CallOpts) -} - -// OPERATORSETMAXRETROACTIVELENGTH is a free data retrieval call binding the contract method 0x3486e32e. -// -// Solidity: function OPERATOR_SET_MAX_RETROACTIVE_LENGTH() view returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OPERATORSETMAXRETROACTIVELENGTH() (uint32, error) { - return _RewardsCoordinatorStorage.Contract.OPERATORSETMAXRETROACTIVELENGTH(&_RewardsCoordinatorStorage.CallOpts) -} - // ActivationDelay is a free data retrieval call binding the contract method 0x3a8c0786. // // Solidity: function activationDelay() view returns(uint32) @@ -491,37 +412,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) Activa return _RewardsCoordinatorStorage.Contract.ActivationDelay(&_RewardsCoordinatorStorage.CallOpts) } -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "avsDirectory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) AvsDirectory() (common.Address, error) { - return _RewardsCoordinatorStorage.Contract.AvsDirectory(&_RewardsCoordinatorStorage.CallOpts) -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) AvsDirectory() (common.Address, error) { - return _RewardsCoordinatorStorage.Contract.AvsDirectory(&_RewardsCoordinatorStorage.CallOpts) -} - // CalculateEarnerLeafHash is a free data retrieval call binding the contract method 0x149bc872. // // Solidity: function calculateEarnerLeafHash((address,bytes32) leaf) pure returns(bytes32) @@ -863,68 +753,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) GetDis return _RewardsCoordinatorStorage.Contract.GetDistributionRootsLength(&_RewardsCoordinatorStorage.CallOpts) } -// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. -// -// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) GetOperatorCommissionBips(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { - var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "getOperatorCommissionBips", operator, operatorSet, rewardType) - - if err != nil { - return *new(uint16), err - } - - out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - - return out0, err - -} - -// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. -// -// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { - return _RewardsCoordinatorStorage.Contract.GetOperatorCommissionBips(&_RewardsCoordinatorStorage.CallOpts, operator, operatorSet, rewardType) -} - -// GetOperatorCommissionBips is a free data retrieval call binding the contract method 0x4d7a80d4. -// -// Solidity: function getOperatorCommissionBips(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint16) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) GetOperatorCommissionBips(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (uint16, error) { - return _RewardsCoordinatorStorage.Contract.GetOperatorCommissionBips(&_RewardsCoordinatorStorage.CallOpts, operator, operatorSet, rewardType) -} - -// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. -// -// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) GetOperatorCommissionUpdateHistoryLength(opts *bind.CallOpts, operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { - var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "getOperatorCommissionUpdateHistoryLength", operator, operatorSet, rewardType) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. -// -// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { - return _RewardsCoordinatorStorage.Contract.GetOperatorCommissionUpdateHistoryLength(&_RewardsCoordinatorStorage.CallOpts, operator, operatorSet, rewardType) -} - -// GetOperatorCommissionUpdateHistoryLength is a free data retrieval call binding the contract method 0xc336f19d. -// -// Solidity: function getOperatorCommissionUpdateHistoryLength(address operator, (address,uint32) operatorSet, uint8 rewardType) view returns(uint256) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) GetOperatorCommissionUpdateHistoryLength(operator common.Address, operatorSet IAVSDirectoryOperatorSet, rewardType uint8) (*big.Int, error) { - return _RewardsCoordinatorStorage.Contract.GetOperatorCommissionUpdateHistoryLength(&_RewardsCoordinatorStorage.CallOpts, operator, operatorSet, rewardType) -} - // GetRootIndexFromHash is a free data retrieval call binding the contract method 0xe810ce21. // // Solidity: function getRootIndexFromHash(bytes32 rootHash) view returns(uint32) @@ -1049,6 +877,37 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) IsRewa return _RewardsCoordinatorStorage.Contract.IsRewardsForAllSubmitter(&_RewardsCoordinatorStorage.CallOpts, arg0) } +// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. +// +// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) IsRewardsSubmissionForAllEarnersHash(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (bool, error) { + var out []interface{} + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "isRewardsSubmissionForAllEarnersHash", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. +// +// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) IsRewardsSubmissionForAllEarnersHash(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _RewardsCoordinatorStorage.Contract.IsRewardsSubmissionForAllEarnersHash(&_RewardsCoordinatorStorage.CallOpts, arg0, arg1) +} + +// IsRewardsSubmissionForAllEarnersHash is a free data retrieval call binding the contract method 0xaebd8bae. +// +// Solidity: function isRewardsSubmissionForAllEarnersHash(address , bytes32 ) view returns(bool) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) IsRewardsSubmissionForAllEarnersHash(arg0 common.Address, arg1 [32]byte) (bool, error) { + return _RewardsCoordinatorStorage.Contract.IsRewardsSubmissionForAllEarnersHash(&_RewardsCoordinatorStorage.CallOpts, arg0, arg1) +} + // IsRewardsSubmissionForAllHash is a free data retrieval call binding the contract method 0xc46db606. // // Solidity: function isRewardsSubmissionForAllHash(address , bytes32 ) view returns(bool) @@ -1080,49 +939,35 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) IsRewa return _RewardsCoordinatorStorage.Contract.IsRewardsSubmissionForAllHash(&_RewardsCoordinatorStorage.CallOpts, arg0, arg1) } -// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. +// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. // -// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OperatorCommissionUpdates(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { - CommissionBips uint16 - EffectTimestamp uint32 -}, error) { +// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) OperatorCommissionBips(opts *bind.CallOpts, operator common.Address, avs common.Address) (uint16, error) { var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "operatorCommissionUpdates", arg0, arg1, arg2, arg3, arg4) + err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "operatorCommissionBips", operator, avs) - outstruct := new(struct { - CommissionBips uint16 - EffectTimestamp uint32 - }) if err != nil { - return *outstruct, err + return *new(uint16), err } - outstruct.CommissionBips = *abi.ConvertType(out[0], new(uint16)).(*uint16) - outstruct.EffectTimestamp = *abi.ConvertType(out[1], new(uint32)).(*uint32) + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) - return *outstruct, err + return out0, err } -// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. +// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. // -// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OperatorCommissionUpdates(arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { - CommissionBips uint16 - EffectTimestamp uint32 -}, error) { - return _RewardsCoordinatorStorage.Contract.OperatorCommissionUpdates(&_RewardsCoordinatorStorage.CallOpts, arg0, arg1, arg2, arg3, arg4) +// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { + return _RewardsCoordinatorStorage.Contract.OperatorCommissionBips(&_RewardsCoordinatorStorage.CallOpts, operator, avs) } -// OperatorCommissionUpdates is a free data retrieval call binding the contract method 0x7adace91. +// OperatorCommissionBips is a free data retrieval call binding the contract method 0x22f19a64. // -// Solidity: function operatorCommissionUpdates(address , address , uint32 , uint8 , uint256 ) view returns(uint16 commissionBips, uint32 effectTimestamp) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OperatorCommissionUpdates(arg0 common.Address, arg1 common.Address, arg2 uint32, arg3 uint8, arg4 *big.Int) (struct { - CommissionBips uint16 - EffectTimestamp uint32 -}, error) { - return _RewardsCoordinatorStorage.Contract.OperatorCommissionUpdates(&_RewardsCoordinatorStorage.CallOpts, arg0, arg1, arg2, arg3, arg4) +// Solidity: function operatorCommissionBips(address operator, address avs) view returns(uint16) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) OperatorCommissionBips(operator common.Address, avs common.Address) (uint16, error) { + return _RewardsCoordinatorStorage.Contract.OperatorCommissionBips(&_RewardsCoordinatorStorage.CallOpts, operator, avs) } // RewardsUpdater is a free data retrieval call binding the contract method 0xfbf1e2c1. @@ -1239,6 +1084,27 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) Cr return _RewardsCoordinatorStorage.Contract.CreateAVSRewardsSubmission(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) } +// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. +// +// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactor) CreateRewardsForAllEarners(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.contract.Transact(opts, "createRewardsForAllEarners", rewardsSubmissions) +} + +// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. +// +// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.Contract.CreateRewardsForAllEarners(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) +} + +// CreateRewardsForAllEarners is a paid mutator transaction binding the contract method 0xff9f6cce. +// +// Solidity: function createRewardsForAllEarners(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) CreateRewardsForAllEarners(rewardsSubmissions []IRewardsCoordinatorRewardsSubmission) (*types.Transaction, error) { + return _RewardsCoordinatorStorage.Contract.CreateRewardsForAllEarners(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) +} + // CreateRewardsForAllSubmission is a paid mutator transaction binding the contract method 0x36af41fa. // // Solidity: function createRewardsForAllSubmission(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmission) returns() @@ -1302,27 +1168,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) Pr return _RewardsCoordinatorStorage.Contract.ProcessClaim(&_RewardsCoordinatorStorage.TransactOpts, claim, recipient) } -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactor) RewardOperatorSetForRange(opts *bind.TransactOpts, rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.contract.Transact(opts, "rewardOperatorSetForRange", rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.Contract.RewardOperatorSetForRange(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) -} - -// RewardOperatorSetForRange is a paid mutator transaction binding the contract method 0x2c9c60cf. -// -// Solidity: function rewardOperatorSetForRange((uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) RewardOperatorSetForRange(rewardsSubmissions []IRewardsCoordinatorOperatorSetRewardsSubmission) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.Contract.RewardOperatorSetForRange(&_RewardsCoordinatorStorage.TransactOpts, rewardsSubmissions) -} - // SetActivationDelay is a paid mutator transaction binding the contract method 0x58baaa3e. // // Solidity: function setActivationDelay(uint32 _activationDelay) returns() @@ -1386,27 +1231,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) Se return _RewardsCoordinatorStorage.Contract.SetGlobalOperatorCommission(&_RewardsCoordinatorStorage.TransactOpts, _globalCommissionBips) } -// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. -// -// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactor) SetOperatorCommissionBips(opts *bind.TransactOpts, operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.contract.Transact(opts, "setOperatorCommissionBips", operatorSet, rewardType, commissionBips) -} - -// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. -// -// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.Contract.SetOperatorCommissionBips(&_RewardsCoordinatorStorage.TransactOpts, operatorSet, rewardType, commissionBips) -} - -// SetOperatorCommissionBips is a paid mutator transaction binding the contract method 0x3c8fcf7c. -// -// Solidity: function setOperatorCommissionBips((address,uint32) operatorSet, uint8 rewardType, uint16 commissionBips) returns(uint32) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageTransactorSession) SetOperatorCommissionBips(operatorSet IAVSDirectoryOperatorSet, rewardType uint8, commissionBips uint16) (*types.Transaction, error) { - return _RewardsCoordinatorStorage.Contract.SetOperatorCommissionBips(&_RewardsCoordinatorStorage.TransactOpts, operatorSet, rewardType, commissionBips) -} - // SetRewardsForAllSubmitter is a paid mutator transaction binding the contract method 0x0eb38345. // // Solidity: function setRewardsForAllSubmitter(address _submitter, bool _newValue) returns() @@ -2372,9 +2196,9 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseGlobal return event, nil } -// RewardsCoordinatorStorageOperatorCommissionUpdatedIterator is returned from FilterOperatorCommissionUpdated and is used to iterate over the raw logs and unpacked data for OperatorCommissionUpdated events raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageOperatorCommissionUpdatedIterator struct { - Event *RewardsCoordinatorStorageOperatorCommissionUpdated // Event containing the contract specifics and raw log +// RewardsCoordinatorStorageRewardsClaimedIterator is returned from FilterRewardsClaimed and is used to iterate over the raw logs and unpacked data for RewardsClaimed events raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsClaimedIterator struct { + Event *RewardsCoordinatorStorageRewardsClaimed // 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 @@ -2388,7 +2212,7 @@ type RewardsCoordinatorStorageOperatorCommissionUpdatedIterator 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 *RewardsCoordinatorStorageOperatorCommissionUpdatedIterator) Next() bool { +func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2397,7 +2221,7 @@ func (it *RewardsCoordinatorStorageOperatorCommissionUpdatedIterator) Next() boo if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageOperatorCommissionUpdated) + it.Event = new(RewardsCoordinatorStorageRewardsClaimed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2412,7 +2236,7 @@ func (it *RewardsCoordinatorStorageOperatorCommissionUpdatedIterator) Next() boo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageOperatorCommissionUpdated) + it.Event = new(RewardsCoordinatorStorageRewardsClaimed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2428,63 +2252,72 @@ func (it *RewardsCoordinatorStorageOperatorCommissionUpdatedIterator) Next() boo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorStorageOperatorCommissionUpdatedIterator) Error() error { +func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorStorageOperatorCommissionUpdatedIterator) Close() error { +func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorStorageOperatorCommissionUpdated represents a OperatorCommissionUpdated event raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageOperatorCommissionUpdated struct { - Operator common.Address - OperatorSet IAVSDirectoryOperatorSet - RewardType uint8 - NewCommissionBips uint16 - EffectTimestamp uint32 - Raw types.Log // Blockchain specific contextual infos +// RewardsCoordinatorStorageRewardsClaimed represents a RewardsClaimed event raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsClaimed struct { + Root [32]byte + Earner common.Address + Claimer common.Address + Recipient common.Address + Token common.Address + ClaimedAmount *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorCommissionUpdated is a free log retrieval operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. +// FilterRewardsClaimed is a free log retrieval operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. // -// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterOperatorCommissionUpdated(opts *bind.FilterOpts, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (*RewardsCoordinatorStorageOperatorCommissionUpdatedIterator, error) { +// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsClaimed(opts *bind.FilterOpts, earner []common.Address, claimer []common.Address, recipient []common.Address) (*RewardsCoordinatorStorageRewardsClaimedIterator, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) + var earnerRule []interface{} + for _, earnerItem := range earner { + earnerRule = append(earnerRule, earnerItem) + } + var claimerRule []interface{} + for _, claimerItem := range claimer { + claimerRule = append(claimerRule, claimerItem) } - var operatorSetRule []interface{} - for _, operatorSetItem := range operatorSet { - operatorSetRule = append(operatorSetRule, operatorSetItem) + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsClaimed", earnerRule, claimerRule, recipientRule) if err != nil { return nil, err } - return &RewardsCoordinatorStorageOperatorCommissionUpdatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "OperatorCommissionUpdated", logs: logs, sub: sub}, nil + return &RewardsCoordinatorStorageRewardsClaimedIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsClaimed", logs: logs, sub: sub}, nil } -// WatchOperatorCommissionUpdated is a free log subscription operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. +// WatchRewardsClaimed is a free log subscription operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. // -// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchOperatorCommissionUpdated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageOperatorCommissionUpdated, operator []common.Address, operatorSet []IAVSDirectoryOperatorSet) (event.Subscription, error) { +// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsClaimed(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsClaimed, earner []common.Address, claimer []common.Address, recipient []common.Address) (event.Subscription, error) { - var operatorRule []interface{} - for _, operatorItem := range operator { - operatorRule = append(operatorRule, operatorItem) + var earnerRule []interface{} + for _, earnerItem := range earner { + earnerRule = append(earnerRule, earnerItem) } - var operatorSetRule []interface{} - for _, operatorSetItem := range operatorSet { - operatorSetRule = append(operatorSetRule, operatorSetItem) + var claimerRule []interface{} + for _, claimerItem := range claimer { + claimerRule = append(claimerRule, claimerItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "OperatorCommissionUpdated", operatorRule, operatorSetRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsClaimed", earnerRule, claimerRule, recipientRule) if err != nil { return nil, err } @@ -2494,8 +2327,8 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchOperat select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorStorageOperatorCommissionUpdated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorCommissionUpdated", log); err != nil { + event := new(RewardsCoordinatorStorageRewardsClaimed) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsClaimed", log); err != nil { return err } event.Raw = log @@ -2516,21 +2349,21 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchOperat }), nil } -// ParseOperatorCommissionUpdated is a log parse operation binding the contract event 0x811b77cd39953efa46bbcbf8afd10756fac937e63667afdd6bab4dd69c788dba. +// ParseRewardsClaimed is a log parse operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. // -// Solidity: event OperatorCommissionUpdated(address indexed operator, (address,uint32) indexed operatorSet, uint8 rewardType, uint16 newCommissionBips, uint32 effectTimestamp) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseOperatorCommissionUpdated(log types.Log) (*RewardsCoordinatorStorageOperatorCommissionUpdated, error) { - event := new(RewardsCoordinatorStorageOperatorCommissionUpdated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorCommissionUpdated", log); err != nil { +// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsClaimed(log types.Log) (*RewardsCoordinatorStorageRewardsClaimed, error) { + event := new(RewardsCoordinatorStorageRewardsClaimed) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsClaimed", log); err != nil { return nil, err } event.Raw = log return event, nil } -// RewardsCoordinatorStorageOperatorSetRewardCreatedIterator is returned from FilterOperatorSetRewardCreated and is used to iterate over the raw logs and unpacked data for OperatorSetRewardCreated events raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageOperatorSetRewardCreatedIterator struct { - Event *RewardsCoordinatorStorageOperatorSetRewardCreated // Event containing the contract specifics and raw log +// RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator is returned from FilterRewardsForAllSubmitterSet and is used to iterate over the raw logs and unpacked data for RewardsForAllSubmitterSet events raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator struct { + Event *RewardsCoordinatorStorageRewardsForAllSubmitterSet // 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 @@ -2544,7 +2377,7 @@ type RewardsCoordinatorStorageOperatorSetRewardCreatedIterator 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 *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Next() bool { +func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2553,7 +2386,7 @@ func (it *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Next() bool if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageOperatorSetRewardCreated) + it.Event = new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2568,7 +2401,7 @@ func (it *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Next() bool // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageOperatorSetRewardCreated) + it.Event = new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2584,235 +2417,69 @@ func (it *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Next() bool } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Error() error { +func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorStorageOperatorSetRewardCreatedIterator) Close() error { +func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorStorageOperatorSetRewardCreated represents a OperatorSetRewardCreated event raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageOperatorSetRewardCreated struct { - Avs common.Address - SubmissionNonce *big.Int - RewardsSubmissionHash [32]byte - RewardsSubmission IRewardsCoordinatorOperatorSetRewardsSubmission - Raw types.Log // Blockchain specific contextual infos +// RewardsCoordinatorStorageRewardsForAllSubmitterSet represents a RewardsForAllSubmitterSet event raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsForAllSubmitterSet struct { + RewardsForAllSubmitter common.Address + OldValue bool + NewValue bool + Raw types.Log // Blockchain specific contextual infos } -// FilterOperatorSetRewardCreated is a free log retrieval operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// FilterRewardsForAllSubmitterSet is a free log retrieval operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. // -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterOperatorSetRewardCreated(opts *bind.FilterOpts, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorStorageOperatorSetRewardCreatedIterator, error) { +// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsForAllSubmitterSet(opts *bind.FilterOpts, rewardsForAllSubmitter []common.Address, oldValue []bool, newValue []bool) (*RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator, error) { - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) + var rewardsForAllSubmitterRule []interface{} + for _, rewardsForAllSubmitterItem := range rewardsForAllSubmitter { + rewardsForAllSubmitterRule = append(rewardsForAllSubmitterRule, rewardsForAllSubmitterItem) } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) + var oldValueRule []interface{} + for _, oldValueItem := range oldValue { + oldValueRule = append(oldValueRule, oldValueItem) } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) + var newValueRule []interface{} + for _, newValueItem := range newValue { + newValueRule = append(newValueRule, newValueItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsForAllSubmitterSet", rewardsForAllSubmitterRule, oldValueRule, newValueRule) if err != nil { return nil, err } - return &RewardsCoordinatorStorageOperatorSetRewardCreatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "OperatorSetRewardCreated", logs: logs, sub: sub}, nil + return &RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsForAllSubmitterSet", logs: logs, sub: sub}, nil } -// WatchOperatorSetRewardCreated is a free log subscription operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. +// WatchRewardsForAllSubmitterSet is a free log subscription operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. // -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchOperatorSetRewardCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageOperatorSetRewardCreated, avs []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { +// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsForAllSubmitterSet(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsForAllSubmitterSet, rewardsForAllSubmitter []common.Address, oldValue []bool, newValue []bool) (event.Subscription, error) { - var avsRule []interface{} - for _, avsItem := range avs { - avsRule = append(avsRule, avsItem) - } - var submissionNonceRule []interface{} - for _, submissionNonceItem := range submissionNonce { - submissionNonceRule = append(submissionNonceRule, submissionNonceItem) - } - var rewardsSubmissionHashRule []interface{} - for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { - rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) - } - - logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "OperatorSetRewardCreated", avsRule, submissionNonceRule, rewardsSubmissionHashRule) - 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(RewardsCoordinatorStorageOperatorSetRewardCreated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorSetRewardCreated", 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 -} - -// ParseOperatorSetRewardCreated is a log parse operation binding the contract event 0x29a8ee4f31259a5f344a2cca256440ea6638a3278972b1ee9a7aab99b00aa3b2. -// -// Solidity: event OperatorSetRewardCreated(address indexed avs, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, (uint8,uint32,(address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseOperatorSetRewardCreated(log types.Log) (*RewardsCoordinatorStorageOperatorSetRewardCreated, error) { - event := new(RewardsCoordinatorStorageOperatorSetRewardCreated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "OperatorSetRewardCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RewardsCoordinatorStorageRewardsClaimedIterator is returned from FilterRewardsClaimed and is used to iterate over the raw logs and unpacked data for RewardsClaimed events raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsClaimedIterator struct { - Event *RewardsCoordinatorStorageRewardsClaimed // 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 *RewardsCoordinatorStorageRewardsClaimedIterator) 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(RewardsCoordinatorStorageRewardsClaimed) - 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(RewardsCoordinatorStorageRewardsClaimed) - 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 *RewardsCoordinatorStorageRewardsClaimedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RewardsCoordinatorStorageRewardsClaimedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RewardsCoordinatorStorageRewardsClaimed represents a RewardsClaimed event raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsClaimed struct { - Root [32]byte - Earner common.Address - Claimer common.Address - Recipient common.Address - Token common.Address - ClaimedAmount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRewardsClaimed is a free log retrieval operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. -// -// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsClaimed(opts *bind.FilterOpts, earner []common.Address, claimer []common.Address, recipient []common.Address) (*RewardsCoordinatorStorageRewardsClaimedIterator, error) { - - var earnerRule []interface{} - for _, earnerItem := range earner { - earnerRule = append(earnerRule, earnerItem) - } - var claimerRule []interface{} - for _, claimerItem := range claimer { - claimerRule = append(claimerRule, claimerItem) - } - var recipientRule []interface{} - for _, recipientItem := range recipient { - recipientRule = append(recipientRule, recipientItem) - } - - logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsClaimed", earnerRule, claimerRule, recipientRule) - if err != nil { - return nil, err - } - return &RewardsCoordinatorStorageRewardsClaimedIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsClaimed", logs: logs, sub: sub}, nil -} - -// WatchRewardsClaimed is a free log subscription operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. -// -// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsClaimed(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsClaimed, earner []common.Address, claimer []common.Address, recipient []common.Address) (event.Subscription, error) { - - var earnerRule []interface{} - for _, earnerItem := range earner { - earnerRule = append(earnerRule, earnerItem) + var rewardsForAllSubmitterRule []interface{} + for _, rewardsForAllSubmitterItem := range rewardsForAllSubmitter { + rewardsForAllSubmitterRule = append(rewardsForAllSubmitterRule, rewardsForAllSubmitterItem) } - var claimerRule []interface{} - for _, claimerItem := range claimer { - claimerRule = append(claimerRule, claimerItem) + var oldValueRule []interface{} + for _, oldValueItem := range oldValue { + oldValueRule = append(oldValueRule, oldValueItem) } - var recipientRule []interface{} - for _, recipientItem := range recipient { - recipientRule = append(recipientRule, recipientItem) + var newValueRule []interface{} + for _, newValueItem := range newValue { + newValueRule = append(newValueRule, newValueItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsClaimed", earnerRule, claimerRule, recipientRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsForAllSubmitterSet", rewardsForAllSubmitterRule, oldValueRule, newValueRule) if err != nil { return nil, err } @@ -2822,8 +2489,8 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorStorageRewardsClaimed) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsClaimed", log); err != nil { + event := new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsForAllSubmitterSet", log); err != nil { return err } event.Raw = log @@ -2844,21 +2511,21 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward }), nil } -// ParseRewardsClaimed is a log parse operation binding the contract event 0x9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce31. +// ParseRewardsForAllSubmitterSet is a log parse operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. // -// Solidity: event RewardsClaimed(bytes32 root, address indexed earner, address indexed claimer, address indexed recipient, address token, uint256 claimedAmount) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsClaimed(log types.Log) (*RewardsCoordinatorStorageRewardsClaimed, error) { - event := new(RewardsCoordinatorStorageRewardsClaimed) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsClaimed", log); err != nil { +// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsForAllSubmitterSet(log types.Log) (*RewardsCoordinatorStorageRewardsForAllSubmitterSet, error) { + event := new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsForAllSubmitterSet", log); err != nil { return nil, err } event.Raw = log return event, nil } -// RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator is returned from FilterRewardsForAllSubmitterSet and is used to iterate over the raw logs and unpacked data for RewardsForAllSubmitterSet events raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator struct { - Event *RewardsCoordinatorStorageRewardsForAllSubmitterSet // Event containing the contract specifics and raw log +// RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator is returned from FilterRewardsSubmissionForAllCreated and is used to iterate over the raw logs and unpacked data for RewardsSubmissionForAllCreated events raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator struct { + Event *RewardsCoordinatorStorageRewardsSubmissionForAllCreated // 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 @@ -2872,7 +2539,7 @@ type RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator 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 *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Next() bool { +func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2881,7 +2548,7 @@ func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Next() boo if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) + it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2896,7 +2563,7 @@ func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Next() boo // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) + it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2912,69 +2579,70 @@ func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Next() boo } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Error() error { +func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator) Close() error { +func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorStorageRewardsForAllSubmitterSet represents a RewardsForAllSubmitterSet event raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsForAllSubmitterSet struct { - RewardsForAllSubmitter common.Address - OldValue bool - NewValue bool - Raw types.Log // Blockchain specific contextual infos +// RewardsCoordinatorStorageRewardsSubmissionForAllCreated represents a RewardsSubmissionForAllCreated event raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsSubmissionForAllCreated struct { + Submitter common.Address + SubmissionNonce *big.Int + RewardsSubmissionHash [32]byte + RewardsSubmission IRewardsCoordinatorRewardsSubmission + Raw types.Log // Blockchain specific contextual infos } -// FilterRewardsForAllSubmitterSet is a free log retrieval operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. +// FilterRewardsSubmissionForAllCreated is a free log retrieval operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. // -// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsForAllSubmitterSet(opts *bind.FilterOpts, rewardsForAllSubmitter []common.Address, oldValue []bool, newValue []bool) (*RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator, error) { +// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsSubmissionForAllCreated(opts *bind.FilterOpts, submitter []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator, error) { - var rewardsForAllSubmitterRule []interface{} - for _, rewardsForAllSubmitterItem := range rewardsForAllSubmitter { - rewardsForAllSubmitterRule = append(rewardsForAllSubmitterRule, rewardsForAllSubmitterItem) + var submitterRule []interface{} + for _, submitterItem := range submitter { + submitterRule = append(submitterRule, submitterItem) } - var oldValueRule []interface{} - for _, oldValueItem := range oldValue { - oldValueRule = append(oldValueRule, oldValueItem) + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) } - var newValueRule []interface{} - for _, newValueItem := range newValue { - newValueRule = append(newValueRule, newValueItem) + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsForAllSubmitterSet", rewardsForAllSubmitterRule, oldValueRule, newValueRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsSubmissionForAllCreated", submitterRule, submissionNonceRule, rewardsSubmissionHashRule) if err != nil { return nil, err } - return &RewardsCoordinatorStorageRewardsForAllSubmitterSetIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsForAllSubmitterSet", logs: logs, sub: sub}, nil + return &RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsSubmissionForAllCreated", logs: logs, sub: sub}, nil } -// WatchRewardsForAllSubmitterSet is a free log subscription operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. +// WatchRewardsSubmissionForAllCreated is a free log subscription operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. // -// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsForAllSubmitterSet(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsForAllSubmitterSet, rewardsForAllSubmitter []common.Address, oldValue []bool, newValue []bool) (event.Subscription, error) { +// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsSubmissionForAllCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsSubmissionForAllCreated, submitter []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { - var rewardsForAllSubmitterRule []interface{} - for _, rewardsForAllSubmitterItem := range rewardsForAllSubmitter { - rewardsForAllSubmitterRule = append(rewardsForAllSubmitterRule, rewardsForAllSubmitterItem) + var submitterRule []interface{} + for _, submitterItem := range submitter { + submitterRule = append(submitterRule, submitterItem) } - var oldValueRule []interface{} - for _, oldValueItem := range oldValue { - oldValueRule = append(oldValueRule, oldValueItem) + var submissionNonceRule []interface{} + for _, submissionNonceItem := range submissionNonce { + submissionNonceRule = append(submissionNonceRule, submissionNonceItem) } - var newValueRule []interface{} - for _, newValueItem := range newValue { - newValueRule = append(newValueRule, newValueItem) + var rewardsSubmissionHashRule []interface{} + for _, rewardsSubmissionHashItem := range rewardsSubmissionHash { + rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsForAllSubmitterSet", rewardsForAllSubmitterRule, oldValueRule, newValueRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsSubmissionForAllCreated", submitterRule, submissionNonceRule, rewardsSubmissionHashRule) if err != nil { return nil, err } @@ -2984,8 +2652,8 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsForAllSubmitterSet", log); err != nil { + event := new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllCreated", log); err != nil { return err } event.Raw = log @@ -3006,21 +2674,21 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward }), nil } -// ParseRewardsForAllSubmitterSet is a log parse operation binding the contract event 0x4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c. +// ParseRewardsSubmissionForAllCreated is a log parse operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. // -// Solidity: event RewardsForAllSubmitterSet(address indexed rewardsForAllSubmitter, bool indexed oldValue, bool indexed newValue) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsForAllSubmitterSet(log types.Log) (*RewardsCoordinatorStorageRewardsForAllSubmitterSet, error) { - event := new(RewardsCoordinatorStorageRewardsForAllSubmitterSet) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsForAllSubmitterSet", log); err != nil { +// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsSubmissionForAllCreated(log types.Log) (*RewardsCoordinatorStorageRewardsSubmissionForAllCreated, error) { + event := new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllCreated", log); err != nil { return nil, err } event.Raw = log return event, nil } -// RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator is returned from FilterRewardsSubmissionForAllCreated and is used to iterate over the raw logs and unpacked data for RewardsSubmissionForAllCreated events raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator struct { - Event *RewardsCoordinatorStorageRewardsSubmissionForAllCreated // Event containing the contract specifics and raw log +// RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator is returned from FilterRewardsSubmissionForAllEarnersCreated and is used to iterate over the raw logs and unpacked data for RewardsSubmissionForAllEarnersCreated events raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator struct { + Event *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated // 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 @@ -3034,7 +2702,7 @@ type RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator 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 *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Next() bool { +func (it *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3043,7 +2711,7 @@ func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Next( if it.done { select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) + it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3058,7 +2726,7 @@ func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Next( // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) + it.Event = new(RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3074,34 +2742,34 @@ func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Next( } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Error() error { +func (it *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator) Close() error { +func (it *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RewardsCoordinatorStorageRewardsSubmissionForAllCreated represents a RewardsSubmissionForAllCreated event raised by the RewardsCoordinatorStorage contract. -type RewardsCoordinatorStorageRewardsSubmissionForAllCreated struct { - Submitter common.Address +// RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated represents a RewardsSubmissionForAllEarnersCreated event raised by the RewardsCoordinatorStorage contract. +type RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated struct { + TokenHopper common.Address SubmissionNonce *big.Int RewardsSubmissionHash [32]byte RewardsSubmission IRewardsCoordinatorRewardsSubmission Raw types.Log // Blockchain specific contextual infos } -// FilterRewardsSubmissionForAllCreated is a free log retrieval operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. +// FilterRewardsSubmissionForAllEarnersCreated is a free log retrieval operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. // -// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsSubmissionForAllCreated(opts *bind.FilterOpts, submitter []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator, error) { +// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewardsSubmissionForAllEarnersCreated(opts *bind.FilterOpts, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (*RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator, error) { - var submitterRule []interface{} - for _, submitterItem := range submitter { - submitterRule = append(submitterRule, submitterItem) + var tokenHopperRule []interface{} + for _, tokenHopperItem := range tokenHopper { + tokenHopperRule = append(tokenHopperRule, tokenHopperItem) } var submissionNonceRule []interface{} for _, submissionNonceItem := range submissionNonce { @@ -3112,21 +2780,21 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) FilterRewar rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsSubmissionForAllCreated", submitterRule, submissionNonceRule, rewardsSubmissionHashRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.FilterLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) if err != nil { return nil, err } - return &RewardsCoordinatorStorageRewardsSubmissionForAllCreatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsSubmissionForAllCreated", logs: logs, sub: sub}, nil + return &RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreatedIterator{contract: _RewardsCoordinatorStorage.contract, event: "RewardsSubmissionForAllEarnersCreated", logs: logs, sub: sub}, nil } -// WatchRewardsSubmissionForAllCreated is a free log subscription operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. +// WatchRewardsSubmissionForAllEarnersCreated is a free log subscription operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. // -// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsSubmissionForAllCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsSubmissionForAllCreated, submitter []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { +// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchRewardsSubmissionForAllEarnersCreated(opts *bind.WatchOpts, sink chan<- *RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated, tokenHopper []common.Address, submissionNonce []*big.Int, rewardsSubmissionHash [][32]byte) (event.Subscription, error) { - var submitterRule []interface{} - for _, submitterItem := range submitter { - submitterRule = append(submitterRule, submitterItem) + var tokenHopperRule []interface{} + for _, tokenHopperItem := range tokenHopper { + tokenHopperRule = append(tokenHopperRule, tokenHopperItem) } var submissionNonceRule []interface{} for _, submissionNonceItem := range submissionNonce { @@ -3137,7 +2805,7 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward rewardsSubmissionHashRule = append(rewardsSubmissionHashRule, rewardsSubmissionHashItem) } - logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsSubmissionForAllCreated", submitterRule, submissionNonceRule, rewardsSubmissionHashRule) + logs, sub, err := _RewardsCoordinatorStorage.contract.WatchLogs(opts, "RewardsSubmissionForAllEarnersCreated", tokenHopperRule, submissionNonceRule, rewardsSubmissionHashRule) if err != nil { return nil, err } @@ -3147,8 +2815,8 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllCreated", log); err != nil { + event := new(RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", log); err != nil { return err } event.Raw = log @@ -3169,12 +2837,12 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) WatchReward }), nil } -// ParseRewardsSubmissionForAllCreated is a log parse operation binding the contract event 0x51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf270482. +// ParseRewardsSubmissionForAllEarnersCreated is a log parse operation binding the contract event 0x5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b. // -// Solidity: event RewardsSubmissionForAllCreated(address indexed submitter, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsSubmissionForAllCreated(log types.Log) (*RewardsCoordinatorStorageRewardsSubmissionForAllCreated, error) { - event := new(RewardsCoordinatorStorageRewardsSubmissionForAllCreated) - if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllCreated", log); err != nil { +// Solidity: event RewardsSubmissionForAllEarnersCreated(address indexed tokenHopper, uint256 indexed submissionNonce, bytes32 indexed rewardsSubmissionHash, ((address,uint96)[],address,uint256,uint32,uint32) rewardsSubmission) +func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageFilterer) ParseRewardsSubmissionForAllEarnersCreated(log types.Log) (*RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated, error) { + event := new(RewardsCoordinatorStorageRewardsSubmissionForAllEarnersCreated) + if err := _RewardsCoordinatorStorage.contract.UnpackLog(event, "RewardsSubmissionForAllEarnersCreated", log); err != nil { return nil, err } event.Raw = log diff --git a/pkg/bindings/StrategyBase/binding.go b/pkg/bindings/StrategyBase/binding.go index 5a7dfc045..0f3d97d68 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\"}],\"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\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"WithdrawalAmountExceedsDeposit\",\"inputs\":[]}]", - Bin: "0x60a060405234801561001057600080fd5b5060405161162638038061162683398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b600054610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610108576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b6080516114bc61016a60003960008181610199015281816104e8015281816108ac015261094b01526114bc6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635c975abb116100b8578063ab5921e11161007c578063ab5921e11461029c578063ce7c2ac2146102b1578063d9caed12146102c4578063e3dae51c146102d7578063f3e73875146102ea578063fabc1cbc146102fd57600080fd5b80635c975abb146102425780637a8b26371461024a578063886f11951461025d5780638c871019146102765780638f6a62401461028957600080fd5b806347e7ef24116100ff57806347e7ef24146101d2578063485cc955146101e5578063553ca5f8146101f8578063595c6a671461020b5780635ac86ab71461021357600080fd5b806310d67a2f1461013c578063136439dd146101515780632495a5991461016457806339b70e38146101945780633a98ef39146101bb575b600080fd5b61014f61014a3660046111d4565b610310565b005b61014f61015f3660046111f1565b6103c4565b603254610177906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101777f000000000000000000000000000000000000000000000000000000000000000081565b6101c460335481565b60405190815260200161018b565b6101c46101e036600461120a565b6104b4565b61014f6101f3366004611236565b610605565b6101c46102063660046111d4565b61071f565b61014f610733565b61023261022136600461127e565b6001805460ff9092161b9081161490565b604051901515815260200161018b565b6001546101c4565b6101c46102583660046111f1565b610800565b600054610177906201000090046001600160a01b031681565b6101c46102843660046111f1565b61084b565b6101c46102973660046111d4565b610856565b6102a4610864565b60405161018b91906112bf565b6101c46102bf3660046111d4565b610884565b61014f6102d23660046112f2565b610919565b6101c46102e53660046111f1565b610a39565b6101c46102f83660046111f1565b610a72565b61014f61030b3660046111f1565b610a7d565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103879190611333565b6001600160a01b0316336001600160a01b0316146103b85760405163794821ff60e01b815260040160405180910390fd5b6103c181610b85565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104359190611350565b61045257604051631d77d47760e21b815260040160405180910390fd5b600154818116146104765760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036104dd5760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610526576040516348da714f60e01b815260040160405180910390fd5b6105308484610c23565b60335460006105416103e883611388565b905060006103e8610550610c55565b61055a9190611388565b90506000610568878361139b565b90508061057584896113ae565b61057f91906113c5565b9550856000036105a257604051630c392ed360e11b815260040160405180910390fd5b6105ac8685611388565b60338190556f4b3b4ca85a86c47a098a223fffffffff10156105e157604051632f14e8a360e11b815260040160405180910390fd5b6105fa826103e86033546105f59190611388565b610cc7565b505050505092915050565b600054610100900460ff16158080156106255750600054600160ff909116105b8061063f5750303b15801561063f575060005460ff166001145b6106a75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156106ca576000805461ff0019166101001790555b6106d48383610d1b565b801561071a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061072d61025883610884565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a49190611350565b6107c157604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e86033546108139190611388565b905060006103e8610822610c55565b61082c9190611388565b90508161083985836113ae565b61084391906113c5565b949350505050565b600061072d82610a39565b600061072d6102f883610884565b60606040518060800160405280604d815260200161143a604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa1580156108f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d91906113e7565b600180546002908116036109405760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610989576040516348da714f60e01b815260040160405180910390fd5b610994848484610e66565b603354808311156109b857604051633a5d3b0160e21b815260040160405180910390fd5b60006109c66103e883611388565b905060006103e86109d5610c55565b6109df9190611388565b90506000826109ee87846113ae565b6109f891906113c5565b9050610a04868561139b565b603355610a24610a14828461139b565b6103e86033546105f59190611388565b610a2f888883610e94565b5050505050505050565b6000806103e8603354610a4c9190611388565b905060006103e8610a5b610c55565b610a659190611388565b90508061083983866113ae565b600061072d82610800565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af49190611333565b6001600160a01b0316336001600160a01b031614610b255760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610b4e5760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104a9565b6001600160a01b038116610bac576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b03838116911614610c5157604051630312abdd60e61b815260040160405180910390fd5b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc291906113e7565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610cfb84670de0b6b3a76400006113ae565b610d0591906113c5565b6040519081526020015b60405180910390a15050565b600054610100900460ff16610d865760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161069e565b603280546001600160a01b0319166001600160a01b038416179055610dac816000610ea8565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e459190611400565b604080516001600160a01b03909316835260ff909116602083015201610d0f565b6032546001600160a01b0383811691161461071a57604051630312abdd60e61b815260040160405180910390fd5b61071a6001600160a01b0383168483610f2f565b6000546201000090046001600160a01b0316158015610ecf57506001600160a01b03821615155b610eec576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610c5182610b85565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261071a92869291600091610fbf91851690849061103c565b80519091501561071a5780806020019051810190610fdd9190611350565b61071a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161069e565b606061104b8484600085611055565b90505b9392505050565b6060824710156110b65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161069e565b6001600160a01b0385163b61110d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161069e565b600080866001600160a01b03168587604051611129919061141d565b60006040518083038185875af1925050503d8060008114611166576040519150601f19603f3d011682016040523d82523d6000602084013e61116b565b606091505b509150915061117b828286611186565b979650505050505050565b6060831561119557508161104e565b8251156111a55782518084602001fd5b8160405162461bcd60e51b815260040161069e91906112bf565b6001600160a01b03811681146103c157600080fd5b6000602082840312156111e657600080fd5b813561104e816111bf565b60006020828403121561120357600080fd5b5035919050565b6000806040838503121561121d57600080fd5b8235611228816111bf565b946020939093013593505050565b6000806040838503121561124957600080fd5b8235611254816111bf565b91506020830135611264816111bf565b809150509250929050565b60ff811681146103c157600080fd5b60006020828403121561129057600080fd5b813561104e8161126f565b60005b838110156112b657818101518382015260200161129e565b50506000910152565b60208152600082518060208401526112de81604085016020870161129b565b601f01601f19169190910160400192915050565b60008060006060848603121561130757600080fd5b8335611312816111bf565b92506020840135611322816111bf565b929592945050506040919091013590565b60006020828403121561134557600080fd5b815161104e816111bf565b60006020828403121561136257600080fd5b8151801515811461104e57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072d5761072d611372565b8181038181111561072d5761072d611372565b808202811582820484141761072d5761072d611372565b6000826113e257634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156113f957600080fd5b5051919050565b60006020828403121561141257600080fd5b815161104e8161126f565b6000825161142f81846020870161129b565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212207c2cd2bc64db7202f7b681db3edb8e393ce605720e8a1a12ff10381895cfd67a64736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", + Bin: "0x60a060405234801561001057600080fd5b5060405161162638038061162683398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b600054610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015610108576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b6080516114bc61016a60003960008181610199015281816104e8015281816108ac015261094b01526114bc6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80635c975abb116100b8578063ab5921e11161007c578063ab5921e11461029c578063ce7c2ac2146102b1578063d9caed12146102c4578063e3dae51c146102d7578063f3e73875146102ea578063fabc1cbc146102fd57600080fd5b80635c975abb146102425780637a8b26371461024a578063886f11951461025d5780638c871019146102765780638f6a62401461028957600080fd5b806347e7ef24116100ff57806347e7ef24146101d2578063485cc955146101e5578063553ca5f8146101f8578063595c6a671461020b5780635ac86ab71461021357600080fd5b806310d67a2f1461013c578063136439dd146101515780632495a5991461016457806339b70e38146101945780633a98ef39146101bb575b600080fd5b61014f61014a3660046111d4565b610310565b005b61014f61015f3660046111f1565b6103c4565b603254610177906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101777f000000000000000000000000000000000000000000000000000000000000000081565b6101c460335481565b60405190815260200161018b565b6101c46101e036600461120a565b6104b4565b61014f6101f3366004611236565b610605565b6101c46102063660046111d4565b61071f565b61014f610733565b61023261022136600461127e565b6001805460ff9092161b9081161490565b604051901515815260200161018b565b6001546101c4565b6101c46102583660046111f1565b610800565b600054610177906201000090046001600160a01b031681565b6101c46102843660046111f1565b61084b565b6101c46102973660046111d4565b610856565b6102a4610864565b60405161018b91906112bf565b6101c46102bf3660046111d4565b610884565b61014f6102d23660046112f2565b610919565b6101c46102e53660046111f1565b610a39565b6101c46102f83660046111f1565b610a72565b61014f61030b3660046111f1565b610a7d565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103879190611333565b6001600160a01b0316336001600160a01b0316146103b85760405163794821ff60e01b815260040160405180910390fd5b6103c181610b85565b50565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610411573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104359190611350565b61045257604051631d77d47760e21b815260040160405180910390fd5b600154818116146104765760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036104dd5760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461052657604051635c427cd960e01b815260040160405180910390fd5b6105308484610c23565b60335460006105416103e883611388565b905060006103e8610550610c55565b61055a9190611388565b90506000610568878361139b565b90508061057584896113ae565b61057f91906113c5565b9550856000036105a257604051630c392ed360e11b815260040160405180910390fd5b6105ac8685611388565b60338190556f4b3b4ca85a86c47a098a223fffffffff10156105e157604051632f14e8a360e11b815260040160405180910390fd5b6105fa826103e86033546105f59190611388565b610cc7565b505050505092915050565b600054610100900460ff16158080156106255750600054600160ff909116105b8061063f5750303b15801561063f575060005460ff166001145b6106a75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156106ca576000805461ff0019166101001790555b6106d48383610d1b565b801561071a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061072d61025883610884565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a49190611350565b6107c157604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e86033546108139190611388565b905060006103e8610822610c55565b61082c9190611388565b90508161083985836113ae565b61084391906113c5565b949350505050565b600061072d82610a39565b600061072d6102f883610884565b60606040518060800160405280604d815260200161143a604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa1580156108f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d91906113e7565b600180546002908116036109405760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461098957604051635c427cd960e01b815260040160405180910390fd5b610994848484610e66565b603354808311156109b857604051630b469df360e41b815260040160405180910390fd5b60006109c66103e883611388565b905060006103e86109d5610c55565b6109df9190611388565b90506000826109ee87846113ae565b6109f891906113c5565b9050610a04868561139b565b603355610a24610a14828461139b565b6103e86033546105f59190611388565b610a2f888883610e94565b5050505050505050565b6000806103e8603354610a4c9190611388565b905060006103e8610a5b610c55565b610a659190611388565b90508061083983866113ae565b600061072d82610800565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af49190611333565b6001600160a01b0316336001600160a01b031614610b255760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610b4e5760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104a9565b6001600160a01b038116610bac576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6032546001600160a01b03838116911614610c5157604051630312abdd60e61b815260040160405180910390fd5b5050565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc291906113e7565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610cfb84670de0b6b3a76400006113ae565b610d0591906113c5565b6040519081526020015b60405180910390a15050565b600054610100900460ff16610d865760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161069e565b603280546001600160a01b0319166001600160a01b038416179055610dac816000610ea8565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e459190611400565b604080516001600160a01b03909316835260ff909116602083015201610d0f565b6032546001600160a01b0383811691161461071a57604051630312abdd60e61b815260040160405180910390fd5b61071a6001600160a01b0383168483610f2f565b6000546201000090046001600160a01b0316158015610ecf57506001600160a01b03821615155b610eec576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2610c5182610b85565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261071a92869291600091610fbf91851690849061103c565b80519091501561071a5780806020019051810190610fdd9190611350565b61071a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161069e565b606061104b8484600085611055565b90505b9392505050565b6060824710156110b65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161069e565b6001600160a01b0385163b61110d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161069e565b600080866001600160a01b03168587604051611129919061141d565b60006040518083038185875af1925050503d8060008114611166576040519150601f19603f3d011682016040523d82523d6000602084013e61116b565b606091505b509150915061117b828286611186565b979650505050505050565b6060831561119557508161104e565b8251156111a55782518084602001fd5b8160405162461bcd60e51b815260040161069e91906112bf565b6001600160a01b03811681146103c157600080fd5b6000602082840312156111e657600080fd5b813561104e816111bf565b60006020828403121561120357600080fd5b5035919050565b6000806040838503121561121d57600080fd5b8235611228816111bf565b946020939093013593505050565b6000806040838503121561124957600080fd5b8235611254816111bf565b91506020830135611264816111bf565b809150509250929050565b60ff811681146103c157600080fd5b60006020828403121561129057600080fd5b813561104e8161126f565b60005b838110156112b657818101518382015260200161129e565b50506000910152565b60208152600082518060208401526112de81604085016020870161129b565b601f01601f19169190910160400192915050565b60008060006060848603121561130757600080fd5b8335611312816111bf565b92506020840135611322816111bf565b929592945050506040919091013590565b60006020828403121561134557600080fd5b815161104e816111bf565b60006020828403121561136257600080fd5b8151801515811461104e57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072d5761072d611372565b8181038181111561072d5761072d611372565b808202811582820484141761072d5761072d611372565b6000826113e257634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156113f957600080fd5b5051919050565b60006020828403121561141257600080fd5b815161104e8161126f565b6000825161142f81846020870161129b565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220db7dc501fe6d8a6582c38621f259963aefb0ee45e95afc1bb65ecf1e201cd79064736f6c634300081b0033", } // StrategyBaseABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyBaseTVLLimits/binding.go b/pkg/bindings/StrategyBaseTVLLimits/binding.go index 6de3210d9..322dd3f07 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\"}],\"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\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"WithdrawalAmountExceedsDeposit\",\"inputs\":[]}]", - Bin: "0x60a060405234801561001057600080fd5b506040516119d03803806119d083398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b60805161186461016c600039600081816102160152818161072b01528181610aa30152610b4201526118646000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046114c2565b6103ba565b005b6101a66101b636600461150c565b61049d565b6101a66101c9366004611529565b610551565b6101a66101dc36600461154b565b610607565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b61024160335481565b604051908152602001610208565b61024160645481565b610241610266366004611564565b6106f7565b6101a6610279366004611590565b610848565b61024161028c36600461150c565b610916565b6101a661092a565b6102b86102a73660046115d8565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e736600461154b565b6109f7565b6000546101f4906201000090046001600160a01b031681565b61024161031336600461154b565b610a42565b61024161032636600461150c565b610a4d565b610333610a5b565b6040516102089190611619565b61024161034e36600461150c565b610a7b565b6101a661036136600461164c565b610b10565b60645460655460408051928352602083019190915201610208565b61024161038f36600461154b565b610c30565b6102416103a236600461154b565b610c69565b6101a66103b536600461154b565b610c74565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b81526004016104109061168d565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610d7c565b6104508383610e20565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906116db565b6001600160a01b0316336001600160a01b0316146105455760405163794821ff60e01b815260040160405180910390fd5b61054e81610f73565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c891906116db565b6001600160a01b0316336001600160a01b0316146105f95760405163794821ff60e01b815260040160405180910390fd5b6106038282610d7c565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610654573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067891906116f8565b61069557604051631d77d47760e21b815260040160405180910390fd5b600154818116146106b95760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036107205760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610769576040516348da714f60e01b815260040160405180910390fd5b6107738484611011565b60335460006107846103e883611730565b905060006103e8610793611068565b61079d9190611730565b905060006107ab8783611743565b9050806107b88489611756565b6107c2919061176d565b9550856000036107e557604051630c392ed360e11b815260040160405180910390fd5b6107ef8685611730565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561082457604051632f14e8a360e11b815260040160405180910390fd5b61083d826103e86033546108389190611730565b6110da565b505050505092915050565b600054610100900460ff16158080156108685750600054600160ff909116105b806108825750303b158015610882575060005460ff166001145b61089e5760405162461bcd60e51b81526004016104109061168d565b6000805460ff1916600117905580156108c1576000805461ff0019166101001790555b6108cb8383610e20565b8015610911576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109246102e783610a7b565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099b91906116f8565b6109b857604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610a0a9190611730565b905060006103e8610a19611068565b610a239190611730565b905081610a308583611756565b610a3a919061176d565b949350505050565b600061092482610c30565b60006109246103a283610a7b565b60606040518060800160405280604d81526020016117e2604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610924919061178f565b60018054600290811603610b375760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b80576040516348da714f60e01b815260040160405180910390fd5b610b8b848484611126565b60335480831115610baf57604051633a5d3b0160e21b815260040160405180910390fd5b6000610bbd6103e883611730565b905060006103e8610bcc611068565b610bd69190611730565b9050600082610be58784611756565b610bef919061176d565b9050610bfb8685611743565b603355610c1b610c0b8284611743565b6103e86033546108389190611730565b610c26888883611154565b5050505050505050565b6000806103e8603354610c439190611730565b905060006103e8610c52611068565b610c5c9190611730565b905080610a308386611756565b6000610924826109f7565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ceb91906116db565b6001600160a01b0316336001600160a01b031614610d1c5760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610d455760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106ec565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610e155760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b600054610100900460ff16610e8b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b038416179055610eb1816000611168565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a91906117a8565b604080516001600160a01b03909316835260ff9091166020830152015b60405180910390a15050565b6001600160a01b038116610f9a576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6064548111156110345760405163052b07b760e21b815260040160405180910390fd5b60655461103f611068565b111561105e5760405163d86bae6760e01b815260040160405180910390fd5b61060382826111ef565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d5919061178f565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be88161110e84670de0b6b3a7640000611756565b611118919061176d565b604051908152602001610f67565b6032546001600160a01b0383811691161461091157604051630312abdd60e61b815260040160405180910390fd5b6109116001600160a01b038316848361121d565b6000546201000090046001600160a01b031615801561118f57506001600160a01b03821615155b6111ac576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261060382610f73565b6032546001600160a01b0383811691161461060357604051630312abdd60e61b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610911928692916000916112ad91851690849061132a565b80519091501561091157808060200190518101906112cb91906116f8565b6109115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b60606113398484600085611343565b90505b9392505050565b6060824710156113a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6113fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161141791906117c5565b60006040518083038185875af1925050503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b5091509150611469828286611474565b979650505050505050565b6060831561148357508161133c565b8251156114935782518084602001fd5b8160405162461bcd60e51b81526004016104109190611619565b6001600160a01b038116811461054e57600080fd5b600080600080608085870312156114d857600080fd5b843593506020850135925060408501356114f1816114ad565b91506060850135611501816114ad565b939692955090935050565b60006020828403121561151e57600080fd5b813561133c816114ad565b6000806040838503121561153c57600080fd5b50508035926020909101359150565b60006020828403121561155d57600080fd5b5035919050565b6000806040838503121561157757600080fd5b8235611582816114ad565b946020939093013593505050565b600080604083850312156115a357600080fd5b82356115ae816114ad565b915060208301356115be816114ad565b809150509250929050565b60ff8116811461054e57600080fd5b6000602082840312156115ea57600080fd5b813561133c816115c9565b60005b838110156116105781810151838201526020016115f8565b50506000910152565b60208152600082518060208401526116388160408501602087016115f5565b601f01601f19169190910160400192915050565b60008060006060848603121561166157600080fd5b833561166c816114ad565b9250602084013561167c816114ad565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156116ed57600080fd5b815161133c816114ad565b60006020828403121561170a57600080fd5b8151801515811461133c57600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156109245761092461171a565b818103818111156109245761092461171a565b80820281158282048414176109245761092461171a565b60008261178a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156117a157600080fd5b5051919050565b6000602082840312156117ba57600080fd5b815161133c816115c9565b600082516117d78184602087016115f5565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212208c4b1a7f9dca79d57071cdb720724587dcd686192083f606108247c8575a95ca64736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":[],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", + Bin: "0x60a060405234801561001057600080fd5b506040516119d03803806119d083398101604081905261002f9161010c565b6001600160a01b0381166080528061004561004c565b505061013c565b600054610100900460ff16156100b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011e57600080fd5b81516001600160a01b038116811461013557600080fd5b9392505050565b60805161186461016c600039600081816102160152818161072b01528181610aa30152610b4201526118646000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80635c975abb116100de578063ab5921e111610097578063df6fadc111610071578063df6fadc114610366578063e3dae51c14610381578063f3e7387514610394578063fabc1cbc146103a757600080fd5b8063ab5921e11461032b578063ce7c2ac214610340578063d9caed121461035357600080fd5b80635c975abb146102c857806361b01b5d146102d05780637a8b2637146102d9578063886f1195146102ec5780638c871019146103055780638f6a62401461031857600080fd5b80633a98ef391161014b578063485cc95511610125578063485cc9551461026b578063553ca5f81461027e578063595c6a67146102915780635ac86ab71461029957600080fd5b80633a98ef391461023857806343fe08b01461024f57806347e7ef241461025857600080fd5b8063019e27291461019357806310d67a2f146101a857806311c70c9d146101bb578063136439dd146101ce5780632495a599146101e157806339b70e3814610211575b600080fd5b6101a66101a13660046114c2565b6103ba565b005b6101a66101b636600461150c565b61049d565b6101a66101c9366004611529565b610551565b6101a66101dc36600461154b565b610607565b6032546101f4906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b61024160335481565b604051908152602001610208565b61024160645481565b610241610266366004611564565b6106f7565b6101a6610279366004611590565b610848565b61024161028c36600461150c565b610916565b6101a661092a565b6102b86102a73660046115d8565b6001805460ff9092161b9081161490565b6040519015158152602001610208565b600154610241565b61024160655481565b6102416102e736600461154b565b6109f7565b6000546101f4906201000090046001600160a01b031681565b61024161031336600461154b565b610a42565b61024161032636600461150c565b610a4d565b610333610a5b565b6040516102089190611619565b61024161034e36600461150c565b610a7b565b6101a661036136600461164c565b610b10565b60645460655460408051928352602083019190915201610208565b61024161038f36600461154b565b610c30565b6102416103a236600461154b565b610c69565b6101a66103b536600461154b565b610c74565b600054610100900460ff16158080156103da5750600054600160ff909116105b806103f45750303b1580156103f4575060005460ff166001145b6104195760405162461bcd60e51b81526004016104109061168d565b60405180910390fd5b6000805460ff19166001179055801561043c576000805461ff0019166101001790555b6104468585610d7c565b6104508383610e20565b8015610496576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051491906116db565b6001600160a01b0316336001600160a01b0316146105455760405163794821ff60e01b815260040160405180910390fd5b61054e81610f73565b50565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c891906116db565b6001600160a01b0316336001600160a01b0316146105f95760405163794821ff60e01b815260040160405180910390fd5b6106038282610d7c565b5050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610654573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067891906116f8565b61069557604051631d77d47760e21b815260040160405180910390fd5b600154818116146106b95760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6001805460009182918116036107205760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461076957604051635c427cd960e01b815260040160405180910390fd5b6107738484611011565b60335460006107846103e883611730565b905060006103e8610793611068565b61079d9190611730565b905060006107ab8783611743565b9050806107b88489611756565b6107c2919061176d565b9550856000036107e557604051630c392ed360e11b815260040160405180910390fd5b6107ef8685611730565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561082457604051632f14e8a360e11b815260040160405180910390fd5b61083d826103e86033546108389190611730565b6110da565b505050505092915050565b600054610100900460ff16158080156108685750600054600160ff909116105b806108825750303b158015610882575060005460ff166001145b61089e5760405162461bcd60e51b81526004016104109061168d565b6000805460ff1916600117905580156108c1576000805461ff0019166101001790555b6108cb8383610e20565b8015610911576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60006109246102e783610a7b565b92915050565b60005460405163237dfb4760e11b8152336004820152620100009091046001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099b91906116f8565b6109b857604051631d77d47760e21b815260040160405180910390fd5b600019600181905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6000806103e8603354610a0a9190611730565b905060006103e8610a19611068565b610a239190611730565b905081610a308583611756565b610a3a919061176d565b949350505050565b600061092482610c30565b60006109246103a283610a7b565b60606040518060800160405280604d81526020016117e2604d9139905090565b604051633d3f06c960e11b81526001600160a01b0382811660048301523060248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690637a7e0d9290604401602060405180830381865afa158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610924919061178f565b60018054600290811603610b375760405163840a48d560e01b815260040160405180910390fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b8057604051635c427cd960e01b815260040160405180910390fd5b610b8b848484611126565b60335480831115610baf57604051630b469df360e41b815260040160405180910390fd5b6000610bbd6103e883611730565b905060006103e8610bcc611068565b610bd69190611730565b9050600082610be58784611756565b610bef919061176d565b9050610bfb8685611743565b603355610c1b610c0b8284611743565b6103e86033546108389190611730565b610c26888883611154565b5050505050505050565b6000806103e8603354610c439190611730565b905060006103e8610c52611068565b610c5c9190611730565b905080610a308386611756565b6000610924826109f7565b600060029054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ceb91906116db565b6001600160a01b0316336001600160a01b031614610d1c5760405163794821ff60e01b815260040160405180910390fd5b600154198119600154191614610d455760405163c61dca5d60e01b815260040160405180910390fd5b600181905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016106ec565b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610e155760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b600054610100900460ff16610e8b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610410565b603280546001600160a01b0319166001600160a01b038416179055610eb1816000611168565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af557507603260009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a91906117a8565b604080516001600160a01b03909316835260ff9091166020830152015b60405180910390a15050565b6001600160a01b038116610f9a576040516339b190bb60e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6064548111156110345760405163052b07b760e21b815260040160405180910390fd5b60655461103f611068565b111561105e5760405163d86bae6760e01b815260040160405180910390fd5b61060382826111ef565b6032546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d5919061178f565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be88161110e84670de0b6b3a7640000611756565b611118919061176d565b604051908152602001610f67565b6032546001600160a01b0383811691161461091157604051630312abdd60e61b815260040160405180910390fd5b6109116001600160a01b038316848361121d565b6000546201000090046001600160a01b031615801561118f57506001600160a01b03821615155b6111ac576040516339b190bb60e11b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261060382610f73565b6032546001600160a01b0383811691161461060357604051630312abdd60e61b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610911928692916000916112ad91851690849061132a565b80519091501561091157808060200190518101906112cb91906116f8565b6109115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610410565b60606113398484600085611343565b90505b9392505050565b6060824710156113a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610410565b6001600160a01b0385163b6113fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610410565b600080866001600160a01b0316858760405161141791906117c5565b60006040518083038185875af1925050503d8060008114611454576040519150601f19603f3d011682016040523d82523d6000602084013e611459565b606091505b5091509150611469828286611474565b979650505050505050565b6060831561148357508161133c565b8251156114935782518084602001fd5b8160405162461bcd60e51b81526004016104109190611619565b6001600160a01b038116811461054e57600080fd5b600080600080608085870312156114d857600080fd5b843593506020850135925060408501356114f1816114ad565b91506060850135611501816114ad565b939692955090935050565b60006020828403121561151e57600080fd5b813561133c816114ad565b6000806040838503121561153c57600080fd5b50508035926020909101359150565b60006020828403121561155d57600080fd5b5035919050565b6000806040838503121561157757600080fd5b8235611582816114ad565b946020939093013593505050565b600080604083850312156115a357600080fd5b82356115ae816114ad565b915060208301356115be816114ad565b809150509250929050565b60ff8116811461054e57600080fd5b6000602082840312156115ea57600080fd5b813561133c816115c9565b60005b838110156116105781810151838201526020016115f8565b50506000910152565b60208152600082518060208401526116388160408501602087016115f5565b601f01601f19169190910160400192915050565b60008060006060848603121561166157600080fd5b833561166c816114ad565b9250602084013561167c816114ad565b929592945050506040919091013590565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156116ed57600080fd5b815161133c816114ad565b60006020828403121561170a57600080fd5b8151801515811461133c57600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156109245761092461171a565b818103818111156109245761092461171a565b80820281158282048414176109245761092461171a565b60008261178a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156117a157600080fd5b5051919050565b6000602082840312156117ba57600080fd5b815161133c816115c9565b600082516117d78184602087016115f5565b919091019291505056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212204c8e87547d82a7330c17070369c3af5ade84d7601b9b5c83d76e780ad5bee50464736f6c634300081b0033", } // StrategyBaseTVLLimitsABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyFactory/binding.go b/pkg/bindings/StrategyFactory/binding.go index a783cddb7..00a86d7b4 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\"}],\"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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotBlacklistDeployedStrategy\",\"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: "0x60a060405234801561001057600080fd5b50604051611df1380380611df183398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b603354610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60335460ff9081161015610108576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b608051611c7961017860003960008181610171015281816106d801528181610775015281816108bd01528181610aed0152610e3f0152611c796000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80636b9b6229116100ad578063f0062d9a11610071578063f0062d9a1461029d578063f2fde38b146102b0578063fabc1cbc146102c3578063fe38b32d146102d6578063fe575a87146102e957600080fd5b80636b9b62291461024b578063715018a61461025e578063886f1195146102665780638da5cb5b14610279578063be2030941461028a57600080fd5b8063581dfd65116100f4578063581dfd65146101c3578063595c6a67146101ec5780635ac86ab7146101f45780635c975abb14610227578063697d54b41461023857600080fd5b806310d67a2f14610131578063136439dd1461014657806323103c411461015957806339b70e381461016c5780634e5a4263146101b0575b600080fd5b61014461013f36600461112d565b61030c565b005b610144610154366004611151565b6103c0565b6101446101673660046111b6565b6104ab565b6101937f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101446101be366004611206565b610746565b6101936101d136600461112d565b6001602052600090815260409020546001600160a01b031681565b6101446107d6565b61021761020236600461123f565b609954600160ff9092169190911b9081161490565b60405190151581526020016101a7565b6099546040519081526020016101a7565b610144610246366004611262565b61089e565b61019361025936600461112d565b6108f8565b610144610b60565b609854610193906001600160a01b031681565b6066546001600160a01b0316610193565b6101446102983660046112d3565b610b74565b600054610193906001600160a01b031681565b6101446102be36600461112d565b610ca2565b6101446102d1366004611151565b610d18565b6101446102e43660046111b6565b610e20565b6102176102f736600461112d565b60026020526000908152604090205460ff1681565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103839190611326565b6001600160a01b0316336001600160a01b0316146103b45760405163794821ff60e01b815260040160405180910390fd5b6103bd81610e76565b50565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c9190611343565b61044957604051631d77d47760e21b815260040160405180910390fd5b6099548181161461046d5760405163c61dca5d60e01b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6104b3610f06565b60008167ffffffffffffffff8111156104ce576104ce611360565b6040519080825280602002602001820160405280156104f7578160200160208202803683370190505b5090506000805b838110156106b7576002600086868481811061051c5761051c611376565b9050602002016020810190610531919061112d565b6001600160a01b0316815260208101919091526040016000205460ff161561056b5760405162b1aec360e41b815260040160405180910390fd5b60016002600087878581811061058357610583611376565b9050602002016020810190610598919061112d565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f75519c51f39873ec0e27dd3bbc09549e4865a113f505393fb9eab5898f6418b38585838181106105f3576105f3611376565b9050602002016020810190610608919061112d565b6040516001600160a01b03909116815260200160405180910390a160006001600087878581811061063b5761063b611376565b9050602002016020810190610650919061112d565b6001600160a01b03908116825260208201929092526040016000205416905080156106ae578084848151811061068857610688611376565b6001600160a01b0390921660209283029190910190910152826106aa8161138c565b9350505b506001016104fe565b508082528015610740576040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061070d9085906004016113f8565b600060405180830381600087803b15801561072757600080fd5b505af115801561073b573d6000803e3d6000fd5b505050505b50505050565b61074e610f06565b604051634e5a426360e01b81526001600160a01b03838116600483015282151560248301527f00000000000000000000000000000000000000000000000000000000000000001690634e5a4263906044015b600060405180830381600087803b1580156107ba57600080fd5b505af11580156107ce573d6000803e3d6000fd5b505050505050565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611343565b61085f57604051631d77d47760e21b815260040160405180910390fd5b600019609981905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6108a6610f06565b60405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b35479061070d90879087908790879060040161144b565b60995460009081906001908116036109235760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b03831660009081526002602052604090205460ff161561095d5760405163091867bd60e11b815260040160405180910390fd5b6001600160a01b0383811660009081526001602052604090205416156109965760405163c45546f760e01b815260040160405180910390fd5b600080546098546040516001600160a01b038781166024830152918216604482015291169063485cc95560e01b9060640160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610a049061110b565b610a0f9291906114a9565b604051809103906000f080158015610a2b573d6000803e3d6000fd5b509050610a388482610f60565b6040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508282600081518110610a9157610a91611376565b60200260200101906001600160a01b031690816001600160a01b031681525050600081600081518110610ac657610ac6611376565b9115156020928302919091019091015260405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b354790610b249085908590600401611506565b600060405180830381600087803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b509498975050505050505050565b610b68610f06565b610b726000610fcb565b565b603354610100900460ff1615808015610b945750603354600160ff909116105b80610bae5750303b158015610bae575060335460ff166001145b610c165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6033805460ff191660011790558015610c39576033805461ff0019166101001790555b610c4285610fcb565b610c4c848461101d565b610c55826110a2565b8015610c9b576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610caa610f06565b6001600160a01b038116610d0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c0d565b6103bd81610fcb565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190611326565b6001600160a01b0316336001600160a01b031614610dc05760405163794821ff60e01b815260040160405180910390fd5b609954198119609954191614610de95760405163c61dca5d60e01b815260040160405180910390fd5b609981905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104a0565b610e28610f06565b6040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b8906107a09085908590600401611562565b6001600160a01b038116610e9d576040516339b190bb60e11b815260040160405180910390fd5b609854604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609880546001600160a01b0319166001600160a01b0392909216919091179055565b6066546001600160a01b03163314610b725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0d565b6001600160a01b0382811660008181526001602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f6852a55230ef089d785bce7ffbf757985de34026df90a87d7b4a6e56f95d251f910160405180910390a15050565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6098546001600160a01b031615801561103e57506001600160a01b03821615155b61105b576040516339b190bb60e11b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261109e82610e76565b5050565b600054604080516001600160a01b03928316815291831660208301527fe21755962a7d7e100b59b9c3e4d4b54085b146313719955efb6a7a25c5c7feee910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6106c58061157f83390190565b6001600160a01b03811681146103bd57600080fd5b60006020828403121561113f57600080fd5b813561114a81611118565b9392505050565b60006020828403121561116357600080fd5b5035919050565b60008083601f84011261117c57600080fd5b50813567ffffffffffffffff81111561119457600080fd5b6020830191508360208260051b85010111156111af57600080fd5b9250929050565b600080602083850312156111c957600080fd5b823567ffffffffffffffff8111156111e057600080fd5b6111ec8582860161116a565b90969095509350505050565b80151581146103bd57600080fd5b6000806040838503121561121957600080fd5b823561122481611118565b91506020830135611234816111f8565b809150509250929050565b60006020828403121561125157600080fd5b813560ff8116811461114a57600080fd5b6000806000806040858703121561127857600080fd5b843567ffffffffffffffff81111561128f57600080fd5b61129b8782880161116a565b909550935050602085013567ffffffffffffffff8111156112bb57600080fd5b6112c78782880161116a565b95989497509550505050565b600080600080608085870312156112e957600080fd5b84356112f481611118565b9350602085013561130481611118565b925060408501359150606085013561131b81611118565b939692955090935050565b60006020828403121561133857600080fd5b815161114a81611118565b60006020828403121561135557600080fd5b815161114a816111f8565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016113ac57634e487b7160e01b600052601160045260246000fd5b5060010190565b600081518084526020840193506020830160005b828110156113ee5781516001600160a01b03168652602095860195909101906001016113c7565b5093949350505050565b60208152600061114a60208301846113b3565b81835260208301925060008160005b848110156113ee57813561142d81611118565b6001600160a01b03168652602095860195919091019060010161141a565b60408152600061145f60408301868861140b565b82810360208085019190915284825285910160005b8581101561149d578235611487816111f8565b1515825260209283019290910190600101611474565b50979650505050505050565b60018060a01b0383168152604060208201526000825180604084015260005b818110156114e557602081860181015160608684010152016114c8565b506000606082850101526060601f19601f8301168401019150509392505050565b60408152600061151960408301856113b3565b828103602084015280845180835260208301915060208601925060005b818110156115565783511515835260209384019390920191600101611536565b50909695505050505050565b60208152600061157660208301848661140b565b94935050505056fe60806040526040516106c53803806106c583398101604081905261002291610413565b61002e82826000610035565b5050610543565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104d9565b8361027a565b505b505050565b6001600160a01b0381163b6101605760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101d4816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c591906104d9565b6001600160a01b03163b151590565b6102395760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610157565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029f838360405180606001604052806027815260200161069e602791396102a6565b9392505050565b60606001600160a01b0384163b61030e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610157565b600080856001600160a01b03168560405161032991906104f4565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b50909250905061037a828286610384565b9695505050505050565b6060831561039357508161029f565b8251156103a35782518084602001fd5b8160405162461bcd60e51b81526004016101579190610510565b80516001600160a01b03811681146103d457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b6000806040838503121561042657600080fd5b61042f836103bd565b60208401519092506001600160401b0381111561044b57600080fd5b8301601f8101851361045c57600080fd5b80516001600160401b03811115610475576104756103d9565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104a3576104a36103d9565b6040528181528282016020018710156104bb57600080fd5b6104cc8260208301602086016103ef565b8093505050509250929050565b6000602082840312156104eb57600080fd5b61029f826103bd565b600082516105068184602087016103ef565b9190910192915050565b602081526000825180602084015261052f8160408501602087016103ef565b601f01601f19169190910160400192915050565b61014c806105526000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd91906100e6565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b6000602082840312156100f857600080fd5b81516001600160a01b038116811461010f57600080fd5b939250505056fea264697066735822122073f44b13ad6a41f166bfe1da0f67ccdfa4d7fa137b8df1dcc52307b737bea46264736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c6abfaf825fb8c7fbe489dbf371ed8a4ca814004766fbd8da11a953936ac48b464736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"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\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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: "0x60a060405234801561001057600080fd5b50604051611df2380380611df283398101604081905261002f9161010a565b6001600160a01b03811660805261004461004a565b5061013a565b603354610100900460ff16156100b65760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60335460ff9081161015610108576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b608051611c7a61017860003960008181610171015281816106d901528181610776015281816108be01528181610aee0152610e400152611c7a6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80636b9b6229116100ad578063f0062d9a11610071578063f0062d9a1461029d578063f2fde38b146102b0578063fabc1cbc146102c3578063fe38b32d146102d6578063fe575a87146102e957600080fd5b80636b9b62291461024b578063715018a61461025e578063886f1195146102665780638da5cb5b14610279578063be2030941461028a57600080fd5b8063581dfd65116100f4578063581dfd65146101c3578063595c6a67146101ec5780635ac86ab7146101f45780635c975abb14610227578063697d54b41461023857600080fd5b806310d67a2f14610131578063136439dd1461014657806323103c411461015957806339b70e381461016c5780634e5a4263146101b0575b600080fd5b61014461013f36600461112e565b61030c565b005b610144610154366004611152565b6103c0565b6101446101673660046111b7565b6104ab565b6101937f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101446101be366004611207565b610747565b6101936101d136600461112e565b6001602052600090815260409020546001600160a01b031681565b6101446107d7565b610217610202366004611240565b609954600160ff9092169190911b9081161490565b60405190151581526020016101a7565b6099546040519081526020016101a7565b610144610246366004611263565b61089f565b61019361025936600461112e565b6108f9565b610144610b61565b609854610193906001600160a01b031681565b6066546001600160a01b0316610193565b6101446102983660046112d4565b610b75565b600054610193906001600160a01b031681565b6101446102be36600461112e565b610ca3565b6101446102d1366004611152565b610d19565b6101446102e43660046111b7565b610e21565b6102176102f736600461112e565b60026020526000908152604090205460ff1681565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103839190611327565b6001600160a01b0316336001600160a01b0316146103b45760405163794821ff60e01b815260040160405180910390fd5b6103bd81610e77565b50565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042c9190611344565b61044957604051631d77d47760e21b815260040160405180910390fd5b6099548181161461046d5760405163c61dca5d60e01b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b6104b3610f07565b60008167ffffffffffffffff8111156104ce576104ce611361565b6040519080825280602002602001820160405280156104f7578160200160208202803683370190505b5090506000805b838110156106b8576002600086868481811061051c5761051c611377565b9050602002016020810190610531919061112e565b6001600160a01b0316815260208101919091526040016000205460ff161561056c5760405163f53de75f60e01b815260040160405180910390fd5b60016002600087878581811061058457610584611377565b9050602002016020810190610599919061112e565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f75519c51f39873ec0e27dd3bbc09549e4865a113f505393fb9eab5898f6418b38585838181106105f4576105f4611377565b9050602002016020810190610609919061112e565b6040516001600160a01b03909116815260200160405180910390a160006001600087878581811061063c5761063c611377565b9050602002016020810190610651919061112e565b6001600160a01b03908116825260208201929092526040016000205416905080156106af578084848151811061068957610689611377565b6001600160a01b0390921660209283029190910190910152826106ab8161138d565b9350505b506001016104fe565b508082528015610741576040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061070e9085906004016113f9565b600060405180830381600087803b15801561072857600080fd5b505af115801561073c573d6000803e3d6000fd5b505050505b50505050565b61074f610f07565b604051634e5a426360e01b81526001600160a01b03838116600483015282151560248301527f00000000000000000000000000000000000000000000000000000000000000001690634e5a4263906044015b600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b505050505050565b60985460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561081f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108439190611344565b61086057604051631d77d47760e21b815260040160405180910390fd5b600019609981905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b6108a7610f07565b60405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b35479061070e90879087908790879060040161144c565b60995460009081906001908116036109245760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b03831660009081526002602052604090205460ff161561095e5760405163091867bd60e11b815260040160405180910390fd5b6001600160a01b0383811660009081526001602052604090205416156109975760405163c45546f760e01b815260040160405180910390fd5b600080546098546040516001600160a01b038781166024830152918216604482015291169063485cc95560e01b9060640160408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610a059061110c565b610a109291906114aa565b604051809103906000f080158015610a2c573d6000803e3d6000fd5b509050610a398482610f61565b6040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508282600081518110610a9257610a92611377565b60200260200101906001600160a01b031690816001600160a01b031681525050600081600081518110610ac757610ac7611377565b9115156020928302919091019091015260405163df5b354760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063df5b354790610b259085908590600401611507565b600060405180830381600087803b158015610b3f57600080fd5b505af1158015610b53573d6000803e3d6000fd5b509498975050505050505050565b610b69610f07565b610b736000610fcc565b565b603354610100900460ff1615808015610b955750603354600160ff909116105b80610baf5750303b158015610baf575060335460ff166001145b610c175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6033805460ff191660011790558015610c3a576033805461ff0019166101001790555b610c4385610fcc565b610c4d848461101e565b610c56826110a3565b8015610c9c576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610cab610f07565b6001600160a01b038116610d105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c0e565b6103bd81610fcc565b609860009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190611327565b6001600160a01b0316336001600160a01b031614610dc15760405163794821ff60e01b815260040160405180910390fd5b609954198119609954191614610dea5760405163c61dca5d60e01b815260040160405180910390fd5b609981905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016104a0565b610e29610f07565b6040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b8906107a19085908590600401611563565b6001600160a01b038116610e9e576040516339b190bb60e11b815260040160405180910390fd5b609854604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609880546001600160a01b0319166001600160a01b0392909216919091179055565b6066546001600160a01b03163314610b735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0e565b6001600160a01b0382811660008181526001602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f6852a55230ef089d785bce7ffbf757985de34026df90a87d7b4a6e56f95d251f910160405180910390a15050565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6098546001600160a01b031615801561103f57506001600160a01b03821615155b61105c576040516339b190bb60e11b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261109f82610e77565b5050565b600054604080516001600160a01b03928316815291831660208301527fe21755962a7d7e100b59b9c3e4d4b54085b146313719955efb6a7a25c5c7feee910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6106c58061158083390190565b6001600160a01b03811681146103bd57600080fd5b60006020828403121561114057600080fd5b813561114b81611119565b9392505050565b60006020828403121561116457600080fd5b5035919050565b60008083601f84011261117d57600080fd5b50813567ffffffffffffffff81111561119557600080fd5b6020830191508360208260051b85010111156111b057600080fd5b9250929050565b600080602083850312156111ca57600080fd5b823567ffffffffffffffff8111156111e157600080fd5b6111ed8582860161116b565b90969095509350505050565b80151581146103bd57600080fd5b6000806040838503121561121a57600080fd5b823561122581611119565b91506020830135611235816111f9565b809150509250929050565b60006020828403121561125257600080fd5b813560ff8116811461114b57600080fd5b6000806000806040858703121561127957600080fd5b843567ffffffffffffffff81111561129057600080fd5b61129c8782880161116b565b909550935050602085013567ffffffffffffffff8111156112bc57600080fd5b6112c88782880161116b565b95989497509550505050565b600080600080608085870312156112ea57600080fd5b84356112f581611119565b9350602085013561130581611119565b925060408501359150606085013561131c81611119565b939692955090935050565b60006020828403121561133957600080fd5b815161114b81611119565b60006020828403121561135657600080fd5b815161114b816111f9565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016113ad57634e487b7160e01b600052601160045260246000fd5b5060010190565b600081518084526020840193506020830160005b828110156113ef5781516001600160a01b03168652602095860195909101906001016113c8565b5093949350505050565b60208152600061114b60208301846113b4565b81835260208301925060008160005b848110156113ef57813561142e81611119565b6001600160a01b03168652602095860195919091019060010161141b565b60408152600061146060408301868861140c565b82810360208085019190915284825285910160005b8581101561149e578235611488816111f9565b1515825260209283019290910190600101611475565b50979650505050505050565b60018060a01b0383168152604060208201526000825180604084015260005b818110156114e657602081860181015160608684010152016114c9565b506000606082850101526060601f19601f8301168401019150509392505050565b60408152600061151a60408301856113b4565b828103602084015280845180835260208301915060208601925060005b818110156115575783511515835260209384019390920191600101611537565b50909695505050505050565b60208152600061157760208301848661140c565b94935050505056fe60806040526040516106c53803806106c583398101604081905261002291610413565b61002e82826000610035565b5050610543565b61003e836100f6565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100f1576100ef836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e991906104d9565b8361027a565b505b505050565b6001600160a01b0381163b6101605760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101d4816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c591906104d9565b6001600160a01b03163b151590565b6102395760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610157565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029f838360405180606001604052806027815260200161069e602791396102a6565b9392505050565b60606001600160a01b0384163b61030e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610157565b600080856001600160a01b03168560405161032991906104f4565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b50909250905061037a828286610384565b9695505050505050565b6060831561039357508161029f565b8251156103a35782518084602001fd5b8160405162461bcd60e51b81526004016101579190610510565b80516001600160a01b03811681146103d457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561040a5781810151838201526020016103f2565b50506000910152565b6000806040838503121561042657600080fd5b61042f836103bd565b60208401519092506001600160401b0381111561044b57600080fd5b8301601f8101851361045c57600080fd5b80516001600160401b03811115610475576104756103d9565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104a3576104a36103d9565b6040528181528282016020018710156104bb57600080fd5b6104cc8260208301602086016103ef565b8093505050509250929050565b6000602082840312156104eb57600080fd5b61029f826103bd565b600082516105068184602087016103ef565b9190910192915050565b602081526000825180602084015261052f8160408501602087016103ef565b601f01601f19169190910160400192915050565b61014c806105526000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610029565b6100c2565b565b600061005c7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bd91906100e6565b905090565b3660008037600080366000845af43d6000803e8080156100e1573d6000f35b3d6000fd5b6000602082840312156100f857600080fd5b81516001600160a01b038116811461010f57600080fd5b939250505056fea264697066735822122073f44b13ad6a41f166bfe1da0f67ccdfa4d7fa137b8df1dcc52307b737bea46264736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220029228b7e8411e572616782cac9c5030117d04118b5def16958beba8a8ef2b7264736f6c634300081b0033", } // StrategyFactoryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyFactoryStorage/binding.go b/pkg/bindings/StrategyFactoryStorage/binding.go index 2d1429064..e7c06ebae 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\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotBlacklistDeployedStrategy\",\"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\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"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. diff --git a/pkg/bindings/StrategyManager/binding.go b/pkg/bindings/StrategyManager/binding.go index 810b6ece3..58628ec1a 100644 --- a/pkg/bindings/StrategyManager/binding.go +++ b/pkg/bindings/StrategyManager/binding.go @@ -31,8 +31,8 @@ var ( // StrategyManagerMetaData contains all meta data concerning the StrategyManager contract. var StrategyManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"getDeposits\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nonces\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWhitelister\",\"inputs\":[{\"name\":\"newStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"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\":\"stakerStrategyShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"\",\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureSigner\",\"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\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThirdPartyTransfersDisabled\",\"inputs\":[]}]", - Bin: "0x61010060405234801561001157600080fd5b50604051612bcf380380612bcf83398101604081905261003091610135565b6001600160a01b0380841660805280831660a052811660c05261005161005d565b50504660e05250610182565b600054610100900460ff16156100c95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013257600080fd5b50565b60008060006060848603121561014a57600080fd5b83516101558161011d565b60208501519093506101668161011d565b60408501519092506101778161011d565b809150509250925092565b60805160a05160c05160e0516129f86101d760003960006112df0152600061046e0152600061028501526000818161051a01528181610a3901528181610d8801528181610ddd015261169801526129f86000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063c6656702116100ad578063df5cf7231161007c578063df5cf72314610515578063e7a050aa1461053c578063f2fde38b1461054f578063f698da2514610562578063fabc1cbc1461056a57600080fd5b8063c6656702146104c9578063cbc2bd62146104dc578063cf756fdf146104ef578063df5b35471461050257600080fd5b8063b1344271116100e9578063b134427114610469578063b5d8b5b814610490578063c4623ea1146104a3578063c608c7f3146104b657600080fd5b80638da5cb5b1461040157806394f649dd14610412578063967fc0d2146104335780639b4da03d1461044657600080fd5b80635ac86ab71161019d5780637a7e0d921161016c5780637a7e0d92146103675780637ecebe0014610392578063886f1195146103b25780638b8aac3c146103c55780638c80d4e5146103ee57600080fd5b80635ac86ab7146103015780635c975abb14610334578063663c1de41461033c578063715018a61461035f57600080fd5b80634665bcda116101d95780634665bcda1461028057806348825e94146102bf5780634e5a4263146102e6578063595c6a67146102f957600080fd5b806310d67a2f1461020b578063136439dd1461022057806320606b701461023357806332e89ace1461026d575b600080fd5b61021e610219366004612397565b61057d565b005b61021e61022e3660046123b4565b610631565b61025a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61025a61027b3660046123e3565b61071c565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610264565b61025a7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61021e6102f43660046124f4565b610919565b61021e610952565b61032461030f36600461252d565b609854600160ff9092169190911b9081161490565b6040519015158152602001610264565b60985461025a565b61032461034a366004612397565b60d16020526000908152604090205460ff1681565b61021e610a1a565b61025a610375366004612550565b60cd60209081526000928352604080842090915290825290205481565b61025a6103a0366004612397565b60ca6020526000908152604090205481565b6097546102a7906001600160a01b031681565b61025a6103d3366004612397565b6001600160a01b0316600090815260ce602052604090205490565b61021e6103fc36600461257e565b610a2e565b6033546001600160a01b03166102a7565b610425610420366004612397565b610a88565b6040516102649291906125bf565b60cb546102a7906001600160a01b031681565b610324610454366004612397565b60d36020526000908152604090205460ff1681565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61021e61049e36600461268f565b610c08565b61021e6104b13660046126d1565b610d7d565b61021e6104c4366004612722565b610dd2565b61021e6104d7366004612397565b610e8b565b6102a76104ea366004612775565b610e9c565b61021e6104fd3660046126d1565b610ed4565b61021e6105103660046127a1565b611008565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61025a61054a36600461257e565b6111c9565b61021e61055d366004612397565b611265565b61025a6112db565b61021e6105783660046123b4565b611318565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190612812565b6001600160a01b0316336001600160a01b0316146106255760405163794821ff60e01b815260040160405180910390fd5b61062e81611420565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d919061282f565b6106ba57604051631d77d47760e21b815260040160405180910390fd5b609854818116146106de5760405163c61dca5d60e01b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60985460009081906001908116036107475760405163840a48d560e01b815260040160405180910390fd5b60026065540361079e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026065556001600160a01b038816600090815260d3602052604090205460ff16156107dd5760405163dc34227160e01b815260040160405180910390fd5b428410156107fe57604051630819bdcd60e01b815260040160405180910390fd5b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca90935290822060018501905591506108b66112db565b60405161190160f01b60208201526022810191909152604281018390526062016040516020818303038152906040528051906020012090506108f98882886114b0565b610905888c8c8c611599565b60016065559b9a5050505050505050505050565b60cb546001600160a01b03163314610944576040516320ba3ff960e21b815260040160405180910390fd5b61094e82826116fd565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be919061282f565b6109db57604051631d77d47760e21b815260040160405180910390fd5b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610a2261176b565b610a2c60006117c5565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a775760405163f739589b60e01b815260040160405180910390fd5b610a82838383611817565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610ac057610ac06123cd565b604051908082528060200260200182016040528015610ae9578160200160208202803683370190505b50905060005b82811015610b7a576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610b2e57610b2e61284c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610b6757610b6761284c565b6020908102919091010152600101610aef565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610bf657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bd8575b50505050509150935093505050915091565b60cb546001600160a01b03163314610c33576040516320ba3ff960e21b815260040160405180910390fd5b8060005b81811015610a825760d16000858584818110610c5557610c5561284c565b9050602002016020810190610c6a9190612397565b6001600160a01b0316815260208101919091526040016000205460ff1615610d7557600060d16000868685818110610ca457610ca461284c565b9050602002016020810190610cb99190612397565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610d1457610d1461284c565b9050602002016020810190610d299190612397565b6040516001600160a01b03909116815260200160405180910390a1610d75848483818110610d5957610d5961284c565b9050602002016020810190610d6e9190612397565b60006116fd565b600101610c37565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610dc65760405163f739589b60e01b815260040160405180910390fd5b610a82848484846118d8565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e1b5760405163f739589b60e01b815260040160405180910390fd5b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b5050505050505050565b610e9361176b565b61062e81611a5b565b60ce6020528160005260406000208181548110610eb857600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff1615808015610ef45750600054600160ff909116105b80610f0e5750303b158015610f0e575060005460ff166001145b610f715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610795565b6000805460ff191660011790558015610f94576000805461ff0019166101001790555b610f9c611ac4565b60c955610fa98383611b5b565b610fb2856117c5565b610fbb84611a5b565b8015611001576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b03163314611033576040516320ba3ff960e21b815260040160405180910390fd5b828114611053576040516343714afd60e01b815260040160405180910390fd5b8260005b818110156111c15760d160008787848181106110755761107561284c565b905060200201602081019061108a9190612397565b6001600160a01b0316815260208101919091526040016000205460ff166111b957600160d160008888858181106110c3576110c361284c565b90506020020160208101906110d89190612397565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8686838181106111335761113361284c565b90506020020160208101906111489190612397565b6040516001600160a01b03909116815260200160405180910390a16111b98686838181106111785761117861284c565b905060200201602081019061118d9190612397565b85858481811061119f5761119f61284c565b90506020020160208101906111b49190612862565b6116fd565b600101611057565b505050505050565b60985460009081906001908116036111f45760405163840a48d560e01b815260040160405180910390fd5b6002606554036112465760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610795565b600260655561125733868686611599565b600160655595945050505050565b61126d61176b565b6001600160a01b0381166112d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b61062e816117c5565b60007f0000000000000000000000000000000000000000000000000000000000000000460361130b575060c95490565b611313611ac4565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138f9190612812565b6001600160a01b0316336001600160a01b0316146113c05760405163794821ff60e01b815260040160405180910390fd5b6098541981196098541916146113e95760405163c61dca5d60e01b815260040160405180910390fd5b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610711565b6001600160a01b038116611447576040516339b190bb60e11b815260040160405180910390fd5b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561155e57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906114f090869086906004016128cf565b602060405180830381865afa15801561150d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153191906128e8565b6001600160e01b031916146115595760405163026aa43360e31b815260040160405180910390fd5b505050565b826001600160a01b03166115728383611bdc565b6001600160a01b03161461155957604051636d20896160e11b815260040160405180910390fd5b6001600160a01b038316600090815260d16020526040812054849060ff166115d457604051632efd965160e11b815260040160405180910390fd5b6115e96001600160a01b038516338786611c02565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165c9190612912565b915061166a868587856118d8565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156116dc57600080fd5b505af11580156116f0573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610a2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610795565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008160000361183a576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b03808516600090815260cd60209081526040808320938716835292905220548083111561188157604051634b18b19360e01b815260040160405180910390fd5b6001600160a01b03808616600090815260cd60209081526040808320938816835292905290812091849003918290558190036118cb576118c18585611c5c565b60019150506118d1565b60009150505b9392505050565b6001600160a01b0384166118ff576040516316f2ccc960e01b815260040160405180910390fd5b80600003611920576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b03808516600090815260cd6020908152604080832093861683529290529081205490036119c7576001600160a01b038416600090815260ce602090815260409091205410611988576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd60209081526040808320938616835292905290812080548392906119fe908490612941565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b0316158015611b7c57506001600160a01b03821615155b611b99576040516339b190bb60e11b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261094e82611420565b6000806000611beb8585611de5565b91509150611bf881611e53565b5090505b92915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a82908590612009565b6001600160a01b038216600090815260ce6020526040812054905b81811015611d76576001600160a01b03848116600090815260ce6020526040902080549185169183908110611cae57611cae61284c565b6000918252602090912001546001600160a01b031603611d6e576001600160a01b038416600090815260ce602052604090208054611cee90600190612954565b81548110611cfe57611cfe61284c565b60009182526020808320909101546001600160a01b03878116845260ce9092526040909220805491909216919083908110611d3b57611d3b61284c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611d76565b600101611c77565b818103611d9657604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b038416600090815260ce60205260409020805480611dbd57611dbd612967565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604103611e1b5760208301516040840151606085015160001a611e0f878285856120db565b94509450505050611e4c565b8251604003611e445760208301516040840151611e398683836121c8565b935093505050611e4c565b506000905060025b9250929050565b6000816004811115611e6757611e6761297d565b03611e6f5750565b6001816004811115611e8357611e8361297d565b03611ed05760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610795565b6002816004811115611ee457611ee461297d565b03611f315760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610795565b6003816004811115611f4557611f4561297d565b03611f9d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610795565b6004816004811115611fb157611fb161297d565b0361062e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610795565b600061205e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122019092919063ffffffff16565b805190915015611559578080602001905181019061207c919061282f565b6115595760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610795565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561211257506000905060036121bf565b8460ff16601b1415801561212a57508460ff16601c14155b1561213b57506000905060046121bf565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561218f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166121b8576000600192509250506121bf565b9150600090505b94509492505050565b6000806001600160ff1b038316816121e560ff86901c601b612941565b90506121f3878288856120db565b935093505050935093915050565b60606122108484600085612218565b949350505050565b6060824710156122795760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610795565b6001600160a01b0385163b6122d05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610795565b600080866001600160a01b031685876040516122ec9190612993565b60006040518083038185875af1925050503d8060008114612329576040519150601f19603f3d011682016040523d82523d6000602084013e61232e565b606091505b509150915061233e828286612349565b979650505050505050565b606083156123585750816118d1565b8251156123685782518084602001fd5b8160405162461bcd60e51b815260040161079591906129af565b6001600160a01b038116811461062e57600080fd5b6000602082840312156123a957600080fd5b81356118d181612382565b6000602082840312156123c657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156123fc57600080fd5b863561240781612382565b9550602087013561241781612382565b945060408701359350606087013561242e81612382565b92506080870135915060a087013567ffffffffffffffff81111561245157600080fd5b8701601f8101891361246257600080fd5b803567ffffffffffffffff81111561247c5761247c6123cd565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156124ab576124ab6123cd565b6040528181528282016020018b10156124c357600080fd5b816020840160208301376000602083830101528093505050509295509295509295565b801515811461062e57600080fd5b6000806040838503121561250757600080fd5b823561251281612382565b91506020830135612522816124e6565b809150509250929050565b60006020828403121561253f57600080fd5b813560ff811681146118d157600080fd5b6000806040838503121561256357600080fd5b823561256e81612382565b9150602083013561252281612382565b60008060006060848603121561259357600080fd5b833561259e81612382565b925060208401356125ae81612382565b929592945050506040919091013590565b6040808252835190820181905260009060208501906060840190835b818110156126025783516001600160a01b03168352602093840193909201916001016125db565b50508381036020808601919091528551808352918101925085019060005b8181101561263e578251845260209384019390920191600101612620565b50919695505050505050565b60008083601f84011261265c57600080fd5b50813567ffffffffffffffff81111561267457600080fd5b6020830191508360208260051b8501011115611e4c57600080fd5b600080602083850312156126a257600080fd5b823567ffffffffffffffff8111156126b957600080fd5b6126c58582860161264a565b90969095509350505050565b600080600080608085870312156126e757600080fd5b84356126f281612382565b9350602085013561270281612382565b9250604085013561271281612382565b9396929550929360600135925050565b6000806000806080858703121561273857600080fd5b843561274381612382565b9350602085013561275381612382565b925060408501359150606085013561276a81612382565b939692955090935050565b6000806040838503121561278857600080fd5b823561279381612382565b946020939093013593505050565b600080600080604085870312156127b757600080fd5b843567ffffffffffffffff8111156127ce57600080fd5b6127da8782880161264a565b909550935050602085013567ffffffffffffffff8111156127fa57600080fd5b6128068782880161264a565b95989497509550505050565b60006020828403121561282457600080fd5b81516118d181612382565b60006020828403121561284157600080fd5b81516118d1816124e6565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561287457600080fd5b81356118d1816124e6565b60005b8381101561289a578181015183820152602001612882565b50506000910152565b600081518084526128bb81602086016020860161287f565b601f01601f19169290920160200192915050565b82815260406020820152600061221060408301846128a3565b6000602082840312156128fa57600080fd5b81516001600160e01b0319811681146118d157600080fd5b60006020828403121561292457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115611bfc57611bfc61292b565b81810381811115611bfc57611bfc61292b565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600082516129a581846020870161287f565b9190910192915050565b6020815260006118d160208301846128a356fea264697066735822122015e346482f7eb5529f55d6c4fc0654a81836eb009c29a52350b04f1ad367a6fb64736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_slasher\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"getDeposits\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nonces\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"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\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"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\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWhitelister\",\"inputs\":[{\"name\":\"newStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"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\":\"stakerStrategyShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"\",\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientShares\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEIP1271\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureEOA\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxStrategiesExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThirdPartyTransfersDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", + Bin: "0x61010060405234801561001157600080fd5b50604051612bcf380380612bcf83398101604081905261003091610135565b6001600160a01b0380841660805280831660a052811660c05261005161005d565b50504660e05250610182565b600054610100900460ff16156100c95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101561011b576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461013257600080fd5b50565b60008060006060848603121561014a57600080fd5b83516101558161011d565b60208501519093506101668161011d565b60408501519092506101778161011d565b809150509250925092565b60805160a05160c05160e0516129f86101d760003960006112df0152600061046e0152600061028501526000818161051a01528181610a3901528181610d8801528181610ddd015261169801526129f86000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063c6656702116100ad578063df5cf7231161007c578063df5cf72314610515578063e7a050aa1461053c578063f2fde38b1461054f578063f698da2514610562578063fabc1cbc1461056a57600080fd5b8063c6656702146104c9578063cbc2bd62146104dc578063cf756fdf146104ef578063df5b35471461050257600080fd5b8063b1344271116100e9578063b134427114610469578063b5d8b5b814610490578063c4623ea1146104a3578063c608c7f3146104b657600080fd5b80638da5cb5b1461040157806394f649dd14610412578063967fc0d2146104335780639b4da03d1461044657600080fd5b80635ac86ab71161019d5780637a7e0d921161016c5780637a7e0d92146103675780637ecebe0014610392578063886f1195146103b25780638b8aac3c146103c55780638c80d4e5146103ee57600080fd5b80635ac86ab7146103015780635c975abb14610334578063663c1de41461033c578063715018a61461035f57600080fd5b80634665bcda116101d95780634665bcda1461028057806348825e94146102bf5780634e5a4263146102e6578063595c6a67146102f957600080fd5b806310d67a2f1461020b578063136439dd1461022057806320606b701461023357806332e89ace1461026d575b600080fd5b61021e610219366004612397565b61057d565b005b61021e61022e3660046123b4565b610631565b61025a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6040519081526020015b60405180910390f35b61025a61027b3660046123e3565b61071c565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610264565b61025a7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61021e6102f43660046124f4565b610919565b61021e610952565b61032461030f36600461252d565b609854600160ff9092169190911b9081161490565b6040519015158152602001610264565b60985461025a565b61032461034a366004612397565b60d16020526000908152604090205460ff1681565b61021e610a1a565b61025a610375366004612550565b60cd60209081526000928352604080842090915290825290205481565b61025a6103a0366004612397565b60ca6020526000908152604090205481565b6097546102a7906001600160a01b031681565b61025a6103d3366004612397565b6001600160a01b0316600090815260ce602052604090205490565b61021e6103fc36600461257e565b610a2e565b6033546001600160a01b03166102a7565b610425610420366004612397565b610a88565b6040516102649291906125bf565b60cb546102a7906001600160a01b031681565b610324610454366004612397565b60d36020526000908152604090205460ff1681565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61021e61049e36600461268f565b610c08565b61021e6104b13660046126d1565b610d7d565b61021e6104c4366004612722565b610dd2565b61021e6104d7366004612397565b610e8b565b6102a76104ea366004612775565b610e9c565b61021e6104fd3660046126d1565b610ed4565b61021e6105103660046127a1565b611008565b6102a77f000000000000000000000000000000000000000000000000000000000000000081565b61025a61054a36600461257e565b6111c9565b61021e61055d366004612397565b611265565b61025a6112db565b61021e6105783660046123b4565b611318565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190612812565b6001600160a01b0316336001600160a01b0316146106255760405163794821ff60e01b815260040160405180910390fd5b61062e81611420565b50565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d919061282f565b6106ba57604051631d77d47760e21b815260040160405180910390fd5b609854818116146106de5760405163c61dca5d60e01b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60985460009081906001908116036107475760405163840a48d560e01b815260040160405180910390fd5b60026065540361079e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026065556001600160a01b038816600090815260d3602052604090205460ff16156107dd5760405163dc34227160e01b815260040160405180910390fd5b428410156107fe57604051630819bdcd60e01b815260040160405180910390fd5b6001600160a01b03858116600081815260ca602090815260408083205481517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922493810193909352908201939093528b84166060820152928a16608084015260a0830189905260c0830182905260e0830187905290916101000160408051601f1981840301815291815281516020928301206001600160a01b038a16600090815260ca90935290822060018501905591506108b66112db565b60405161190160f01b60208201526022810191909152604281018390526062016040516020818303038152906040528051906020012090506108f98882886114b0565b610905888c8c8c611599565b60016065559b9a5050505050505050505050565b60cb546001600160a01b0316331461094457604051635c427cd960e01b815260040160405180910390fd5b61094e82826116fd565b5050565b60975460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be919061282f565b6109db57604051631d77d47760e21b815260040160405180910390fd5b600019609881905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b610a2261176b565b610a2c60006117c5565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a7757604051635c427cd960e01b815260040160405180910390fd5b610a82838383611817565b50505050565b6001600160a01b038116600090815260ce60205260408120546060918291908167ffffffffffffffff811115610ac057610ac06123cd565b604051908082528060200260200182016040528015610ae9578160200160208202803683370190505b50905060005b82811015610b7a576001600160a01b038616600090815260cd6020908152604080832060ce9092528220805491929184908110610b2e57610b2e61284c565b60009182526020808320909101546001600160a01b031683528201929092526040019020548251839083908110610b6757610b6761284c565b6020908102919091010152600101610aef565b5060ce6000866001600160a01b03166001600160a01b031681526020019081526020016000208181805480602002602001604051908101604052809291908181526020018280548015610bf657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bd8575b50505050509150935093505050915091565b60cb546001600160a01b03163314610c3357604051635c427cd960e01b815260040160405180910390fd5b8060005b81811015610a825760d16000858584818110610c5557610c5561284c565b9050602002016020810190610c6a9190612397565b6001600160a01b0316815260208101919091526040016000205460ff1615610d7557600060d16000868685818110610ca457610ca461284c565b9050602002016020810190610cb99190612397565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba030848483818110610d1457610d1461284c565b9050602002016020810190610d299190612397565b6040516001600160a01b03909116815260200160405180910390a1610d75848483818110610d5957610d5961284c565b9050602002016020810190610d6e9190612397565b60006116fd565b600101610c37565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610dc657604051635c427cd960e01b815260040160405180910390fd5b610a82848484846118d8565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e1b57604051635c427cd960e01b815260040160405180910390fd5b604051636ce5768960e11b81526001600160a01b03858116600483015282811660248301526044820184905284169063d9caed1290606401600060405180830381600087803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b5050505050505050565b610e9361176b565b61062e81611a5b565b60ce6020528160005260406000208181548110610eb857600080fd5b6000918252602090912001546001600160a01b03169150829050565b600054610100900460ff1615808015610ef45750600054600160ff909116105b80610f0e5750303b158015610f0e575060005460ff166001145b610f715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610795565b6000805460ff191660011790558015610f94576000805461ff0019166101001790555b610f9c611ac4565b60c955610fa98383611b5b565b610fb2856117c5565b610fbb84611a5b565b8015611001576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60cb546001600160a01b0316331461103357604051635c427cd960e01b815260040160405180910390fd5b828114611053576040516343714afd60e01b815260040160405180910390fd5b8260005b818110156111c15760d160008787848181106110755761107561284c565b905060200201602081019061108a9190612397565b6001600160a01b0316815260208101919091526040016000205460ff166111b957600160d160008888858181106110c3576110c361284c565b90506020020160208101906110d89190612397565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8686838181106111335761113361284c565b90506020020160208101906111489190612397565b6040516001600160a01b03909116815260200160405180910390a16111b98686838181106111785761117861284c565b905060200201602081019061118d9190612397565b85858481811061119f5761119f61284c565b90506020020160208101906111b49190612862565b6116fd565b600101611057565b505050505050565b60985460009081906001908116036111f45760405163840a48d560e01b815260040160405180910390fd5b6002606554036112465760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610795565b600260655561125733868686611599565b600160655595945050505050565b61126d61176b565b6001600160a01b0381166112d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b61062e816117c5565b60007f0000000000000000000000000000000000000000000000000000000000000000460361130b575060c95490565b611313611ac4565b905090565b609760009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138f9190612812565b6001600160a01b0316336001600160a01b0316146113c05760405163794821ff60e01b815260040160405180910390fd5b6098541981196098541916146113e95760405163c61dca5d60e01b815260040160405180910390fd5b609881905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610711565b6001600160a01b038116611447576040516339b190bb60e11b815260040160405180910390fd5b609754604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383163b1561155e57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906114f090869086906004016128cf565b602060405180830381865afa15801561150d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153191906128e8565b6001600160e01b031916146115595760405163026aa43360e31b815260040160405180910390fd5b505050565b826001600160a01b03166115728383611bdc565b6001600160a01b031614611559576040516306c653c360e31b815260040160405180910390fd5b6001600160a01b038316600090815260d16020526040812054849060ff166115d457604051632efd965160e11b815260040160405180910390fd5b6115e96001600160a01b038516338786611c02565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303816000875af1158015611638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165c9190612912565b915061166a868587856118d8565b604051631452b9d760e11b81526001600160a01b0387811660048301528681166024830152604482018490527f000000000000000000000000000000000000000000000000000000000000000016906328a573ae90606401600060405180830381600087803b1580156116dc57600080fd5b505af11580156116f0573d6000803e3d6000fd5b5050505050949350505050565b604080516001600160a01b038416815282151560208201527f77d930df4937793473a95024d87a98fd2ccb9e92d3c2463b3dacd65d3e6a5786910160405180910390a16001600160a01b0391909116600090815260d360205260409020805460ff1916911515919091179055565b6033546001600160a01b03163314610a2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610795565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008160000361183a576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b03808516600090815260cd60209081526040808320938716835292905220548083111561188157604051633999656760e01b815260040160405180910390fd5b6001600160a01b03808616600090815260cd60209081526040808320938816835292905290812091849003918290558190036118cb576118c18585611c5c565b60019150506118d1565b60009150505b9392505050565b6001600160a01b0384166118ff576040516316f2ccc960e01b815260040160405180910390fd5b80600003611920576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b03808516600090815260cd6020908152604080832093861683529290529081205490036119c7576001600160a01b038416600090815260ce602090815260409091205410611988576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b03848116600090815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b6001600160a01b03808516600090815260cd60209081526040808320938616835292905290812080548392906119fe908490612941565b9091555050604080516001600160a01b03868116825285811660208301528416818301526060810183905290517f7cfff908a4b583f36430b25d75964c458d8ede8a99bd61be750e97ee1b2f3a969181900360800190a150505050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082018252600a81526922b4b3b2b72630bcb2b960b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea81840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6097546001600160a01b0316158015611b7c57506001600160a01b03821615155b611b99576040516339b190bb60e11b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a261094e82611420565b6000806000611beb8585611de5565b91509150611bf881611e53565b5090505b92915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a82908590612009565b6001600160a01b038216600090815260ce6020526040812054905b81811015611d76576001600160a01b03848116600090815260ce6020526040902080549185169183908110611cae57611cae61284c565b6000918252602090912001546001600160a01b031603611d6e576001600160a01b038416600090815260ce602052604090208054611cee90600190612954565b81548110611cfe57611cfe61284c565b60009182526020808320909101546001600160a01b03878116845260ce9092526040909220805491909216919083908110611d3b57611d3b61284c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611d76565b600101611c77565b818103611d9657604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b038416600090815260ce60205260409020805480611dbd57611dbd612967565b600082815260209020810160001990810180546001600160a01b031916905501905550505050565b6000808251604103611e1b5760208301516040840151606085015160001a611e0f878285856120db565b94509450505050611e4c565b8251604003611e445760208301516040840151611e398683836121c8565b935093505050611e4c565b506000905060025b9250929050565b6000816004811115611e6757611e6761297d565b03611e6f5750565b6001816004811115611e8357611e8361297d565b03611ed05760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610795565b6002816004811115611ee457611ee461297d565b03611f315760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610795565b6003816004811115611f4557611f4561297d565b03611f9d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610795565b6004816004811115611fb157611fb161297d565b0361062e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610795565b600061205e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122019092919063ffffffff16565b805190915015611559578080602001905181019061207c919061282f565b6115595760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610795565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561211257506000905060036121bf565b8460ff16601b1415801561212a57508460ff16601c14155b1561213b57506000905060046121bf565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561218f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166121b8576000600192509250506121bf565b9150600090505b94509492505050565b6000806001600160ff1b038316816121e560ff86901c601b612941565b90506121f3878288856120db565b935093505050935093915050565b60606122108484600085612218565b949350505050565b6060824710156122795760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610795565b6001600160a01b0385163b6122d05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610795565b600080866001600160a01b031685876040516122ec9190612993565b60006040518083038185875af1925050503d8060008114612329576040519150601f19603f3d011682016040523d82523d6000602084013e61232e565b606091505b509150915061233e828286612349565b979650505050505050565b606083156123585750816118d1565b8251156123685782518084602001fd5b8160405162461bcd60e51b815260040161079591906129af565b6001600160a01b038116811461062e57600080fd5b6000602082840312156123a957600080fd5b81356118d181612382565b6000602082840312156123c657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156123fc57600080fd5b863561240781612382565b9550602087013561241781612382565b945060408701359350606087013561242e81612382565b92506080870135915060a087013567ffffffffffffffff81111561245157600080fd5b8701601f8101891361246257600080fd5b803567ffffffffffffffff81111561247c5761247c6123cd565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156124ab576124ab6123cd565b6040528181528282016020018b10156124c357600080fd5b816020840160208301376000602083830101528093505050509295509295509295565b801515811461062e57600080fd5b6000806040838503121561250757600080fd5b823561251281612382565b91506020830135612522816124e6565b809150509250929050565b60006020828403121561253f57600080fd5b813560ff811681146118d157600080fd5b6000806040838503121561256357600080fd5b823561256e81612382565b9150602083013561252281612382565b60008060006060848603121561259357600080fd5b833561259e81612382565b925060208401356125ae81612382565b929592945050506040919091013590565b6040808252835190820181905260009060208501906060840190835b818110156126025783516001600160a01b03168352602093840193909201916001016125db565b50508381036020808601919091528551808352918101925085019060005b8181101561263e578251845260209384019390920191600101612620565b50919695505050505050565b60008083601f84011261265c57600080fd5b50813567ffffffffffffffff81111561267457600080fd5b6020830191508360208260051b8501011115611e4c57600080fd5b600080602083850312156126a257600080fd5b823567ffffffffffffffff8111156126b957600080fd5b6126c58582860161264a565b90969095509350505050565b600080600080608085870312156126e757600080fd5b84356126f281612382565b9350602085013561270281612382565b9250604085013561271281612382565b9396929550929360600135925050565b6000806000806080858703121561273857600080fd5b843561274381612382565b9350602085013561275381612382565b925060408501359150606085013561276a81612382565b939692955090935050565b6000806040838503121561278857600080fd5b823561279381612382565b946020939093013593505050565b600080600080604085870312156127b757600080fd5b843567ffffffffffffffff8111156127ce57600080fd5b6127da8782880161264a565b909550935050602085013567ffffffffffffffff8111156127fa57600080fd5b6128068782880161264a565b95989497509550505050565b60006020828403121561282457600080fd5b81516118d181612382565b60006020828403121561284157600080fd5b81516118d1816124e6565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561287457600080fd5b81356118d1816124e6565b60005b8381101561289a578181015183820152602001612882565b50506000910152565b600081518084526128bb81602086016020860161287f565b601f01601f19169290920160200192915050565b82815260406020820152600061221060408301846128a3565b6000602082840312156128fa57600080fd5b81516001600160e01b0319811681146118d157600080fd5b60006020828403121561292457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115611bfc57611bfc61292b565b81810381811115611bfc57611bfc61292b565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600082516129a581846020870161287f565b9190910192915050565b6020815260006118d160208301846128a356fea264697066735822122009690e25d03334cb4e30699b14b936c3d5a2bd7cb26a95c277eca29b84a6ba8164736f6c634300081b0033", } // StrategyManagerABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var StrategyManagerABI = StrategyManagerMetaData.ABI var StrategyManagerBin = StrategyManagerMetaData.Bin // DeployStrategyManager deploys a new Ethereum contract, binding an instance of StrategyManager to it. -func DeployStrategyManager(auth *bind.TransactOpts, backend bind.ContractBackend, _delegation common.Address, _eigenPodManager common.Address, _slasher common.Address, _avsDirectory common.Address) (common.Address, *types.Transaction, *StrategyManager, error) { +func DeployStrategyManager(auth *bind.TransactOpts, backend bind.ContractBackend, _delegation common.Address, _eigenPodManager common.Address, _slasher common.Address) (common.Address, *types.Transaction, *StrategyManager, error) { parsed, err := StrategyManagerMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployStrategyManager(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(StrategyManagerBin), backend, _delegation, _eigenPodManager, _slasher, _avsDirectory) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StrategyManagerBin), backend, _delegation, _eigenPodManager, _slasher) if err != nil { return common.Address{}, nil, nil, err } @@ -264,37 +264,6 @@ func (_StrategyManager *StrategyManagerCallerSession) DOMAINTYPEHASH() ([32]byte return _StrategyManager.Contract.DOMAINTYPEHASH(&_StrategyManager.CallOpts) } -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_StrategyManager *StrategyManagerCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StrategyManager.contract.Call(opts, &out, "avsDirectory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_StrategyManager *StrategyManagerSession) AvsDirectory() (common.Address, error) { - return _StrategyManager.Contract.AvsDirectory(&_StrategyManager.CallOpts) -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_StrategyManager *StrategyManagerCallerSession) AvsDirectory() (common.Address, error) { - return _StrategyManager.Contract.AvsDirectory(&_StrategyManager.CallOpts) -} - // Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // // Solidity: function delegation() view returns(address) @@ -794,21 +763,21 @@ func (_StrategyManager *StrategyManagerCallerSession) ThirdPartyTransfersForbidd // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() func (_StrategyManager *StrategyManagerTransactor) AddShares(opts *bind.TransactOpts, staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManager.contract.Transact(opts, "addShares", staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() func (_StrategyManager *StrategyManagerSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManager.Contract.AddShares(&_StrategyManager.TransactOpts, staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() func (_StrategyManager *StrategyManagerTransactorSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManager.Contract.AddShares(&_StrategyManager.TransactOpts, staker, token, strategy, shares) } diff --git a/pkg/bindings/StrategyManagerStorage/binding.go b/pkg/bindings/StrategyManagerStorage/binding.go index 3f7efbd2b..4e9b56d9b 100644 --- a/pkg/bindings/StrategyManagerStorage/binding.go +++ b/pkg/bindings/StrategyManagerStorage/binding.go @@ -31,7 +31,7 @@ var ( // StrategyManagerStorageMetaData contains all meta data concerning the StrategyManagerStorage contract. var StrategyManagerStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"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\":\"nonces\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"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\":\"stakerStrategyShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"\",\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"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\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThirdPartyTransfersDisabled\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DOMAIN_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"thirdPartyTransfersForbiddenValues\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"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\":\"shares\",\"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\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"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\":\"nonces\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slasher\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISlasher\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"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\":\"stakerStrategyShares\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"\",\"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\":\"thirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"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\":\"event\",\"name\":\"UpdatedThirdPartyTransfersForbidden\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientShares\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxStrategiesExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThirdPartyTransfersDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", } // StrategyManagerStorageABI is the input ABI used to generate the binding from. @@ -242,37 +242,6 @@ func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) DOMAINTYPEHA return _StrategyManagerStorage.Contract.DOMAINTYPEHASH(&_StrategyManagerStorage.CallOpts) } -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_StrategyManagerStorage *StrategyManagerStorageCaller) AvsDirectory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StrategyManagerStorage.contract.Call(opts, &out, "avsDirectory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_StrategyManagerStorage *StrategyManagerStorageSession) AvsDirectory() (common.Address, error) { - return _StrategyManagerStorage.Contract.AvsDirectory(&_StrategyManagerStorage.CallOpts) -} - -// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e. -// -// Solidity: function avsDirectory() view returns(address) -func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) AvsDirectory() (common.Address, error) { - return _StrategyManagerStorage.Contract.AvsDirectory(&_StrategyManagerStorage.CallOpts) -} - // Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // // Solidity: function delegation() view returns(address) @@ -617,21 +586,21 @@ func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) ThirdPartyTr // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() func (_StrategyManagerStorage *StrategyManagerStorageTransactor) AddShares(opts *bind.TransactOpts, staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManagerStorage.contract.Transact(opts, "addShares", staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() func (_StrategyManagerStorage *StrategyManagerStorageSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManagerStorage.Contract.AddShares(&_StrategyManagerStorage.TransactOpts, staker, token, strategy, shares) } // AddShares is a paid mutator transaction binding the contract method 0xc4623ea1. // -// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns(uint256 existingShares) +// Solidity: function addShares(address staker, address token, address strategy, uint256 shares) returns() func (_StrategyManagerStorage *StrategyManagerStorageTransactorSession) AddShares(staker common.Address, token common.Address, strategy common.Address, shares *big.Int) (*types.Transaction, error) { return _StrategyManagerStorage.Contract.AddShares(&_StrategyManagerStorage.TransactOpts, staker, token, strategy, shares) } From 55ae3e3923a20ab4bf890f16b569d855721179f1 Mon Sep 17 00:00:00 2001 From: Gautham Anant <32277907+gpsanant@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:30:24 -0700 Subject: [PATCH 45/47] add share lib (#777) * add share lib * feat: share lib cleanup (#778) * refactor: review changes * chore: forge fmt src/contracts * refactor: more explicit share names * rename share * fmt --------- Co-authored-by: gpsanant * remove unused * remove unused --------- Co-authored-by: clandestine.eth <96172957+0xClandestine@users.noreply.github.com> --- src/contracts/core/AllocationManager.sol | 19 +- src/contracts/core/DelegationManager.sol | 245 +++++++----------- .../core/DelegationManagerStorage.sol | 12 +- src/contracts/core/StrategyManager.sol | 4 +- .../interfaces/IDelegationManager.sol | 19 +- src/contracts/interfaces/IEigenPodManager.sol | 2 +- src/contracts/interfaces/IShareManager.sol | 2 +- src/contracts/libraries/SlashingConstants.sol | 11 - src/contracts/libraries/SlashingLib.sol | 95 +++++++ src/contracts/pods/EigenPodManager.sol | 24 +- src/test/mocks/DelegationManagerMock.sol | 3 + src/test/mocks/EigenPodManagerMock.sol | 8 + src/test/mocks/StrategyManagerMock.sol | 4 + 13 files changed, 245 insertions(+), 203 deletions(-) delete mode 100644 src/contracts/libraries/SlashingConstants.sol create mode 100644 src/contracts/libraries/SlashingLib.sol diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index 25c72470f..5014f0fc0 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -7,7 +7,7 @@ import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol import "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; -import "../libraries/SlashingConstants.sol"; +import "../libraries/SlashingLib.sol"; import "./AllocationManagerStorage.sol"; contract AllocationManager is @@ -427,9 +427,9 @@ contract AllocationManager is function _getLatestTotalMagnitude(address operator, IStrategy strategy) internal returns (uint64) { (bool exists,, uint224 totalMagnitude) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); if (!exists) { - totalMagnitude = PRECISION_FACTOR; + totalMagnitude = WAD; _totalMagnitudeUpdate[operator][strategy].push({key: uint32(block.timestamp), value: totalMagnitude}); - operatorMagnitudeInfo[operator][strategy].freeMagnitude = PRECISION_FACTOR; + operatorMagnitudeInfo[operator][strategy].freeMagnitude = WAD; } return uint64(totalMagnitude); @@ -623,7 +623,7 @@ contract AllocationManager is for (uint256 i = 0; i < strategies.length; ++i) { (bool exists,, uint224 value) = _totalMagnitudeUpdate[operator][strategies[i]].latestSnapshot(); if (!exists) { - totalMagnitudes[i] = PRECISION_FACTOR; + totalMagnitudes[i] = WAD; } else { totalMagnitudes[i] = uint64(value); } @@ -645,11 +645,10 @@ contract AllocationManager is ) external view returns (uint64[] memory) { uint64[] memory totalMagnitudes = new uint64[](strategies.length); for (uint256 i = 0; i < strategies.length; ++i) { - (uint224 value, uint256 pos) = - _totalMagnitudeUpdate[operator][strategies[i]].upperLookupWithPos(timestamp); + (uint224 value, uint256 pos) = _totalMagnitudeUpdate[operator][strategies[i]].upperLookupWithPos(timestamp); // if there is no existing total magnitude snapshot if (value == 0 && pos == 0) { - totalMagnitudes[i] = PRECISION_FACTOR; + totalMagnitudes[i] = WAD; } else { totalMagnitudes[i] = uint64(value); } @@ -667,7 +666,7 @@ contract AllocationManager is uint64 totalMagnitude; (bool exists,, uint224 value) = _totalMagnitudeUpdate[operator][strategy].latestSnapshot(); if (!exists) { - totalMagnitude = PRECISION_FACTOR; + totalMagnitude = WAD; } else { totalMagnitude = uint64(value); } @@ -687,12 +686,12 @@ contract AllocationManager is IStrategy strategy, uint32 timestamp ) external view returns (uint64) { - uint64 totalMagnitude = PRECISION_FACTOR; + uint64 totalMagnitude = WAD; (uint224 value, uint256 pos,) = _totalMagnitudeUpdate[operator][strategy].upperLookupRecentWithPos(timestamp); // if there is no existing total magnitude snapshot if (value == 0 && pos == 0) { - totalMagnitude = PRECISION_FACTOR; + totalMagnitude = WAD; } else { totalMagnitude = uint64(value); } diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index f93180dfd..53f7a9740 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -6,7 +6,7 @@ import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol"; import "../permissions/Pausable.sol"; import "../libraries/EIP1271SignatureUtils.sol"; -import "../libraries/SlashingConstants.sol"; +import "../libraries/SlashingLib.sol"; import "./DelegationManagerStorage.sol"; /** @@ -26,6 +26,8 @@ contract DelegationManager is DelegationManagerStorage, ReentrancyGuardUpgradeable { + using SlashingLib for *; + // @dev Index for flag that pauses new delegations when set uint8 internal constant PAUSED_NEW_DELEGATION = 0; @@ -243,7 +245,7 @@ contract DelegationManager is CallerCannotUndelegate() ); - // Gather strategies and shares from the staker. Calculate stakeShares to remove from operator during undelegation + // Gather strategies and shares from the staker. Calculate delegatedShares to remove from operator during undelegation // Undelegation removes ALL currently-active strategies and shares (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableShares(staker); @@ -281,7 +283,7 @@ contract DelegationManager is // all shares and queued withdrawn and no delegated operator // reset staker's depositScalingFactor to default - depositScalingFactors[staker][strategies[i]] = PRECISION_FACTOR; + depositScalingFactors[staker][strategies[i]] = WAD; } } @@ -364,21 +366,21 @@ contract DelegationManager is /** * @notice Increases a staker's delegated share balance in a strategy. Note that before adding to operator shares, - * the delegated stakeShares. The staker's depositScalingFactor is updated here. + * the delegated delegatedShares. The staker's depositScalingFactor is updated here. * @param staker The address to increase the delegated shares for their operator. * @param strategy The strategy in which to increase the delegated shares. - * @param existingDepositShares The number of deposit shares the staker already has in the strategy. This is the shares amount stored in the + * @param existingPrincipalShares The number of deposit shares the staker already has in the strategy. This is the shares amount stored in the * StrategyManager/EigenPodManager for the staker's shares. * @param addedShares The number of shares to added to the staker's shares in the strategy * - * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated stakeShares in `strategy`. + * @dev *If the staker is actively delegated*, then increases the `staker`'s delegated delegatedShares in `strategy`. * Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ function increaseDelegatedShares( address staker, IStrategy strategy, - uint256 existingDepositShares, + uint256 existingPrincipalShares, uint256 addedShares ) external onlyStrategyManagerOrEigenPodManager { // if the staker is delegated to an operator @@ -387,12 +389,12 @@ contract DelegationManager is uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategy); // add deposit shares to operator's stake shares and update the staker's depositScalingFactor - _increaseOperatorStakeSharesAndScalingFactor({ - operator: operator, - staker: staker, + _increaseDelegation({ + operator: operator, + staker: staker, strategy: strategy, - existingDepositShares: existingDepositShares, - addedShares: addedShares, + existingPrincipalShares: PrincipalShares.wrap(existingPrincipalShares), + addedShares: Shares.wrap(addedShares), totalMagnitude: totalMagnitude }); } @@ -400,13 +402,13 @@ contract DelegationManager is // IGNORE THIS FUNCTION /** - * @notice Decreases a staker's delegated stakeShares for a strategy. + * @notice Decreases a staker's delegated delegatedShares for a strategy. * @param staker The address to increase the delegated scaled shares for their operator. * @param strategy The strategy in which to decrease the delegated scaled shares. * @param removedShares The number of shares to decremented for the strategy in the * StrategyManager/EigenPodManager * - * @dev *If the staker is actively delegated*, then decreases the `staker`'s delegated stakeShares in `strategy` by `scaledShares`. Otherwise does nothing. + * @dev *If the staker is actively delegated*, then decreases the `staker`'s delegated delegatedShares in `strategy` by `scaledShares`. Otherwise does nothing. * @dev Callable only by the StrategyManager or EigenPodManager. */ function decreaseDelegatedShares( @@ -503,19 +505,19 @@ contract DelegationManager is delegatedTo[staker] = operator; emit StakerDelegated(staker, operator); - // read staker's delegatable shares and strategies to add to operator's stakeShares + // read staker's delegatable shares and strategies to add to operator's delegatedShares // and also update the staker depositScalingFactor for each strategy (IStrategy[] memory strategies, uint256[] memory shares) = getDelegatableShares(staker); uint64[] memory totalMagnitudes = allocationManager.getTotalMagnitudes(operator, strategies); for (uint256 i = 0; i < strategies.length; ++i) { // forgefmt: disable-next-item - _increaseOperatorStakeSharesAndScalingFactor({ + _increaseDelegation({ operator: operator, staker: staker, strategy: strategies[i], - existingDepositShares: 0, - addedShares: shares[i], + existingPrincipalShares: PrincipalShares.wrap(0), + addedShares: Shares.wrap(shares[i]), totalMagnitude: totalMagnitudes[i] }); } @@ -524,10 +526,10 @@ contract DelegationManager is /** * @dev This function completes a queued withdrawal for a staker. * This will apply any slashing that has occurred since the the withdrawal was queued. By multiplying the withdrawl's - * stakeShares by the operator's total magnitude for each strategy + * delegatedShares by the operator's total magnitude for each strategy * If receiveAsTokens is true, then these shares will be withdrawn as tokens. * If receiveAsTokens is false, then they will be redeposited according to the current operator the staker is delegated to, - * and added back to the operator's stakeShares. + * and added back to the operator's delegatedShares. */ function _completeQueuedWithdrawal( Withdrawal calldata withdrawal, @@ -541,7 +543,7 @@ contract DelegationManager is // TODO: is there a cleaner way to do this? uint32 completableTimestamp = _checkCompletability(withdrawal.startTimestamp); - // read delegated operator's totalMagnitudes at time of withdrawal to convert the stakeShares to shared + // read delegated operator's totalMagnitudes at time of withdrawal to convert the delegatedShares to shared // factoring in slashing that occured during withdrawal delay uint64[] memory totalMagnitudes = allocationManager.getTotalMagnitudesAtTimestamp({ operator: withdrawal.delegatedTo, @@ -551,7 +553,7 @@ contract DelegationManager is for (uint256 i = 0; i < withdrawal.strategies.length; i++) { IShareManager shareManager = _getShareManager(withdrawal.strategies[i]); - uint256 sharesToWithdraw = _convertStakeSharesToShares(withdrawal.stakeShares[i], totalMagnitudes[i]); + uint256 sharesToWithdraw = Shares.unwrap(withdrawal.delegatedShares[i].toShares(totalMagnitudes[i])); if (receiveAsTokens) { // Withdraws `shares` in `strategy` to `withdrawer`. If the shares are virtual beaconChainETH shares, // then a call is ultimately forwarded to the `staker`s EigenPod; otherwise a call is ultimately forwarded @@ -574,59 +576,56 @@ contract DelegationManager is } /** - * @notice Increases `operator`s delegated stakeShares in `strategy` based on staker's added shares and operator's totalMagnitude + * @notice Increases `operator`s delegated delegatedShares in `strategy` based on staker's added shares and operator's totalMagnitude * and increases the staker's depositScalingFactor for the strategy. - * @param operator The operator to increase the delegated stakeShares for + * @param operator The operator to increase the delegated delegatedShares for * @param staker The staker to increase the depositScalingFactor for - * @param strategy The strategy to increase the delegated stakeShares and the depositScalingFactor for - * @param existingDepositShares The number of deposit shares the staker already has in the strategy. + * @param strategy The strategy to increase the delegated delegatedShares and the depositScalingFactor for + * @param existingPrincipalShares The number of deposit shares the staker already has in the strategy. * @param addedShares The shares added to the staker in the StrategyManager/EigenPodManager * @param totalMagnitude The current total magnitude of the operator for the strategy */ - function _increaseOperatorStakeSharesAndScalingFactor( + function _increaseDelegation( address operator, address staker, IStrategy strategy, - uint256 existingDepositShares, - uint256 addedShares, + PrincipalShares existingPrincipalShares, + Shares addedShares, uint64 totalMagnitude ) internal { _updateDepositScalingFactor({ - staker: staker, - strategy: strategy, - existingDepositShares: existingDepositShares, + staker: staker, + strategy: strategy, + existingPrincipalShares: existingPrincipalShares, addedShares: addedShares, totalMagnitude: totalMagnitude }); - // based on total magnitude, update operators stakeShares - uint256 stakeShares = _convertSharesToStakeShares(addedShares, totalMagnitude); - operatorStakeShares[operator][strategy] += stakeShares; + // based on total magnitude, update operators delegatedShares + uint256 delegatedShares = DelegatedShares.unwrap(addedShares.toDelegatedShares(totalMagnitude)); + operatorDelegatedShares[operator][strategy] += delegatedShares; // TODO: What to do about event wrt scaling? - emit OperatorSharesIncreased(operator, staker, strategy, stakeShares); + emit OperatorSharesIncreased(operator, staker, strategy, delegatedShares); } /** - * @notice Decreases `operator`s delegated stakeShares in `strategy` based on staker's removed shares and operator's totalMagnitude + * @notice Decreases `operator`s delegated delegatedShares in `strategy` based on staker's removed shares and operator's totalMagnitude * @param operator The operator to decrease the delegated delegated shares for * @param staker The staker to decrease the delegated delegated shares for * @param strategy The strategy to decrease the delegated delegated shares for - * @param shares The shares removed from the staker in the StrategyManager/EigenPodManager - * @param totalMagnitude The current total magnitude of the operator for the strategy + * @param delegatedShares The delegatedShares to remove from the operator's delegated shares */ - function _decreaseOperatorStakeShares( + function _decreaseDelegation( address operator, address staker, IStrategy strategy, - uint256 shares, - uint64 totalMagnitude + uint256 delegatedShares ) internal { - // based on total magnitude, decrement operator's stakeShares - uint256 stakeShares = _convertSharesToStakeShares(shares, totalMagnitude); - operatorStakeShares[operator][strategy] -= stakeShares; + // based on total magnitude, decrement operator's delegatedShares + operatorDelegatedShares[operator][strategy] -= delegatedShares; // TODO: What to do about event wrt scaling? - emit OperatorSharesDecreased(operator, staker, strategy, stakeShares); + emit OperatorSharesDecreased(operator, staker, strategy, delegatedShares); } /** @@ -644,41 +643,40 @@ contract DelegationManager is require(staker != address(0), InputAddressZero()); require(strategies.length != 0, InputArrayLengthZero()); - uint256[] memory stakeSharesToWithdraw = new uint256[](strategies.length); + DelegatedShares[] memory delegatedSharesToWithdraw = new DelegatedShares[](strategies.length); // Remove shares from staker and operator // Each of these operations fail if we attempt to remove more shares than exist for (uint256 i = 0; i < strategies.length; ++i) { IShareManager shareManager = _getShareManager(strategies[i]); + // delegatedShares for staker to place into queueWithdrawal + delegatedSharesToWithdraw[i] = Shares.wrap(sharesToWithdraw[i]).toDelegatedShares(totalMagnitudes[i]); + uint256 principalSharesToWithdraw = PrincipalShares.unwrap( + delegatedSharesToWithdraw[i].toPrincipalShares(depositScalingFactors[staker][strategies[i]]) + ); + // TODO: maybe have a getter to get shares for all strategies, like getDelegatableShares // check sharesToWithdraw is valid // but for inputted strategies - uint256 depositShares = shareManager.stakerStrategyShares(staker, strategies[i]); - uint256 depositSharesToWithdraw = _convertSharesToDepositShares(staker, strategies[i], sharesToWithdraw[i], totalMagnitudes[i]); - require( - depositSharesToWithdraw <= depositShares, - WithdrawalExeedsMax() - ); - // stakeShares for staker to place into queueWithdrawal - stakeSharesToWithdraw[i] = _convertSharesToStakeShares(sharesToWithdraw[i], totalMagnitudes[i]); + uint256 principalSharesWithdrawable = shareManager.stakerStrategyShares(staker, strategies[i]); + require(principalSharesToWithdraw <= principalSharesWithdrawable, WithdrawalExeedsMax()); // Similar to `isDelegated` logic if (operator != address(0)) { // forgefmt: disable-next-item - _decreaseOperatorStakeShares({ + _decreaseDelegation({ operator: operator, staker: staker, strategy: strategies[i], - shares: sharesToWithdraw[i], - totalMagnitude: totalMagnitudes[i] + delegatedShares: DelegatedShares.unwrap(delegatedSharesToWithdraw[i]) }); } // Remove active shares from EigenPodManager/StrategyManager // EigenPodManager: this call will revert if it would reduce the Staker's virtual beacon chain ETH shares below zero - // StrategyManager: this call will revert if `depositSharesToDecrement` exceeds the Staker's current deposit shares in `strategies[i]` - shareManager.removeShares(staker, strategies[i], depositSharesToWithdraw); + // StrategyManager: this call will revert if `principalSharesToDecrement` exceeds the Staker's current deposit shares in `strategies[i]` + shareManager.removeShares(staker, strategies[i], principalSharesToWithdraw); } // Create queue entry and increment withdrawal nonce @@ -692,7 +690,7 @@ contract DelegationManager is nonce: nonce, startTimestamp: uint32(block.timestamp), strategies: strategies, - stakeShares: stakeSharesToWithdraw + delegatedShares: delegatedSharesToWithdraw }); bytes32 withdrawalRoot = calculateWithdrawalRoot(withdrawal); @@ -709,13 +707,10 @@ contract DelegationManager is uint32 startTimestamp ) internal view returns (uint32 completableTimestamp) { if (startTimestamp < LEGACY_WITHDRAWALS_TIMESTAMP) { - // this is a legacy M2 withdrawal using blocknumbers. + // this is a legacy M2 withdrawal using blocknumbers. // It would take up to 600+ years for the blocknumber to reach the LEGACY_WITHDRAWALS_TIMESTAMP, so this is a safe check. - require( - startTimestamp + LEGACY_MIN_WITHDRAWAL_DELAY_BLOCKS <= block.number, - WithdrawalDelayNotElapsed() - ); - // sourcing the magnitudes from time=0, will always give us PRECISION_FACTOR, which doesn't factor in slashing + require(startTimestamp + LEGACY_MIN_WITHDRAWAL_DELAY_BLOCKS <= block.number, WithdrawalDelayNotElapsed()); + // sourcing the magnitudes from time=0, will always give us WAD, which doesn't factor in slashing completableTimestamp = 0; } else { // this is a post Slashing release withdrawal using timestamps @@ -728,51 +723,9 @@ contract DelegationManager is /** * * SHARES CONVERSION FUNCTIONS - * - * There are 3 types of shares: - * 1. shares - * - These can be converted to an amount of tokens given a strategy - * - by calling `sharesToUnderlying` on the strategy address (they're already tokens - * in the case of EigenPods) - * - These are comparable between operators and stakers. - * - These live in the storage of StrategyManager strategies: - * - `totalShares` is the total amount of shares delegated to a strategy - * 2. stakeShares - * - These can be converted to shares given an operator and a strategy - * - by multiplying by the operator's totalMagnitude for the strategy - * - These values automatically update their conversion into tokens - * - when the operator's total magnitude for the strategy is decreased upon slashing - * - These live in the storage of the DelegationManager: - * - `stakeShares` is the total amount of stakeShares delegated to an operator for a strategy - * - `withdrawal.stakeShares` is the amount of stakeShares in a withdrawal - * 3. depositShares - * - These can be converted into stakeShares given a staker and a strategy - * - by multiplying by the staker's depositScalingFactor for the strategy - * - These values automatically update their conversion into tokens - * - when the staker's depositScalingFactor for the strategy is increased upon new deposits - * - or when the staker's operator's total magnitude for the strategy is decreased upon slashing - * - These represent the total amount of shares the staker would have of a strategy if they were never slashed - * - These live in the storage of the StrategyManager/EigenPodManager - * - `stakerStrategyShares` in the SM is the staker's depositShares that have not been queued for withdrawal in a strategy - * - `podOwnerShares` in the EPM is the staker's depositShares that have not been queued for withdrawal in the beaconChainETHStrategy + * */ - function _convertSharesToStakeShares(uint256 shares, uint64 totalMagnitude) internal pure returns (uint256) { - return shares * PRECISION_FACTOR / totalMagnitude; - } - - function _convertStakeSharesToShares(uint256 stakeShares, uint64 totalMagnitude) internal pure returns (uint256) { - return stakeShares * totalMagnitude / PRECISION_FACTOR; - } - - function _convertSharesToDepositShares(address staker, IStrategy strategy, uint256 shares, uint64 totalMagnitude) internal view returns (uint256) { - return shares * PRECISION_FACTOR / _getDepositScalingFactor(staker, strategy) * PRECISION_FACTOR / totalMagnitude; - } - - function _convertDepositSharesToShares(address staker, IStrategy strategy, uint256 depositShares, uint64 totalMagnitude) internal view returns (uint256) { - return depositShares * _getDepositScalingFactor(staker, strategy) / PRECISION_FACTOR * totalMagnitude / PRECISION_FACTOR; - } - /** * @notice helper to calculate the new depositScalingFactor after adding shares. This is only used * when a staker is depositing through the StrategyManager or EigenPodManager. A staker's depositScalingFactor @@ -782,60 +735,51 @@ contract DelegationManager is address staker, IStrategy strategy, uint64 totalMagnitude, - uint256 existingDepositShares, - uint256 addedShares + PrincipalShares existingPrincipalShares, + Shares addedShares ) internal returns (uint256) { uint256 newDepositScalingFactor; - if (existingDepositShares == 0) { + if (PrincipalShares.unwrap(existingPrincipalShares) == 0) { // existing shares are 0, meaning no existing delegated shares. In this case, the new depositScalingFactor // is re-initialized to - newDepositScalingFactor = PRECISION_FACTOR / totalMagnitude; + newDepositScalingFactor = WAD / totalMagnitude; } else { // TODO: OVERFLOWS: switch to muldiv everywhere - // since - // + // since + // // newShares // = existingShares + addedShares - // = _convertDepositSharesToShares(staker, strategy, existingDepositShares, totalMagnitude) + addedShares - // + // = _convertPrincipalSharesToShares(staker, strategy, existingPrincipalShares, totalMagnitude) + addedShares + // // and it also is - // + // // newShares - // = _convertDepositSharesToShares(staker, strategy, newDepositShares, totalMagnitude) - // = newDepositShares * newDepositScalingFactor / PRECISION_FACTOR * totalMagnitude / PRECISION_FACTOR - // = (existingDepositShares + addedShares) * newDepositScalingFactor / PRECISION_FACTOR * totalMagnitude / PRECISION_FACTOR - // - // we can solve for + // = _convertPrincipalSharesToShares(staker, strategy, newPrincipalShares, totalMagnitude) + // = newPrincipalShares * newDepositScalingFactor / WAD * totalMagnitude / WAD + // = (existingPrincipalShares + addedShares) * newDepositScalingFactor / WAD * totalMagnitude / WAD + // + // we can solve for // - newDepositScalingFactor = - ( - _convertDepositSharesToShares(staker, strategy, existingDepositShares, totalMagnitude) - + addedShares - ) - * PRECISION_FACTOR - / (existingDepositShares + addedShares) - * PRECISION_FACTOR - / totalMagnitude; + uint256 existingShares = Shares.unwrap( + existingPrincipalShares.toDelegatedShares(depositScalingFactors[staker][strategy]).toShares( + totalMagnitude + ) + ); + newDepositScalingFactor = (existingShares + Shares.unwrap(addedShares)) * WAD + / (PrincipalShares.unwrap(existingPrincipalShares) + Shares.unwrap(addedShares)) * WAD / totalMagnitude; } // update the staker's depositScalingFactor depositScalingFactors[staker][strategy] = newDepositScalingFactor; } - /** - * @notice depositScalingFactor should be initialized and lower bounded to 1e18 - */ - function _getDepositScalingFactor(address staker, IStrategy strategy) internal view returns (uint256) { - uint256 currDepositScalingFactor = depositScalingFactors[staker][strategy]; - if (currDepositScalingFactor == 0) { - currDepositScalingFactor = PRECISION_FACTOR; - } - return currDepositScalingFactor; - } - - function _getShareManager(IStrategy strategy) internal view returns (IShareManager) { - return strategy == beaconChainETHStrategy ? IShareManager(address(eigenPodManager)) : IShareManager(address(strategyManager)); + function _getShareManager( + IStrategy strategy + ) internal view returns (IShareManager) { + return strategy == beaconChainETHStrategy + ? IShareManager(address(eigenPodManager)) + : IShareManager(address(strategyManager)); } /** @@ -907,11 +851,11 @@ contract DelegationManager is /// @notice a legacy function that returns the total delegated shares for an operator and strategy function operatorShares(address operator, IStrategy strategy) public view returns (uint256) { uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategy); - return _convertStakeSharesToShares(operatorStakeShares[operator][strategy], totalMagnitude); + return Shares.unwrap(DelegatedShares.wrap(operatorDelegatedShares[operator][strategy]).toShares(totalMagnitude)); } /** - * @notice Given a staker and a set of strategies, return the shares they can queue for withdrawal. + * @notice Given a staker and a set of strategies, return the shares they can queue for withdrawal. * This value depends on which operator the staker is delegated to. * The shares amount returned is the actual amount of Strategy shares the staker would receive (subject * to each strategy's underlying shares to token ratio). @@ -931,7 +875,10 @@ contract DelegationManager is // in the StrategyManager/EigenPodManager because they could have been slashed if (operator != address(0)) { uint64 totalMagnitude = allocationManager.getTotalMagnitude(operator, strategies[i]); - shares[i] = _convertDepositSharesToShares(staker, strategies[i], shares[i], totalMagnitude); + shares[i] = Shares.unwrap( + PrincipalShares.wrap(shares[i]).toDelegatedShares(depositScalingFactors[staker][strategies[i]]) + .toShares(totalMagnitude) + ); } } return shares; diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/DelegationManagerStorage.sol index e2564c806..5281df8f0 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/DelegationManagerStorage.sol @@ -40,7 +40,7 @@ abstract contract DelegationManagerStorage is IDelegationManager { /// @notice The AVSDirectory contract for EigenLayer IAVSDirectory public immutable avsDirectory; - + // TODO: Switch these to ShareManagers, but this breaks a lot of tests /// @notice The StrategyManager contract for EigenLayer @@ -56,15 +56,15 @@ abstract contract DelegationManagerStorage is IDelegationManager { IAllocationManager public immutable allocationManager; /** - * @notice returns the total number of stakeShares (i.e. shares divided by the `operator`'s + * @notice returns the total number of delegatedShares (i.e. shares divided by the `operator`'s * totalMagnitude) in `strategy` that are delegated to `operator`. - * @notice Mapping: operator => strategy => total number of stakeShares in the strategy delegated to the operator. + * @notice Mapping: operator => strategy => total number of delegatedShares in the strategy delegated to the operator. * @dev By design, the following invariant should hold for each Strategy: - * (operator's stakeShares in delegation manager) = sum (stakeShares above zero of all stakers delegated to operator) - * = sum (delegateable stakeShares of all stakers delegated to the operator) + * (operator's delegatedShares in delegation manager) = sum (delegatedShares above zero of all stakers delegated to operator) + * = sum (delegateable delegatedShares of all stakers delegated to the operator) * @dev FKA `operatorShares` */ - mapping(address => mapping(IStrategy => uint256)) public operatorStakeShares; + mapping(address => mapping(IStrategy => uint256)) public operatorDelegatedShares; /** * @notice Mapping: operator => OperatorDetails struct diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index 104c65419..a50cda0c6 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -253,14 +253,14 @@ contract StrategyManager is } // add the returned shares to their existing shares for this strategy - uint256 existingDepositShares = stakerStrategyShares[staker][strategy]; + uint256 existingPrincipalShares = stakerStrategyShares[staker][strategy]; stakerStrategyShares[staker][strategy] += shares; // Increase shares delegated to operator, if needed delegation.increaseDelegatedShares({ staker: staker, strategy: strategy, - existingDepositShares: existingDepositShares, + existingPrincipalShares: existingPrincipalShares, addedShares: shares }); diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index da47c10c6..a46fb79e8 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -3,6 +3,7 @@ pragma solidity >=0.5.0; import "./IStrategy.sol"; import "./ISignatureUtils.sol"; +import "../libraries/SlashingLib.sol"; /** * @title DelegationManager @@ -128,10 +129,10 @@ interface IDelegationManager is ISignatureUtils { uint32 startTimestamp; // Array of strategies that the Withdrawal contains IStrategy[] strategies; - // Array containing the amount of staker's stakeShares for withdrawal in each Strategy in the `strategies` array + // Array containing the amount of staker's delegatedShares for withdrawal in each Strategy in the `strategies` array // Note that these shares need to be multiplied by the operator's totalMagnitude at completion to include // slashing occurring during the queue withdrawal delay - uint256[] stakeShares; + DelegatedShares[] delegatedShares; } struct QueuedWithdrawalParams { @@ -320,7 +321,7 @@ interface IDelegationManager is ISignatureUtils { * The staker's depositScalingFactor is updated here. * @param staker The address to increase the delegated shares for their operator. * @param strategy The strategy in which to increase the delegated shares. - * @param existingDepositShares The number of deposit shares the staker already has in the strategy. This is the shares amount stored in the + * @param existingPrincipalShares The number of deposit shares the staker already has in the strategy. This is the shares amount stored in the * StrategyManager/EigenPodManager for the staker's shares. * @param addedShares The number of shares to added to the staker's shares in the strategy. This amount will be scaled prior to adding * to the operator's scaled shares. @@ -332,7 +333,7 @@ interface IDelegationManager is ISignatureUtils { function increaseDelegatedShares( address staker, IStrategy strategy, - uint256 existingDepositShares, + uint256 existingPrincipalShares, uint256 addedShares ) external; @@ -381,15 +382,15 @@ interface IDelegationManager is ISignatureUtils { ) external view returns (uint256); /** - * @notice returns the total number of stakeShares (i.e. shares divided by the `operator`'s + * @notice returns the total number of delegatedShares (i.e. shares divided by the `operator`'s * totalMagnitude) in `strategy` that are delegated to `operator`. - * @notice Mapping: operator => strategy => total number of stakeShares in the strategy delegated to the operator. + * @notice Mapping: operator => strategy => total number of delegatedShares in the strategy delegated to the operator. * @dev By design, the following invariant should hold for each Strategy: - * (operator's stakeShares in delegation manager) = sum (stakeShares above zero of all stakers delegated to operator) - * = sum (delegateable stakeShares of all stakers delegated to the operator) + * (operator's delegatedShares in delegation manager) = sum (delegatedShares above zero of all stakers delegated to operator) + * = sum (delegateable delegatedShares of all stakers delegated to the operator) * @dev FKA `operatorShares` */ - function operatorStakeShares(address operator, IStrategy strategy) external view returns (uint256); + function operatorDelegatedShares(address operator, IStrategy strategy) external view returns (uint256); /** * @notice Returns 'true' if `staker` *is* actively delegated, and 'false' otherwise. diff --git a/src/contracts/interfaces/IEigenPodManager.sol b/src/contracts/interfaces/IEigenPodManager.sol index 169618fef..2ace138eb 100644 --- a/src/contracts/interfaces/IEigenPodManager.sol +++ b/src/contracts/interfaces/IEigenPodManager.sol @@ -121,4 +121,4 @@ interface IEigenPodManager is IShareManager, IPausable { /// @notice returns canonical, virtual beaconChainETH strategy function beaconChainETHStrategy() external view returns (IStrategy); -} \ No newline at end of file +} diff --git a/src/contracts/interfaces/IShareManager.sol b/src/contracts/interfaces/IShareManager.sol index c22de3877..2bccc2e7b 100644 --- a/src/contracts/interfaces/IShareManager.sol +++ b/src/contracts/interfaces/IShareManager.sol @@ -29,4 +29,4 @@ interface IShareManager { /// @dev strategy must be beaconChainETH when talking to the EigenPodManager /// @dev returns 0 if the user has negative shares function stakerStrategyShares(address user, IStrategy strategy) external view returns (uint256 shares); -} \ No newline at end of file +} diff --git a/src/contracts/libraries/SlashingConstants.sol b/src/contracts/libraries/SlashingConstants.sol deleted file mode 100644 index 4ccc5854e..000000000 --- a/src/contracts/libraries/SlashingConstants.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -/// @dev the stakerScalingFactor and totalMagnitude have initial default values to 1e18 as "1" -/// to preserve precision with uint256 math. We use `PRECISION_FACTOR` where these variables are used -/// and divide to represent as 1 -uint64 constant PRECISION_FACTOR = 1e18; - -/// @dev Delay before deallocations are completable and can be added back into freeMagnitude -/// This is also the same delay for withdrawals to be completable -uint32 constant DEALLOCATION_DELAY = 17.5 days; diff --git a/src/contracts/libraries/SlashingLib.sol b/src/contracts/libraries/SlashingLib.sol new file mode 100644 index 000000000..783f01f11 --- /dev/null +++ b/src/contracts/libraries/SlashingLib.sol @@ -0,0 +1,95 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "@openzeppelin/contracts/utils/math/Math.sol"; + +/// @dev the stakerScalingFactor and totalMagnitude have initial default values to 1e18 as "1" +/// to preserve precision with uint256 math. We use `WAD` where these variables are used +/// and divide to represent as 1 +uint64 constant WAD = 1e18; + +/// @dev Delay before deallocations are completable and can be added back into freeMagnitude +/// This is also the same delay for withdrawals to be completable +uint32 constant DEALLOCATION_DELAY = 17.5 days; + +/* + * There are 3 types of shares: + * 1. shares + * - These can be converted to an amount of tokens given a strategy + * - by calling `sharesToUnderlying` on the strategy address (they're already tokens + * in the case of EigenPods) + * - These are comparable between operators and stakers. + * - These live in the storage of StrategyManager strategies: + * - `totalShares` is the total amount of shares delegated to a strategy + * 2. delegatedShares + * - These can be converted to shares given an operator and a strategy + * - by multiplying by the operator's totalMagnitude for the strategy + * - These values automatically update their conversion into tokens + * - when the operator's total magnitude for the strategy is decreased upon slashing + * - These live in the storage of the DelegationManager: + * - `delegatedShares` is the total amount of delegatedShares delegated to an operator for a strategy + * - `withdrawal.delegatedShares` is the amount of delegatedShares in a withdrawal + * 3. principalShares + * - These can be converted into delegatedShares given a staker and a strategy + * - by multiplying by the staker's depositScalingFactor for the strategy + * - These values automatically update their conversion into tokens + * - when the staker's depositScalingFactor for the strategy is increased upon new deposits + * - or when the staker's operator's total magnitude for the strategy is decreased upon slashing + * - These represent the total amount of shares the staker would have of a strategy if they were never slashed + * - These live in the storage of the StrategyManager/EigenPodManager + * - `stakerStrategyShares` in the SM is the staker's principalShares that have not been queued for withdrawal in a strategy + * - `podOwnerShares` in the EPM is the staker's principalShares that have not been queued for withdrawal in the beaconChainETHStrategy + */ + +type Shares is uint256; + +type DelegatedShares is uint256; + +type PrincipalShares is uint256; + +using SlashingLib for Shares global; +using SlashingLib for DelegatedShares global; +using SlashingLib for PrincipalShares global; + +library SlashingLib { + using Math for uint256; + using SlashingLib for uint256; + + function toPrincipalShares( + DelegatedShares delegatedShares, + uint256 depositScalingFactor + ) internal pure returns (PrincipalShares) { + if (depositScalingFactor == 0) { + depositScalingFactor = WAD; + } + return PrincipalShares.wrap(DelegatedShares.unwrap(delegatedShares).divWad(depositScalingFactor)); + } + + function toDelegatedShares( + PrincipalShares principalShares, + uint256 depositScalingFactor + ) internal pure returns (DelegatedShares) { + if (depositScalingFactor == 0) { + depositScalingFactor = WAD; + } + return DelegatedShares.wrap(PrincipalShares.unwrap(principalShares).mulWad(depositScalingFactor)); + } + + function toShares(DelegatedShares delegatedShares, uint256 magnitude) internal pure returns (Shares) { + return Shares.wrap(DelegatedShares.unwrap(delegatedShares).mulWad(magnitude)); + } + + function toDelegatedShares(Shares shares, uint256 magnitude) internal pure returns (DelegatedShares) { + return DelegatedShares.wrap(Shares.unwrap(shares).divWad(magnitude)); + } + + // WAD MATH + + function mulWad(uint256 a, uint256 b) internal pure returns (uint256) { + return a.mulDiv(b, WAD); + } + + function divWad(uint256 a, uint256 b) internal pure returns (uint256) { + return a.mulDiv(WAD, b); + } +} diff --git a/src/contracts/pods/EigenPodManager.sol b/src/contracts/pods/EigenPodManager.sol index 382873161..9353101c8 100644 --- a/src/contracts/pods/EigenPodManager.sol +++ b/src/contracts/pods/EigenPodManager.sol @@ -130,7 +130,7 @@ contract EigenPodManager is staker: podOwner, strategy: beaconChainETHStrategy, // existing shares from standpoint of the DelegationManager - existingDepositShares: currentPodOwnerShares < 0 ? 0 : uint256(currentPodOwnerShares), + existingPrincipalShares: currentPodOwnerShares < 0 ? 0 : uint256(currentPodOwnerShares), addedShares: uint256(changeInDelegatableShares) }); } @@ -168,11 +168,11 @@ contract EigenPodManager is * @dev Reverts if `shares` is not a whole Gwei amount */ function addShares( - address staker, - IERC20 token, - IStrategy strategy, + address staker, + IERC20 token, + IStrategy strategy, uint256 shares - ) external onlyDelegationManager { + ) external onlyDelegationManager { require(strategy == beaconChainETHStrategy, InvalidStrategy()); require(staker != address(0), InputAddressZero()); require(int256(shares) >= 0, SharesNegative()); @@ -184,12 +184,8 @@ contract EigenPodManager is emit PodSharesUpdated(staker, int256(shares)); emit NewTotalShares(staker, updatedShares); - uint256 increaseInDelegateableShares = uint256( - _calculateChangeInDelegatableShares({ - sharesBefore: currentShares, - sharesAfter: updatedShares - }) - ); + uint256 increaseInDelegateableShares = + uint256(_calculateChangeInDelegatableShares({sharesBefore: currentShares, sharesAfter: updatedShares})); // TODO: ADD SHARES BACK TO DM } @@ -202,9 +198,9 @@ contract EigenPodManager is * we do not need to update the podOwnerShares if `currentPodOwnerShares` is positive */ function withdrawSharesAsTokens( - address recipient, - IStrategy strategy, - uint256 shares, + address recipient, + IStrategy strategy, + uint256 shares, IERC20 ) external onlyDelegationManager { require(strategy == beaconChainETHStrategy, InvalidStrategy()); diff --git a/src/test/mocks/DelegationManagerMock.sol b/src/test/mocks/DelegationManagerMock.sol index 9063f70cf..5f21519d6 100644 --- a/src/test/mocks/DelegationManagerMock.sol +++ b/src/test/mocks/DelegationManagerMock.sol @@ -10,6 +10,9 @@ contract DelegationManagerMock is IDelegationManager, Test { mapping(address => bool) public isOperator; mapping(address => mapping(IStrategy => uint256)) public operatorShares; + + function operatorDelegatedShares(address operator, IStrategy strategy) external view returns (uint256) {} + function setIsOperator(address operator, bool _isOperatorReturnValue) external { isOperator[operator] = _isOperatorReturnValue; } diff --git a/src/test/mocks/EigenPodManagerMock.sol b/src/test/mocks/EigenPodManagerMock.sol index 855fc54e6..53f4701d3 100644 --- a/src/test/mocks/EigenPodManagerMock.sol +++ b/src/test/mocks/EigenPodManagerMock.sol @@ -17,6 +17,14 @@ contract EigenPodManagerMock is IEigenPodManager, Test, Pausable { _initializePauser(_pauserRegistry, 0); } + function removeShares(address staker, IStrategy strategy, uint256 shares) external {} + + function addShares(address staker, IERC20 token, IStrategy strategy, uint256 shares) external {} + + function withdrawSharesAsTokens(address recipient, IStrategy strategy, uint256 shares, IERC20 token) external {} + + function stakerStrategyShares(address user, IStrategy strategy) external view returns (uint256 shares) {} + function slasher() external view returns(ISlasher) {} function createPod() external returns(address) {} diff --git a/src/test/mocks/StrategyManagerMock.sol b/src/test/mocks/StrategyManagerMock.sol index 656725d41..e1bc18181 100644 --- a/src/test/mocks/StrategyManagerMock.sol +++ b/src/test/mocks/StrategyManagerMock.sol @@ -64,6 +64,10 @@ contract StrategyManagerMock is external returns (uint256 shares) {} + function getStakerStrategyList( + address staker + ) external view returns (IStrategy[] memory) {} + /** * @notice mocks the return value of getDeposits * @param staker staker whose deposits are being mocked From c7b8d6347717ff6ff8a80678816b01d15abde957 Mon Sep 17 00:00:00 2001 From: gpsanant Date: Fri, 20 Sep 2024 17:48:29 -0700 Subject: [PATCH 46/47] simplify wraps --- src/contracts/core/DelegationManager.sol | 26 ++++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 53f7a9740..7b6cc4d8d 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -393,8 +393,8 @@ contract DelegationManager is operator: operator, staker: staker, strategy: strategy, - existingPrincipalShares: PrincipalShares.wrap(existingPrincipalShares), - addedShares: Shares.wrap(addedShares), + existingPrincipalShares: existingPrincipalShares, + addedShares: addedShares, totalMagnitude: totalMagnitude }); } @@ -516,8 +516,8 @@ contract DelegationManager is operator: operator, staker: staker, strategy: strategies[i], - existingPrincipalShares: PrincipalShares.wrap(0), - addedShares: Shares.wrap(shares[i]), + existingPrincipalShares: 0, + addedShares: shares[i], totalMagnitude: totalMagnitudes[i] }); } @@ -589,8 +589,8 @@ contract DelegationManager is address operator, address staker, IStrategy strategy, - PrincipalShares existingPrincipalShares, - Shares addedShares, + uint256 existingPrincipalShares, + uint256 addedShares, uint64 totalMagnitude ) internal { _updateDepositScalingFactor({ @@ -602,7 +602,7 @@ contract DelegationManager is }); // based on total magnitude, update operators delegatedShares - uint256 delegatedShares = DelegatedShares.unwrap(addedShares.toDelegatedShares(totalMagnitude)); + uint256 delegatedShares = DelegatedShares.unwrap(Shares.wrap(addedShares).toDelegatedShares(totalMagnitude)); operatorDelegatedShares[operator][strategy] += delegatedShares; // TODO: What to do about event wrt scaling? @@ -735,12 +735,12 @@ contract DelegationManager is address staker, IStrategy strategy, uint64 totalMagnitude, - PrincipalShares existingPrincipalShares, - Shares addedShares + uint256 existingPrincipalShares, + uint256 addedShares ) internal returns (uint256) { uint256 newDepositScalingFactor; - if (PrincipalShares.unwrap(existingPrincipalShares) == 0) { + if (existingPrincipalShares == 0) { // existing shares are 0, meaning no existing delegated shares. In this case, the new depositScalingFactor // is re-initialized to newDepositScalingFactor = WAD / totalMagnitude; @@ -762,12 +762,12 @@ contract DelegationManager is // we can solve for // uint256 existingShares = Shares.unwrap( - existingPrincipalShares.toDelegatedShares(depositScalingFactors[staker][strategy]).toShares( + PrincipalShares.wrap(existingPrincipalShares).toDelegatedShares(depositScalingFactors[staker][strategy]).toShares( totalMagnitude ) ); - newDepositScalingFactor = (existingShares + Shares.unwrap(addedShares)) * WAD - / (PrincipalShares.unwrap(existingPrincipalShares) + Shares.unwrap(addedShares)) * WAD / totalMagnitude; + newDepositScalingFactor = (existingShares + addedShares) * WAD + / (existingPrincipalShares + addedShares) * WAD / totalMagnitude; } // update the staker's depositScalingFactor From bc51d3c00b89cc84bce7858685b34d0adb42616f Mon Sep 17 00:00:00 2001 From: gpsanant Date: Fri, 20 Sep 2024 18:14:17 -0700 Subject: [PATCH 47/47] update comment --- src/contracts/core/DelegationManager.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 7b6cc4d8d..72a2a3cae 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -750,14 +750,14 @@ contract DelegationManager is // // newShares // = existingShares + addedShares - // = _convertPrincipalSharesToShares(staker, strategy, existingPrincipalShares, totalMagnitude) + addedShares + // = existingPrincipalShares.toDelegatedShares(stakerScalingFactors[staker][strategy).toShares(totalMagnitude) + addedShares // // and it also is // // newShares - // = _convertPrincipalSharesToShares(staker, strategy, newPrincipalShares, totalMagnitude) - // = newPrincipalShares * newDepositScalingFactor / WAD * totalMagnitude / WAD - // = (existingPrincipalShares + addedShares) * newDepositScalingFactor / WAD * totalMagnitude / WAD + // = newPrincipalShares.toDelegatedShares(stakerScalingFactors[staker][strategy).toShares(totalMagnitude) + // = newPrincipalShares * newDepositScalingFactor / WAD * totalMagnitude / WAD + // = (existingPrincipalShares + addedShares) * newDepositScalingFactor / WAD * totalMagnitude / WAD // // we can solve for //